如何进行RegAsm操作,以便同时支持32位和64位?

23

我有一个由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\{...我的GUID在此处....}

而不是HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{...没有找到我的GUID...}

因此我有其他问题。请问有人可以建议一下发生了什么情况,为什么没有生成32位和64位的注册表项吗?


参数/register仍然有效吗?我在这里的文档中没有找到任何信息https://learn.microsoft.com/en-US/dotnet/framework/tools/regasm-exe-assembly-registration-tool - KargWare
3个回答

28

你的理解是相反的。Wow6432Node 是用来存放 32 位特定数据的地方。使用 32 位的 regasm(来自 Framework 目录,而非 Framework64 目录)将组件注册到 Wow6432Node 中。


15

此外,您可能使用了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. 这是五年前的问题,但可能会对其他人有所帮助。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接