使用OCX而不注册它

时间:2008-10-24 18:20:02

标签: .net com ocx regfreecom

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

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

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

5 个答案:

答案 0 :(得分:32)

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

基本上你要做的是为ActiveX控件DLL创建一个清单文件,以便Windows加载器和COM DLL知道它的注册是什么,而不必将其放在注册表中。

有关如何做的演练,请参阅MSDN上的这篇文章: Registration-Free Activation of COM Components: A Walkthrough

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

我刚试了一个我自己的C#程序,它使用的是Microsoft ActiveX网格控件(旧的“MS Flex Grid”),它运行得很好。确保为应用程序和COM DLL创建清单文件,并在适当的位置替换相应的GUID。如果你没有方便的话,你可能需要使用OLEVIEW从ActiveX DLL中挖掘出正确的ID。

答案 1 :(得分:5)

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

链接:Stackoverflow question我在那里学到了这个问题中提到的Microsoft知识库article。有一个修补程序,但不允许您重新分发它。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:1)

现在,有一个无法访问的点击网站解决方案的副本:mmm4vb6.atom5.com/yes-update-0-12-5479.html#c在Web存档上: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。如果确实需要包括它们,则可以通过“添加文件”自己添加它们,或者之后将它们复制到目标文件夹。 试图应对Microsoft补丁的尝试最终导致MMM清单中的“重复” coClass条目。 更好(我们希望)处理某些VB6提供的OCX中包含的非创建类。 我希望这能解决您在这些领域可能遇到的一些问题。当然,我希望这个版本不会破坏任何东西或使事情变得更糟。

通过下载获取新版本:

MMM-0-12

发布于2013年4月7日,星期日,02:59 PM ...