3

NSISを使用して、Visual C ++2012Expressで実行しているプロジェクトの実行可能ファイルを作成しています。私は初心者なので、HMNISEditのセットアップウィザードから始めました。

Visual C ++ 2012再頒布可能パッケージをプログラムにバンドルしようとしていますが、インストーラーを再実行するたびに、再頒布可能パッケージに[修復]と[削除]オプションが表示され、煩わしいように見えます。

そこで、NSISスクリプトを少し書くことにしました。これが、これまでのスクリプトの始まりです。

Var STR
Section CheckForReg

ClearErrors
ReadRegDWORD $0 HKLM "SOFTWARE\Classes\Installer\Dependencies\{8e70e4e1-06d7-470b-9f74-a51bef21088e}" "Version"

ifErrors 0 Blank
StrCpy $STR "$INSTDIR\vcredist_x86.exe"
GoTo End

Blank:
    StrCpy $STR ""
End:

SectionEnd

この部分はスクリプトの最初に呼び出され、グローバル変数STRが以下に適用されます。

!define MUI_FINISHPAGE_RUN $STR

直後に。

明らかに、これは本当にばかげた方法ですが、私はそれからあまり多くを必要としません。

問題は、CheckForRegが常にレジストリが存在しないと見なし、ラベルBlankに移動しないことです。注意として、私は毎回手動でレジストリをチェックしており、レジストリエントリは次のようになります。

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Dependencies\{8e70e4e1-06d7-470b-9f74-a51bef21088e}]
"Version"="11.0.51106.1"
"DisplayName"="Microsoft Visual C++ 2012 Redistributable (x86) - 11.0.51106"

だから問題は:私はこれでどこが間違っているのですか?とてもシンプルに見えますが、明らかに私には逆行があります。

-コードダンプを削除しました

4

1 に答える 1

6

ReadRegDWORD でのみ DWORD を読み取ることができます。

!include LogicLib.nsh ; So we don't have to use all these labels
StrCpy $STR ""
ReadRegStr $0 HKLM "SOFTWARE\Classes\Installer\Dependencies\{8e70e4e1-06d7-470b-9f74-a51bef21088e}" "Version"
${If} $0 == ""
  StrCpy $STR "$INSTDIR\vcredist_x86.exe"
${EndIf}
于 2013-01-04T03:21:43.327 に答える