2

我将我的项目构建为 64 位(不是任何 CPU),但特别是 64 位。所有的 dll 都是 64 位的;其中大部分是托管代码(C#),少数文件是非托管(C++ 代码)。

我正在 Installshield 中创建安装程序,我需要注册 dll。我在网上看了很多,我很困惑。

  • regsvr32 -> 要注册我的 C++ dll,我应该使用哪个 regsvr32.exe?System32 或 Syswow64。
  • regasm -> 要注册我的 C# dll,我应该使用哪个 regasm?框架/框架64
4

1 回答 1

4

在 64 位系统上,如 64 位应用程序所见:

  • System32:包含 64 位系统文件
  • SysWow64:包含 32 位系统文件

在 64 位系统上,如 32 位应用程序所见:

  • System32:通常重定向到 SysWow64,因此访问 32 位系统文件
  • SysNative:重定向到真正的 System32;访问 64 位文件

在 64 位系统上,禁用文件系统重定向(参见 IntallScriptWOW64FSREDIRECTION或 Windows 的Wow64DisableWow64FsRedirection)如果您碰巧有 System32 文件夹的路径,它将访问 64 位文件。

Regasm 不在此位置;相反,32 位版本在Windows\Microsoft.NET\Framework\<version>,64 位版本在Windows\Microsoft.NET\Framework64\<version>. 这里没有奇怪的文件夹名称,但它不是系统文件夹。

注意:注册文件需要正确的位数和正确的应用程序。此外,如果您正在创建 Windows 安装程序包(例如 Basic MSI 项目),则不应在安装时调用此类工具;相反,您应该使用构建时工具,例如用于本机 DLL 的 COM 提取和用于托管程序集的 COM 互操作,以将它们的自注册转换为 MSI 数据:正确标记组件的 64 位设置,而 InstallShield 应该处理其余部分。

于 2014-10-03T12:34:59.177 回答