2010-07-30 156 views
0

我正在写一个C#程序,通过COM互操作与COM对象接口。注册COM参考64位Windows 7机器

我有一个第三方程序,当我执行应用程序时,它自己注册为COM服务器。这在32位Windows Vista中运行良好,我可以与Interop进行交互。 (当您点击“添加引用”时,Visual Studio的“COM”选项卡中将显示该引用)

但是,执行完后,引用没有显示在我的64位Windows 7机器的“COM”应用。任何想法,为什么会发生?我实际上尝试使用regsvr32.exe来手动注册应用程序,但它也没有工作(错误消息说“入口点DllRegisterServer找不到)

回答

1

只要它你不能使用它没有出现在COM选项卡中regsvr32.exe工具用于DLL,但这听起来像是一个EXE,如果它是一个DLL,那么它需要注册32位版本的regsvr32.exe,在C:\ WINDOWS \ SysWOW64中如果它是一个EXE,然后按正常方式得到它注册自己是通过使用/ REGSERVER命令行选项运行它

Mumble.exe/RegServer添加

此外,如果这是一个您没有64位代理/存根的DLL或EXE,那么您将不得不强制您的应用以32位模式运行。项目+属性,生成选项卡,平台目标= x86。

如果一切都失败了,你真的需要这个程序的供应商支持。当然,他们会有一个经过验证可在64位操作系统上正常工作的更新。如果他们不在身边,在虚拟机中运行它总是可能的。

+0

非常感谢Hans,这非常有帮助。我试图注册的文件实际上是.exe,难怪我无法做到这一点。我确实已经设置了Platform target = x86。 Mumble.exe在哪里?我如何得到它? – mwong 2010-08-02 13:41:47

+0

我不能帮你找到.exe,你不知道吗?这是您在OP中提到的第三方程序。 – 2010-08-02 13:49:50

+0

对不起,我可能误解了你。我以为你提到了一个名为Mumble.exe的工具 - 这可能只是一个例子。当然,我会知道第三方程序的位置。 – mwong 2010-08-02 14:18:39

1

如果它是一个托管的DLL,那么你可以尝试使用RegAsm

REGASM AssemblyName.dll /tlb:AssemblyName.tlb 
0

你会发现这是很有帮助的,因为我需要重新编译和构建64位代理存根从C++ COM服务器我和它一直未能尝试使用/ regserver注册服务器时。这是来自miscrosoft的线程,帮助我解决了这个问题。基本上你需要使用这个来代替/ RegServerPerUser,但是如果你在上面的答案后遇到这种情况,请通过线程。

http://social.msdn.microsoft.com/Forums/en/vcprerelease/thread/11f01ceb-52a4-438f-b7ef-727ce7a3e191