C# 如何克隆OLE/COM注册表项以用于不同的设置

C# 如何克隆OLE/COM注册表项以用于不同的设置,c#,com,registry,ole,catia,C#,Com,Registry,Ole,Catia,我编写了一个C#程序,通过OLE/COM与Catia v5.18进行接口。通常情况下,运行程序的机器上会安装多个版本的Catia。无论是旧的还是新的,都可以按任何时髦的顺序安装。最后安装的一个可以将其设置放入注册表 我正在尝试设置注册表以使用新句柄仅连接到5.18 CNEXT服务器。我在HKEY_CLASSES_ROOT中找到Catia.Application条目和CLSID条目。我复制了这些文件,并为CLSID提供了一个新的UUID,并生成了以下注册表导入文件: Windows Registr

我编写了一个C#程序,通过OLE/COM与Catia v5.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());
  }
}

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

应该是这样吗

[HKEY_CLASSES_ROOT\CATIA.Application.v518]
"CLSID"="{ba3ca493-05fb-4188-a767-f40c03db2672}"
你写的地方:

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

一切看起来都很好。由于某种原因,它无法启动该过程。可能是一些安全或许可验证问题,很难猜测。可能Windows事件日志中有一个面包屑。联系供应商以获得支持。