Vb.net 重写已注册COM程序集的使用
我有一个旧的VB6应用程序,我正在迁移到VB.Net中,我还有一个COM程序集,它是从应用程序引用的 我希望能够同时运行两个应用程序—旧应用程序和.net应用程序,问题是我对COM程序集的签名做了一些更改,使其能够在.net应用程序上运行,这些更改与旧应用程序不兼容 如果我先安装旧应用程序,它会注册dll并将其复制到System32,当我安装新应用程序时,它会将新COM程序集复制到程序文件中的应用程序文件夹中,但当我执行它时,它会尝试加载由旧应用程序注册的旧程序集 有没有办法让新应用程序使用它自己文件夹中的程序集?因此,使用旧应用程序保留旧应用程序,即在system32上注册的应用程序 我希望我说清楚了Vb.net 重写已注册COM程序集的使用,vb.net,com,interop,Vb.net,Com,Interop,我有一个旧的VB6应用程序,我正在迁移到VB.Net中,我还有一个COM程序集,它是从应用程序引用的 我希望能够同时运行两个应用程序—旧应用程序和.net应用程序,问题是我对COM程序集的签名做了一些更改,使其能够在.net应用程序上运行,这些更改与旧应用程序不兼容 如果我先安装旧应用程序,它会注册dll并将其复制到System32,当我安装新应用程序时,它会将新COM程序集复制到程序文件中的应用程序文件夹中,但当我执行它时,它会尝试加载由旧应用程序注册的旧程序集 有没有办法让新应用程序使用它自
非常感谢您的帮助。您能不能给您的旧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,下次遇到这样的问题时我会使用它。