私はちょうどNSISを使い始めました。
非常にうまく動作しますが、ドキュメントが少し構造化されていません。 NSISで新しいバージョンをインストールする前に、以前のバージョンをアンインストールするようにユーザーに要求するにはどうすればよいですか?NSISで以前のバージョンをアンインストールする方法を教えてください
NSIS(Nullsoft Scriptable Install System)は、Windowsインストーラを作成するためのオープンソースシステムです。
私はちょうどNSISを使い始めました。
非常にうまく動作しますが、ドキュメントが少し構造化されていません。 NSISで新しいバージョンをインストールする前に、以前のバージョンをアンインストールするようにユーザーに要求するにはどうすればよいですか?NSISで以前のバージョンをアンインストールする方法を教えてください
NSIS(Nullsoft Scriptable Install System)は、Windowsインストーラを作成するためのオープンソースシステムです。
NSISは素晴らしいWindowsインストーラです。 NSISを使用して同じアプリケーションの新しいバージョンをインストールする際に、現在のバージョンをアンインストールする方法は次のとおりです。 NSISスクリプトに次の関数を追加します。
Function .onInit
Exec $INSTDIR\uninst.exe
FunctionEnd
また、あなたは、「自動アンインストール古い新しいをインストールする前に、」上のNSISウィキにthisリンクをチェックアウトすることができます。
もう1つの方法は、UninstallPrevious
隠しセクションを作成し、インストーラの他のすべてのセクションの前に実行させることです。また、アンインストーラをサイレントモードで実行することをお勧めします。
; The "" makes the section hidden.
Section "" SecUninstallPrevious
Call UninstallPrevious
SectionEnd
Function UninstallPrevious
; Check for uninstaller.
ReadRegStr $R0 HKLM "${HKLM_REG_KEY}" "InstallDir"
${If} $R0 == ""
Goto Done
${EndIf}
DetailPrint "Removing previous installation."
; Run the uninstaller silently.
ExecWait '"$R0\Uninstall.exe /S"'
Done:
FunctionEnd
このアプローチの利点は、新しいバージョンをインストールする準備が整うまで、古いバージョンをアンインストールしないことです。さらに、古いバージョンをアンインストールすることを決断する必要もなく、魔法のように消えてしまいます。
もちろん、必要に応じて、ユーザーがアンインストールを確認したい場合は、spinner_denの方法を使用してください。
インストール中に書き込まれるUninstallString
またはレジストリキーを再利用して、後でアンインストーラコマンドを決定します。
カップルが一番上に定義されています。既にアプリでこれをインストールした場合に存在するであろうあなたの.onInit
グラブで、その後
WriteRegStr HKLM "${PROJECT_REG_UNINSTALL_KEY}" "UninstallString" '"$INSTDIR\${PROJECT_UNINSTALL_EXE}" _?=$INSTDIR'
WriteRegStr HKLM "${PROJECT_REG_UNINSTALL_KEY}" "QuietUninstallString" '"$INSTDIR\${PROJECT_UNINSTALL_EXE}" /S _?=$INSTDIR'
とレジストリキーの値を(:インストーラSection
で
!define PROJECT_REG_UNINSTALL_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROJECT_NAME}"
!define PROJECT_UNINSTALL_EXE "uninstall.exe"
${If} ${Silent}
ReadRegStr $R0 HKLM "${PROJECT_REG_UNINSTALL_KEY}" "QuietUninstallString"
${Else}
ReadRegStr $R0 HKLM "${PROJECT_REG_UNINSTALL_KEY}" "UninstallString"
${EndIf}
ExecWait "$R0"
+1のリンク –
$ INSTDIRは使用しないでください。あなたが正しいものであることを確認するために、あなたがレジストリから読んだ値を使用してください。 – utapyngo