2009-11-09 116 views
5

我正在從32-> 64位移植一個Windows程序。它有一個使用NSIS編寫的32位安裝程序。我可以使用32位NSIS安裝程序啓動我的新的64位exes中的一個嗎?我不認爲這是NSIS的64位版本的...32位NSIS可以啓動64位程序嗎?

回答

11

NSIS使用兩個Win32 API的執行過程ShellExecute(直通ExecShell)和CreateProcess(直通ExecExecWait),他們都可以運行64個進程(x64)從NSIS 32位進程(只要您在64位操作系統上運行)。

+0

噢好吧,我不認爲有可能創建一個32位的64位進程。有什麼特別的我需要做的? – Benj 2009-11-09 12:08:55

+0

@Benj AFAIK,no。 – 2009-11-09 12:28:48

15

當然你可以,NSIS不會強加任何限制,如果你有32位和64位版本的應用程序,你可以做一個組合安裝程序,然後安裝所需的文件架構的基礎。例如

!include "x64.nsh" 

${If} ${RunningX64} 
    File ..\x64\blah.exe 
${Else} 
    File ..\x86\blah.exe 
${EndIf} 
+0

嗨,我知道這是舊的,但我已經試過這個,它似乎仍然安裝32bit.exe,如果我嘗試這種方法。爲什麼哦爲什麼? – 2011-12-18 23:09:17

+0

@DanielCasserly不應該有什麼神奇的 - 這是我仍在使用的代碼。當我第一次構建我的安裝程序時,它從NSIS網站上的示例中抓取 – saschabeaumont 2012-01-09 08:47:27

0

嗯..這裏有一些限制..例如,嘗試運行 odbcconf.exe安裝驅動程序。我一直無法找到一種讓64位入門的方法。 同樣的方式,我認爲,如果你(在64位系統)啓動「PowerShell的86」以管理員身份,然後運行CMD和odbcconf從那裏 - 沒有簡單的方法來解決它,我可以找到,使得odbcconf做64

2

爲了執行需要64位操作的進程,我發現默認的NSIS執行不會自動運行在64位模式下。我在嘗試運行DISM以安裝.NET Framework 3.5時遇到此問題。 DISM將錯誤地指出:

「您無法使用DISM的32位版本的 服務正在運行的64位操作系統。」

解決我添加需要在需要64位操作的調用之前添加DisableX64FSRedirection。看下面的例子:

${If} ${RunningX64} 
    ${DisableX64FSRedirection} 
    DetailPrint "Disabling Windows 64-bit file system redirection" 
${EndIf} 

nsExec::ExecToStack 'Dism.exe /Online /Enable-Feature /FeatureName:NetFx3' 

${If} ${RunningX64} 
    ${EnableX64FSRedirection} 
    DetailPrint "Re-enabling Windows 64-bit file system redirection" 
${EndIf} 
相關問題