我编写了一个 C# 程序,它通过 OLE/COM 与 Catia v5.18 交互。运行程序的机器将安装多个版本的 Catia,这将是一种常见的情况。旧的和新的,并以任何时髦的顺序安装。最后安装的将其设置放入注册表中。
我正在尝试将注册表设置为使用新句柄仅连接到 5.18 CNEXT 服务器。我在 HKEY_CLASSES_ROOT 和 CLSID 条目中找到了 Catia.Application 条目。我制作了这些副本并为 CLSID 提供了一个新的 UUID,并提出了以下注册表导入文件:
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());
}
}
有人有什么想法吗?我没有尝试重新启动盒子,但到目前为止,更改似乎立即生效。