4

私の NSIS ベースのインストーラーは、特定の .exe ファイルをすべての Windows プラットフォームのターゲット フォルダーに展開します。最近、Windows 8 にインストールする場合、その .exe ファイルのわずかに異なるバージョンを展開する必要があることを発見しました。

2 人のインストーラーは必要ありません。2 つの .exe ファイルを「保持」し、windows8 用の適切なファイルと残りの .exe ファイルを展開する 1 つのインストーラーが必要です。

どうすればそれを達成できますか? インストール時にwindows8を検出し、検出したときに別のバージョンの.exeファイルをコピーしますか?

ありがとう。

4

3 に答える 3

2

LogicLib.nshNSIS で提供されるおよびWinVer.nshスクリプトを組み込むことにより、プラットフォームを非常に正確にテストできます。

これは、アプリケーションをインストールする前にいくつかのサニティチェックを行う場所で使用している関数です。

Function CheckUnsupportedPlatform
    ${if} ${AtLeastWin95}
    ${AndIf} ${AtMostWinME}
        ;NT4 and W95 use the same version number, we can use ${IsNT} if we need precise identification
        MessageBox MB_OK|MB_ICONEXCLAMATION "Sorry, but your version of Windows is unsupported platform.$\n\
Supported platforms are currently 2000 / XP / 2003 / Vista / Seven$\n \
            Cannot continue the installation." /SD IDOK
        abort
    ${elseIf} ${isWin2008}
    ${orIf} ${AtLeastWin2008R2}
        MessageBox MB_OK|MB_ICONINFORMATION "Please note that support for Windows 2008 and Windows 8 is in beta stage.$\n\
Supported platforms are currently 2000 / XP / 2003 / Vista / Seven" /SD IDOK
    ${endif}
FunctionEnd

他にも多くの可能性がありますWinVer.nsh。その他の例については、 のヘッダーを参照してください。

于 2012-10-24T16:46:57.207 に答える
1

nsis で同様の問題が発生し、異なる Windows バージョンが検出されました。Windows API を呼び出して OS のバージョンを調べる 3 行の C++ アプリを作成し、コンソール出力を文字列として記述しました。nsis から、この出力を変数に読み取り、この変数の値に基づいて切り替えることができます。

于 2012-10-24T15:29:31.240 に答える
0

これがかなり古いことは知っていますが、誰かがFileコマンドに問題を抱えている場合に備えて、これは予想される構文です。

!include "WinVer.nsh"
...
; The stuff to install
Section "MyProgram (required)"
    ${If} ${AtMostWin2003}
        File /oname=MyFile.exe "MyFile2003.exe"  
    ${Else}
       File "MyFile.exe"
    ${EndIf} 
SectionEnd
于 2016-04-17T03:20:26.923 に答える