C# 如何实现RegAsm,使其覆盖32位和64位?

C# 如何实现RegAsm,使其覆盖32位和64位?,c#,windows,com,regasm,regedit,C#,Windows,Com,Regasm,Regedit,我有一个由C#编写的DLL文件,我的系统是Windows7 64位。 当我应用RegAsm时,它不会将注册表添加到64位路径,而只是将其添加到32位路径 "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe" /register /codebase "C:\o.dll" 然后,如果我在regedit.exe中检查我的GUID,我会发现它只存在于32位注册表路径中:HKEY\U CLASSES\U ROOT\CLSID\{……我的

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

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe" /register /codebase "C:\o.dll"
然后,如果我在regedit.exe中检查我的GUID,我会发现它只存在于32位注册表路径中:
HKEY\U CLASSES\U ROOT\CLSID\{……我的GUID在这里找到了……}

而不是
HKEY\u CLASSES\u ROOT\Wow6432Node\CLSID\{…找不到我的guid…}


因此,我在这方面还有其他问题。任何人都可以建议发生了什么以及为什么不创建32位和64位注册表项吗?

您可以反向操作。WOW6432节点是32位特定数据的存放位置。使用32位regasm(来自Framework目录,而不是Framework64目录)要在WOW6432节点中注册组件。

此外,您可能使用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”

另外,这是一个5yo问题,但可能对其他人有所帮助

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