2008-10-24 61 views
28

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

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

我已经看到调用COM DLL没有先注册它的可能性(ProSysLib,根据作者,但我还没有测试过),因为ocx也是基于COM的,因此我假设必须也有办法做到这一点。

回答

31

是的,这可以做到。您必须假定您的应用程序将只部署在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网格”)进行了试用,它工作得很好。确保为应用程序和COM DLL创建清单文件,并在正确的位置替换适当的GUID。如果您没有它们,您可能需要使用OLEVIEW从ActiveX DLL中挖掘出正确的ID。

+0

啊,最后,好吧,很难谷歌这样的解决方案。非常感谢 – faulty 2008-10-25 03:16:00

+0

+1 ..与@faulty相同我刚刚被分配为针对COM组件构建应用程序.. – chakrit 2008-12-30 09:47:39

+1

请注意,它可以随机导致Windows XP上的崩溃::(http://stackoverflow.com/ question/617253/is-anyone-successful-using-registration-free-com-with-net-components – MarkJ 2009-03-17 21:49:14

5

被警告,明显使用.NET中创建的COM组件使用无注册表的COM可以随机导致Windows XP上的崩溃!

链接:Stackoverflow question我在那里学到了这个问题,微软知识库article在那个问题中提到。有一个修补程序,但你不能重新分配它。

2

它在Visual Studio中甚至更简单:只需到References,找到由ocx创建的位置(应该有2个,AxSomething和Something),并为它们设置Isolated:true属性。没有显示,没有代码。 你现在应该分发包含ocx的dll文件。在您的研发机器上,可以注册ocx。

1

10小时搜索如何与OCX Win7上没有对其进行注册和管理员权限运行VB6应用程序后,我发现这里几个点击的解决方案:http://mmm4vb6.atom5.com/yes-update-0-12-5479.html#c

需要检查嵌入清单,使其工作。作为魅力工作!

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