2014-10-02 29 views
1

我建立了我的项目为64位(不是任何CPU),但特别是64位。 所有的DLL都是64位;其中大多数是托管代码(C#),并且一些文件是非托管的(C++代码)。Framework/Framework64和System32/Syswow64

我在Installshield中创建一个安装程序,我需要注册dll的。我在网上阅读过这么多,我感到困惑。

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

Syswow64 regsvr32应该可以工作。您可能必须以管理员身份运行。我通常使用VS Developer命令提示符。 [here](http://stackoverflow.com/questions/1163503/what-is-difference-bw-regasm-exe-and-regsvr32-how-to-generate-a-tlb-file-usi)是一个链接regsvr32和regasm之间的差异 – alykins 2014-10-02 20:05:44

+0

但我在一个链接中看到Syswow64是注册32位dll的。命名约定混乱了。 – 2014-10-02 20:50:32

+0

你试过了吗? – alykins 2014-10-03 12:25:19

回答

3

在64位的系统,如由64位应用程序看到:

  • System32下:包含64位的系统文件
  • SYSWOW64:包含32个位系统文件

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

  • System32下:典型地重新定向到SYSWOW64,所以访问32位系统文件
  • SysNative:重定向到真实System32下;访问64位文件

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

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

注意: 注册文件需要正确的位数和正确的应用程序。此外,如果你正在创建一个Windows安装程序包(例如一个基本的MSI项目),你不应该在安装时调用这样的工具;你应该使用像COM提取这样的构建时工具来处理本地的DLL,而使用COM Interop来处理被管程序集来将它们的自注册转化为MSI数据:正确地标记组件的64位设置,并且InstallShield应该处理其余的部分。

+0

+1恒星答案 – alykins 2014-10-03 12:59:08