我已经编写了一个C#程序,它将通过OLE/COM与CATIA5.18进行接口。这将是一种常见的情况,在运行程序的机器上将安装多个版本的Catia。无论是旧的还是新的,都可以按照任何时髦的顺序安装。最后安装的应用程序会将其设置放入注册表中。
我正在尝试设置注册表,以便使用新的句柄仅连接到5.18 CNEXT服务器。我在HKEY_CLASSES_ROOT中找到了Catia.Application条目和CLSID条目。我复制了这些文件,并为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());
}
}有谁有什么想法吗?我还没有尝试重新启动机器,但到目前为止,这些更改似乎立即生效。
发布于 2011-09-27 16:37:26
难道不应该是这样吗?
[HKEY_CLASSES_ROOT\CATIA.Application.v518]
"CLSID"="{ba3ca493-05fb-4188-a767-f40c03db2672}"你写它的地方:
[HKEY_CLASSES_ROOT\CATIA.Application.v518\CLSID]
@="{ba3ca493-05fb-4188-a767-f40c03db2672}"https://stackoverflow.com/questions/7491077
复制相似问题