首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何克隆OLE/COM注册表项以用于不同的设置

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

Stack Overflow用户
提问于 2011-09-21 04:00:29
回答 1查看 1.1K关注 0票数 0

我已经编写了一个C#程序,它将通过OLE/COM与CATIA5.18进行接口。这将是一种常见的情况,在运行程序的机器上将安装多个版本的Catia。无论是旧的还是新的,都可以按照任何时髦的顺序安装。最后安装的应用程序会将其设置放入注册表中。

我正在尝试设置注册表,以便使用新的句柄仅连接到5.18 CNEXT服务器。我在HKEY_CLASSES_ROOT中找到了Catia.Application条目和CLSID条目。我复制了这些文件,并为CLSID提供了一个新的UUID,并提出了以下注册表导入文件:

代码语言:javascript
复制
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" 

我验证了导入工作正常,但是当我运行我的应用程序时,当我试图连接到它时遇到了以下错误。

代码语言:javascript
复制
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”在普通安装上很好地运行这个程序,但如果重要的话,下面是我用来连接到应用程序的代码:

代码语言:javascript
复制
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());
  }
}

有谁有什么想法吗?我还没有尝试重新启动机器,但到目前为止,这些更改似乎立即生效。

EN

回答 1

Stack Overflow用户

发布于 2011-09-27 16:37:26

难道不应该是这样吗?

代码语言:javascript
复制
[HKEY_CLASSES_ROOT\CATIA.Application.v518]
"CLSID"="{ba3ca493-05fb-4188-a767-f40c03db2672}"

你写它的地方:

代码语言:javascript
复制
[HKEY_CLASSES_ROOT\CATIA.Application.v518\CLSID]
@="{ba3ca493-05fb-4188-a767-f40c03db2672}"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7491077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档