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

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

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

有帮助吗?

解决方案

是的,这可以做到。您必须假设您的应用程序将仅部署在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。

其他提示

警告显然,在.NET中创建的COM组件显然使用无注册表的COM会随机导致Windows XP崩溃!

链接: Stackoverflow问题我从中了解到,该问题中提到的Microsoft知识库文章。有一个修补程序,但不允许您重新分发它。

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

在Win7上搜索如何使用OCX运行VB6应用程序10小时后没有注册它和管理员权限,我在这里找到了很少的点击解决方案: http://mmm4vb6.atom5.com/yes-update-0-12-5479.html#c

需要检查Embed Manifest才能使其正常工作。充当魅力!

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top