Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 重写已注册COM程序集的使用_Vb.net_Com_Interop - Fatal编程技术网

Vb.net 重写已注册COM程序集的使用

Vb.net 重写已注册COM程序集的使用,vb.net,com,interop,Vb.net,Com,Interop,我有一个旧的VB6应用程序,我正在迁移到VB.Net中,我还有一个COM程序集,它是从应用程序引用的 我希望能够同时运行两个应用程序—旧应用程序和.net应用程序,问题是我对COM程序集的签名做了一些更改,使其能够在.net应用程序上运行,这些更改与旧应用程序不兼容 如果我先安装旧应用程序,它会注册dll并将其复制到System32,当我安装新应用程序时,它会将新COM程序集复制到程序文件中的应用程序文件夹中,但当我执行它时,它会尝试加载由旧应用程序注册的旧程序集 有没有办法让新应用程序使用它自

我有一个旧的VB6应用程序,我正在迁移到VB.Net中,我还有一个COM程序集,它是从应用程序引用的

我希望能够同时运行两个应用程序—旧应用程序和.net应用程序,问题是我对COM程序集的签名做了一些更改,使其能够在.net应用程序上运行,这些更改与旧应用程序不兼容

如果我先安装旧应用程序,它会注册dll并将其复制到System32,当我安装新应用程序时,它会将新COM程序集复制到程序文件中的应用程序文件夹中,但当我执行它时,它会尝试加载由旧应用程序注册的旧程序集

有没有办法让新应用程序使用它自己文件夹中的程序集?因此,使用旧应用程序保留旧应用程序,即在system32上注册的应用程序

我希望我说清楚了


非常感谢您的帮助。

您能不能给您的旧COM对象和新COM对象提供不同的GUID、CLSID、接口名称、typelib名称和类名以及其他我忘记的内容:

i、 e.在新版本中,重命名所有内容,使其不会注册到旧版本的顶部,而是一组单独的对象、接口等


然后,新代码可以使用新对象和更新的接口,而旧代码仍然可以使用旧对象和原始接口。

您不能为旧COM对象和新COM对象提供不同的GUID CLSID、接口名称、类型库名称和类名以及我忘记的任何其他内容:

i、 e.在新版本中,重命名所有内容,使其不会注册到旧版本的顶部,而是一组单独的对象、接口等


然后,新代码可以使用新对象和更新的接口,而旧代码仍然可以使用旧对象和原始接口。

听起来您忘记注册COM服务器了。但这将扼杀旧的应用程序。COM中的一个硬要求是,在对co类和接口进行破坏性更改时更改它们的GUID。这确保了不同的版本可以并排运行,而不会互相践踏对方的注册表项

无注册COM清单是另一种方式。尽管将清单放在一起并解决问题通常不是一件很有趣的事情


一个非常非常便宜的技巧是将COM服务器DLL与客户端EXE放在同一目录中。并创建一个扩展名为.local的空文件。如果主EXE名为mumble.EXE,则该文件应命名为mumble.EXE.local。这就足以让COM解析器始终使用本地DLL,而不是注册表中记录的路径。这是。

听起来你忘记注册COM服务器了。但这将扼杀旧的应用程序。COM中的一个硬要求是,在对co类和接口进行破坏性更改时更改它们的GUID。这确保了不同的版本可以并排运行,而不会互相践踏对方的注册表项

无注册COM清单是另一种方式。尽管将清单放在一起并解决问题通常不是一件很有趣的事情


一个非常非常便宜的技巧是将COM服务器DLL与客户端EXE放在同一目录中。并创建一个扩展名为.local的空文件。如果主EXE名为mumble.EXE,则该文件应命名为mumble.EXE.local。这就足以让COM解析器始终使用本地DLL,而不是注册表中记录的路径。这是。

谢谢,这就是我最后要做的,在DLL上更改GUID并注册两者。谢谢,这就是我最后要做的,在DLL上更改GUID并注册两者。Reg-free COM清单?我从没听说过。非常感谢tipThanks,Hans,这对我来说似乎是一个更好的选择太糟糕了,我已经更改了DLL的GUID,下次遇到这样的问题时我会使用它。Reg-free COM清单?我从没听说过。非常感谢tipThanks,Hans,这对我来说似乎是一个更好的选择太糟糕了,我已经更改了DLL的GUID,下次遇到这样的问题时我会使用它。