0

我编写了一个 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());
  }
}

有人有什么想法吗?我没有尝试重新启动盒子,但到目前为止,更改似乎立即生效。

4

1 回答 1

1

不应该是这个吗?

[HKEY_CLASSES_ROOT\CATIA.Application.v518]
"CLSID"="{ba3ca493-05fb-4188-a767-f40c03db2672}"

你在哪里写的:

[HKEY_CLASSES_ROOT\CATIA.Application.v518\CLSID]
@="{ba3ca493-05fb-4188-a767-f40c03db2672}"
于 2011-09-27T08:37:26.237 回答