Я написал программу на C #, которая должна взаимодействовать с Catia v5.18 через OLE / COM.Это будет распространенный случай, когда на машине, на которой запущена программа, будет установлено несколько версий Catia.И старше, и новее, и установлены в любом необычном порядке.Последний установленный устанавливает свои параметры в реестре.
Я пытаюсь настроить реестр, чтобы использовать новый дескриптор для подключения только к серверу CNEXT 5.18.Я нашел запись Catia.Application в HKEY_CLASSES_ROOT и запись CLSID.Я сделал их копии и предоставил новый UUID для CLSID и создал следующий файл импорта реестра:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\CATIA.Application.v518]
@="OLE CATIA.Application"
[HKEY_CLASSES_ROOT\CATIA.Application.v518\CLSID]
@="{ba3ca493-05fb-4188-a767-f40c03db2672}"
[HKEY_CLASSES_ROOT\CLSID\{ba3ca493-05fb-4188-a767-f40c03db2672}]
@="OLE CATIA.Application" "AppID"="{ba3ca493-05fb-4188-a767-f40c03db2672}"
[HKEY_CLASSES_ROOT\CLSID\{ba3ca493-05fb-4188-a767-f40c03db2672}\LocalServer32]
@="\"C:\\Program Files\\Dassault Systemes\\B18\\intel_a\\code\\bin\\CNEXT.exe\" -env \"CATIA_PLM_Express.V5R18.B18\" -direnv \"C:\\Documents and Settings\\All Users\\Application Data\\DassaultSystemes\\CATEnv\""
[HKEY_CLASSES_ROOT\CLSID\{ba3ca493-05fb-4188-a767-f40c03db2672}\ProgID]
@="CATIA.Application.v518"
[HKEY_CLASSES_ROOT\CLSID\{ba3ca493-05fb-4188-a767-f40c03db2672}\VersionIndependentProgID]
@="CATIA.Application"
Я убедился, что импорт работает, но когда я запускаю свое приложение, я сталкиваюсь со следующей ошибкойкогда я пытаюсь подключиться к нему.
System.Runtime.InteropServices.C OMException (0x80080005): Retrieving the COM class factory for component with CLSID {BA3CA493-05FB-4 188-A767-F40C03DB2672} failed due to the following error: 80080005 Server execution failed (Exceptio n from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
Я в состоянии нормально запустить эту программу при обычной установке с использованием "CATIA.Application" и "CATIA.Application.1", но вот кодЯ использую для подключения к приложению, если это имеет значение:
public CatiaApplication() {
Type catia_program_id = Type.GetTypeFromProgID( "CATIA.Application.v518" );
try {
this._instance = (Application)Activator.CreateInstance( catia_program_id );
}
catch( Exception ex ) {
throw new ApplicationException( "Failed to access Catia Application: " + ex.ToString());
}
}
У кого-нибудь есть идеи?Я не пытался перезагрузить окно, но похоже, что изменения вступают в силу немедленно.