2014-10-02 32 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