如何在 vb6 中更改 DCOM 的 guid?
Posted
技术标签:
【中文标题】如何在 vb6 中更改 DCOM 的 guid?【英文标题】:How do I change a DCOM's guid in vb6? 【发布时间】:2009-05-26 19:12:18 【问题描述】:我有一个 Windows 服务,它正在用某个 guid A 实例化一个 dcom 对象。
我需要用新版本替换那个 dcom 对象。 当我创建和编译我的替换 dcom 对象时,它是使用 guid B 创建的。
如何将替换 dcom 对象的 guid 从 guid B 更改为 guidA?
【问题讨论】:
【参考方案1】:如果您尝试更改“服务器”端的 ID(发布该特定类的 DLL 或应用程序),当您在项目属性、“组件”选项卡中选择“不兼容”时,VB 会为您执行此操作.
如果您尝试更改在“客户端”(使用由另一个 dll/app 发布的类的 DLL 或应用程序)中实例化的对象,则需要更改引用(通过引用或组件,取决于我们谈论的是哪种对象),以便您指向新版本的服务器(使用更新的 GUID 发布他的类的那个)。这意味着删除当前引用并添加对新服务器的引用。如果名称没有改变,其他一切都应该像以前一样工作,显然类的接口有微小的变化。
据我所知,您无法直接访问 VB6 中的 GUID。
【讨论】:
【参考方案2】:我设法重新编译了我的替换 DCOM 对象并让它使用 Guid A by ...
-
从注册表中删除所有对 Guid B 的引用
删除我的替换 DCOM 对象 exe 文件
复制到原DCOM exe文件中
将原 DCOM exe 文件重命名为替换名称
重新编译vb工程
我猜当 VB 替换 exe 文件时,它会查找 GUID,然后将其重用于重新编译的版本。
【讨论】:
【参考方案3】:您应该将您的应用程序(替换 DCOM 对象)编译为与现有 dll 二进制兼容,这样它将继承相同的 GUID 并且版本号将增加。如果你用替换覆盖现有的 DCOM dll,一切都应该工作。
例如,在 VB6 中,您可以在项目对话设置中指定二进制兼容性。不确定你在哪里为 C++ 设置它,我认为 GUID 嵌入在源代码中。
【讨论】:
以上是关于如何在 vb6 中更改 DCOM 的 guid?的主要内容,如果未能解决你的问题,请参考以下文章
通过 PowerShell 更改 DCOM 对象权限后要重新启动啥?