RegAsm怎么做才能覆盖32位和64位?

时间:2014-06-27 12:25:46

标签: c# windows com regasm regedit

我有一个由C#编写的DLL文件,我的系统是Windows 7 64位。 当我应用RegAsm时,它没有将注册表添加到64位路径,而只是将其添加到32位路径。

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe" /register /codebase "C:\o.dll"

然后,如果我在regedit.exe中检查我的GUID,我看到我只在32位注册表路径中使用它:HKEY_CLASSES_ROOT\CLSID\{... my guid is found here ....}

而不是HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{... not found my guid ...}

因此,我还有其他问题。任何人都可以建议发生了什么以及为什么它没有制作32位和64位注册表项?“

3 个答案:

答案 0 :(得分:23)

你倒退了。 Wow6432Node是32位特定数据的所在。使用32位regasm(来自Framework目录,而不是Framework64目录)让您的组件在Wow6432Node中注册。

答案 1 :(得分:0)

另外,您可能使用AllCPU选项编译了dll。 尝试使用x64和/或x86选项进行编译并像您一样注册

  • 对于x64-"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe" /register /codebase "C:\x64\o.dll"
  • 对于x86-"C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" /register /codebase "C:\x86\o.dll"

P.S。它的5岁问题,但可能对其他人有帮助

答案 2 :(得分:0)

在我的2016 Windows服务器上,情况恰好相反,它是一个旧的dll,需要使用“ Framework”文件夹而不是“ Framework64”文件夹进行注册: “ C:\ windows \ Microsoft.net \ Framework \ v4.0.30319 \ regasm” / register / codebase“此处为dll的完整路径”