2013-12-30 5 views
0

У меня есть устаревшая система, содержащая старый COM-компонент, работающий под COM +. Нам нужно переименовать этот старый компонент, но у нас нет исходного кода. Есть ли способ переименовать компонент (а не приложение) без перекомпиляции?Есть ли способ переименовать COM-компонент, не перекомпилируя исходный код?

+0

Теоретически вы можете попытаться просто изменить имя самого файла. Я предполагаю, что у вас есть источник устаревшей системы, если вы этого не сделаете, то, что вы хотите, невозможно. –

+0

Я уже пробовал переименовать файл. Не повезло. У источника, который у меня есть, не гарантируется то, что на самом деле находится в производстве. Это беспорядок. –

+0

Если у вас нет источника программного обеспечения для производства, то то, что вы хотите, невозможно. –

ответ

1

«Имя» для класса СОМ известен как ProgID:

Программный идентификатор (ProgID) является запись в реестре, который может быть связан с CLSID. Как и CLSID, ProgID идентифицирует класс, но с меньшей точностью, поскольку он не гарантированно уникален во всем мире.

Целью идентификатора является предоставление отображения первичного идентификатора для класса, CLSID. Следовательно, вы можете вручную создать другой/альтернативный ключ с другим именем, отображающим один и тот же CLSID, и он собирается сделать этот трюк.

  • HKEY_LOCAL_MACHINE\SOFTWARE\Classes\<New-ProgID>\CLSID
  • (значение по умолчанию) = <Same-CLSID>

Имейте в виду, что ключ для 32-битного компонента на 64-битной системе:

  • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\<New-ProgID>\CLSID

CLSID - основной элемент вашего интереса, вы, возможно, захотите дублировать все подразделы и значения с вашего оригинального ключа ProgID (в частности, VersionIndependentProgID, если у вас есть это для вашего класса).

Затем COM + специфическая часть является ProgID подключ под CLSID, где DCOMCNG (вы ссылаетесь в комментариях как "COM + Applications | MyApplication | Components") принимает имена из:

  • HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\<Your-CLSID>\ProgID
  • (по умолчанию значение) = <ProgID>

Переименование этого эффекта повлияет на приложение COM +. Те же самые ключи/значения предположительно используются в самом приложении (это верно для первых двух, и я не уверен в последнем конкретном COM +).

+0

Не совсем, имя, которое использует COM +, происходит из 'Classes \ CLSID \ {guid} \ ProgID'. В качестве примера рассмотрим {2C3E140B-7A0D-42d1-B2AA-D343500A90CF}. Я не знаю, насколько важно соответствовать имени ключа Classes \ ProgId. –

+0

@HansPassant: Я стою исправлено здесь - DCOMCNFG определенно перечисляет оттуда.Однако нет другого сопоставления с CLSID, поэтому я предполагаю, что создание экземпляра будет обычным способом. Этот подраздел вряд ли используется для возврата к CLSID, поскольку он уже находится под его CLSID ключом. –

+0

Заметьте, я не нашел свою COM + информацию точно, где вы сказали, я действительно нашел ее под HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Classes \ CLSID \ Я только что экспортировал этот ключ и отредактировал все ссылки на мой старый ProgID на мой новый ProgID. Вызывается компонентом с обновленным именем из моего тестового приложения и вуаля! Спасибо Спасибо спасибо! –

Смежные вопросы