33

是否可以在 winform 上使用 ocx(ActiveX 控件)(可能以编程方式添加它)而无需先向 regsrv32 注册 ocx?

我想要实现的是启用 xcopy 安装。我已经从我的开发机器生成了“AxInterop..dll ”和“Interop..dll”文件。

我已经看到了在不先注册它的情况下调用 COM dll 的可能性(ProSysLib,据作者说,但我还没有测试过),因为 ocx 也是基于 COM 的,因此我认为必须有一些方法也这样做。

4

6 回答 6

35

是的,这是可以做到的。您必须假设您的应用程序将仅部署在 Windows XP(或 Windows Server 2003)或更高版本上,然后您可以使用所谓的“免注册 COM”来实现这一目标。

本质上,您所做的是为 ActiveX 控件 DLL 创建一个清单文件,以便 Windows 加载程序和 COM DLL 知道它的注册是什么,而不必将其放入注册表中。

MSDN 上的这篇文章中介绍了要执行的操作: COM 组件的免注册激活:演练

该文章中的“第 6 步”和“第 7 步”包含您需要的所有内容。

我刚刚在我自己的一个使用 Microsoft ActiveX 网格控件(旧的“MS Flex Grid”)的 C# 程序上进行了尝试,它工作得很好。确保为应用程序和 COM DLL 创建清单文件,并在正确的位置替换适当的 GUID。如果手边没有它们,您可能需要使用 OLEVIEW 从​​ ActiveX DLL 中找出要使用的正确 ID。

于 2008-10-24T19:52:34.623 回答
5

请注意,显然对在 .NET 中编写的 COM 组件使用无注册表 COM 可能会随机导致 Windows XP 上的崩溃!

链接:Stackoverflow question where I learn this, Microsoft 知识库文章在那个问题中提到。有一个修补程序,但您不能重新分发它。

于 2009-03-17T21:55:08.773 回答
3

在 Visual Studio 中甚至更简单:只需转到引用,找到您的 ocx 创建的位置(应该有 2 个,AxSomething 和Something)并为它们设置隔离:在它们的属性中为真。没有清单,没有代码。您现在应该使用包含 ocx 的 dll 文件分发您的 exe。在您的开发机器上,可以注册 ocx。

于 2012-03-20T11:23:31.147 回答
2

现在,有一个无法访问的点击站点解决方案的副本:mmm4vb6.atom5.com/yes-update-0-12-5479.html#c 在网络存档: http ://web.archive.org/web/20140828233304/ http://mmm4vb6.atom5.com/yes-update-0-12-5479.html

和上下文:

做我的清单

2013 年 4 月 7 日,星期日

是的,更新

虽然我不再那么积极地使用 VB6 进行日常工作,但在此过程中,我和我的同事们需要在修复错误后重新打包一些现有的应用程序,以应对不断变化的 Windows 环境。

自上一个版本发布以来,我们进行了一些更改,看起来不错。我决定发布此更新,但请注意,它尚未像大多数早期版本那样经过彻底的测试!

因此,请务必在发布之前彻底测试使用 MMM 0.12 打包的 MMM 应用程序。

有关详细信息,请参阅更改日志 (Related\MMMChangeLog.txt)。以下是显着的变化:

另一种改进/更正清单的 DPI-Aware 节点的尝试。更改 TLB 处理以防止它们被包含在内。运行时通常不需要 TLB。如果您确实需要包含它们,请通过添加文件自己添加它们,或者之后将它们复制到目标文件夹。试图应对最终导致 MMM 清单中出现“重复” coClass 条目的 Microsoft 补丁。更好地(我们希望)处理一些 VB6 提供的 OCX 中包含的不可创建类。我希望这能解决您在这些领域也可能面临的一些问题。当然,我希望这个版本不会破坏任何东西或以某种方式使事情变得更糟。

通过下载获取新版本:

MMM-0-12

发表于 2013 年 4 月 7 日星期日下午 2:59 ...

于 2019-11-17T13:03:09.077 回答
0

经过 10 个小时的搜索如何在 Win7 上使用 OCX 运行 VB6 应用程序而无需注册它和管理员权限,我在这里找到了一些点击解决方案:http: //mmm4vb6.atom5.com/yes-update-0-12-5479.html# C

需要检查嵌入清单以使其工作。像魅力一样工作!

我在这里发布解决方案,因为我在这里也发现了这个问题。

于 2013-04-11T19:58:49.743 回答
0

我通过以下方式将 ocx 转换为 dll

  • 打开“VS 2019 的开发人员命令提示符”
  • 调用“tlbimp 文件名.ocx”

然后我将生成的 filename.dll 作为项目中的参考导入。

参考:https ://docs.microsoft.com/en-us/dotnet/framework/tools/tlbimp-exe-type-library-importer

于 2022-01-28T22:12:03.987 回答