私は32ビットから64ビットまでのWindowsプログラムを移植しています。NSISを使用して記述された32ビットインストーラーがあります。32ビットNSISインストーラーを使用して新しい64ビットexeの1つを起動できますか?NSISの64ビットバージョンはないと思います...
5 に答える
確かに、NSISは制限を課していません。また、NSISの本当に便利な点は、アプリの32ビットバージョンと64ビットバージョンの両方がある場合、組み合わせたインストーラーを実行し、アーキテクチャごとに必要なファイルをインストールできることです。例えば
!include "x64.nsh"
${If} ${RunningX64}
File ..\x64\blah.exe
${Else}
File ..\x86\blah.exe
${EndIf}
NSISは2つのWin32APIを使用してプロセスShellExecute
(thru ExecShell
)とCreateProcess
(thru Exec
and ExecWait
)を実行します。どちらも、NSIS 32ビットプロセスから64ビットプロセス(x64)を実行できます(64ビットOSで実行している場合)。
64ビット操作が必要なプロセスを実行する場合、デフォルトのNSIS実行が64ビットモードで自動的に実行されないことがわかりました。DISMを実行して.NETFramework3.5をインストールしようとしたときに、これが発生しました。DISMは次のようにエラーを出します。
「実行中の64ビットオペレーティングシステムを32ビットバージョンのDISMで処理することはできません。」
DisableX64FSRedirection
解決するには、64ビット操作が必要な呼び出しの前に追加する必要があります。たとえば、以下を参照してください。
${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}
より説明的なものを追加するだけです
ご覧ください、 http://www.autoitscript.com/forum/index.php?showtopic = 44048
ここにはいくつかの制限があります。たとえば、odbcconf.exeを実行してドライバをインストールしてみてください。私はそれを64ビットエントリとして取り込む方法を見つけることができませんでした。同じように、(64ビットシステムで)管理者として「powershellx86」を起動し、そこからcmdとodbcconfを実行します。これを回避する簡単な方法はありません。odbcconfにx64を実行させます。