如何在 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?的主要内容,如果未能解决你的问题,请参考以下文章

使用 COM 适合我吗?

通过 PowerShell 更改 DCOM 对象权限后要重新启动啥?

VB6.0 中 CHR() 函数如何使用? 还有特殊符号的 ASCII 码是多少? 如回车 空格

.net 中的 DCOM (C#)

VB6 ADO 连接 - 如何检查是不是在事务中?

如何为每个客户端获取一个 DCOM 服务器