[Update] installer : 既にインストール済みの場合、ファイルを削除して置き換えるように修正

This commit is contained in:
misyaguziya
2023-10-27 17:14:52 +09:00
parent 7fe43cc882
commit 958cd45b0c
2 changed files with 92 additions and 52 deletions

View File

@@ -1,41 +1,60 @@
# Modern UI !define PRODUCT_VERSION "1.0.0.0"
!define VERSION "1.0.0.0"
VIProductVersion "${PRODUCT_VERSION}"
VIFileVersion "${VERSION}"
VIAddVersionKey "FileVersion" "${VERSION}"
VIAddVersionKey "ProductName" "VRCT"
VIAddVersionKey "ProductVersion" "${PRODUCT_VERSION}"
VIAddVersionKey "LegalCopyright" "Copyright m's software"
VIAddVersionKey "FileDescription" "Communication tool with translation & transcription for VRChat"
; Modern UI
!include MUI2.nsh !include MUI2.nsh
# nsDialogs ; nsDialogs
!include nsDialogs.nsh !include nsDialogs.nsh
# LogicLib ; LogicLib
!include LogicLib.nsh !include LogicLib.nsh
; FileFunc
!include FileFunc.nsh
!define MUI_ICON "..\img\vrct_logo_mark_black.ico"
!define MUI_UNICON "..\img\vrct_logo_mark_black.ico"
Unicode true Unicode true
# アプリケーション名 ; アプリケーション名
Name "VRCT Setup" Name "VRCT Setup"
# 作成されるインストーラ ; 作成されるインストーラ
OutFile "VRCT_Setup.exe" OutFile "VRCT_Setup.exe"
RequestExecutionLevel admin RequestExecutionLevel admin
ShowInstDetails show ShowInstDetails show
# 圧縮メソッド ; 圧縮メソッド
SetCompressor lzma SetCompressor lzma
# インストールされるディレクトリ ; インストールされるディレクトリ
InstallDir "$PROGRAMFILES\VRCT" InstallDir "$PROGRAMFILES\VRCT"
# XPマニフェスト ; XPマニフェスト
XPStyle on XPStyle on
# ページ ; ページ
!insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "..\LICENSE"
!insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_DIRECTORY
Page custom OptionPage OptionPageLeave Page custom OptionPage OptionPageLeave
!insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH !insertmacro MUI_PAGE_FINISH
# アンインストーラ ページ ; アンインストーラ ページ
!insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH !insertmacro MUI_UNPAGE_FINISH
# 日本語UI ; 日本語UI
!insertmacro MUI_LANGUAGE "Japanese" !insertmacro MUI_LANGUAGE "Japanese"
# インターフェース 設定 ; 引数取得マクロ
!insertmacro GetParameters
!insertmacro GetOptions
; インターフェース 設定
!define MUI_ABORTWARNING !define MUI_ABORTWARNING
# 変数 ; 変数
Var Checkbox_InstallDocs Var Checkbox_InstallDocs
Var Checkbox_InstallShortcut Var Checkbox_InstallShortcut
Var Dialog_Options Var Dialog_Options
@@ -43,28 +62,28 @@ Var InstallDocs
Var InstallShortcut Var InstallShortcut
Var Label_DescriptionOptions Var Label_DescriptionOptions
# 初期化時コールバック ; 初期化時コールバック
Function .onInit Function .onInit
# オプション値を初期化します。 ; オプション値を初期化します。
StrCpy $InstallDocs ${BST_CHECKED} StrCpy $InstallDocs ${BST_CHECKED}
StrCpy $InstallShortcut ${BST_CHECKED} StrCpy $InstallShortcut ${BST_CHECKED}
FunctionEnd FunctionEnd
# オプション ページ ; オプション ページ
Function OptionPage Function OptionPage
# nsDialogsを作成します。 ; nsDialogsを作成します。
nsDialogs::Create 1018 nsDialogs::Create 1018
# 作成されたnsDialogsを変数に代入します。 ; 作成されたnsDialogsを変数に代入します。
Pop $Dialog_Options Pop $Dialog_Options
${If} $Dialog_Options == error ${If} $Dialog_Options == error
# ダイアログの作成に失敗した場合には終了します。 ; ダイアログの作成に失敗した場合には終了します。
Abort Abort
${EndIf} ${EndIf}
# ラベルを作成します。 ; ラベルを作成します。
${NSD_CreateLabel} 0 0 100% 12u "オプションを選択してください。" ${NSD_CreateLabel} 0 0 100% 12u "オプションを選択してください。"
# ラベルを変数に代入します。 ; ラベルを変数に代入します。
Pop $Label_DescriptionOptions Pop $Label_DescriptionOptions
${NSD_CreateCheckbox} 0 13u 100% 12u "ドキュメントをインストールする(&D)" ${NSD_CreateCheckbox} 0 13u 100% 12u "ドキュメントをインストールする(&D)"
@@ -74,54 +93,91 @@ Function OptionPage
Pop $Checkbox_InstallShortcut Pop $Checkbox_InstallShortcut
${If} $InstallDocs == ${BST_CHECKED} ${If} $InstallDocs == ${BST_CHECKED}
# チェックが入力済の場合、チェックボックスにチェックを入れます。 ; チェックが入力済の場合、チェックボックスにチェックを入れます。
${NSD_Check} $Checkbox_InstallDocs ${NSD_Check} $Checkbox_InstallDocs
${EndIf} ${EndIf}
${If} $InstallShortcut == ${BST_CHECKED} ${If} $InstallShortcut == ${BST_CHECKED}
# チェックが入力済の場合、チェックボックスにチェックを入れます。 ; チェックが入力済の場合、チェックボックスにチェックを入れます。
${NSD_Check} $Checkbox_InstallShortcut ${NSD_Check} $Checkbox_InstallShortcut
${EndIf} ${EndIf}
nsDialogs::Show nsDialogs::Show
FunctionEnd FunctionEnd
# オプション ページ退出コールバック ; オプション ページ退出コールバック
Function OptionPageLeave Function OptionPageLeave
${NSD_GetState} $Checkbox_InstallDocs $InstallDocs ${NSD_GetState} $Checkbox_InstallDocs $InstallDocs
${NSD_GetState} $Checkbox_InstallShortcut $InstallShortcut ${NSD_GetState} $Checkbox_InstallShortcut $InstallShortcut
FunctionEnd FunctionEnd
# デフォルト セクション ; デフォルト セクション
Section Section
# 出力先を指定します。 ; If VRCT is already running, display a warning message and exit
StrCpy $1 "VRCT.exe"
nsProcess::_FindProcess "$1"
Pop $R1
${If} $R1 = 0
nsExec::ExecToStack "taskkill /IM VRCT.exe"
${EndIf}
; ディレクトリを削除
RMDir /r "$INSTDIR"
; スタート メニューから削除
Delete "$SMPROGRAMS\VRCT\VRCT.lnk"
RMDir "$SMPROGRAMS\VRCT"
; デスクトップ ショートカットを削除
Delete "$DESKTOP\VRCT.lnk"
; レジストリ キーを削除
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\VRCT"
; 出力先を指定します。
SetOutPath "$INSTDIR" SetOutPath "$INSTDIR"
# インストールされるファイル ; インストールされるファイル
File /r "..\dist\VRCT\" File /r "..\dist\VRCT\"
${If} $InstallDocs == ${BST_CHECKED} ${If} $InstallDocs == ${BST_CHECKED}
# ドキュメントをインストールする場合 ; ドキュメントをインストールする場合
# 出力先を指定します。 ; 出力先を指定します。
SetOutPath "$INSTDIR\docs" SetOutPath "$INSTDIR\docs"
# インストールされるファイル ; インストールされるファイル
File "..\dist\README.txt" File "..\dist\README.txt"
${EndIf} ${EndIf}
# アンインストーラを出力 ; アンインストーラを出力
WriteUninstaller "$INSTDIR\Uninstall.exe" WriteUninstaller "$INSTDIR\Uninstall.exe"
${If} $InstallDocs == ${BST_CHECKED} ${If} $InstallDocs == ${BST_CHECKED}
# デスクトップにショートカットを作成 ; デスクトップにショートカットを作成
CreateShortCut "$DESKTOP\VRCT.lnk" "$INSTDIR\VRCT.exe" CreateShortCut "$DESKTOP\VRCT.lnk" "$INSTDIR\VRCT.exe"
${EndIf} ${EndIf}
# スタート メニューにショートカットを登録 ; スタート メニューにショートカットを登録
CreateDirectory "$SMPROGRAMS\VRCT" CreateDirectory "$SMPROGRAMS\VRCT"
SetOutPath "$INSTDIR" SetOutPath "$INSTDIR"
CreateShortcut "$SMPROGRAMS\VRCT\VRCT.lnk" "$INSTDIR\VRCT.exe" "" CreateShortcut "$SMPROGRAMS\VRCT\VRCT.lnk" "$INSTDIR\VRCT.exe" ""
# レジストリに登録 ; レジストリに登録
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\VRCT" "DisplayName" "VRCT" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\VRCT" "DisplayName" "VRCT"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\VRCT" "UninstallString" '"$INSTDIR\Uninstall.exe"' WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\VRCT" "UninstallString" '"$INSTDIR\Uninstall.exe"'
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\VRCT" "DisplayIcon" '"$INSTDIR\_internal\img\vrct_logo_mark_black.ico"' WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\VRCT" "DisplayIcon" '"$INSTDIR\_internal\img\vrct_logo_mark_black.ico"'
SectionEnd SectionEnd
# アンインストーラ ; アンインストーラ
!include Uninstall.nsi Section Uninstall
; If VRCT is already running, display a warning message and exit
StrCpy $1 "VRCT.exe"
nsProcess::_FindProcess "$1"
Pop $R1
${If} $R1 = 0
MessageBox MB_OK|MB_ICONEXCLAMATION "VRCT is still running. Cannot uninstall this software.$\nPlease close VRCT and try again." /SD IDOK
Abort
${EndIf}
; ディレクトリを削除
RMDir /r "$INSTDIR"
RMDir /r "$LOCALAPPDATA\VRCT"
; スタート メニューから削除
Delete "$SMPROGRAMS\VRCT\VRCT.lnk"
RMDir "$SMPROGRAMS\VRCT"
; デスクトップ ショートカットを削除
Delete "$DESKTOP\VRCT.lnk"
; レジストリ キーを削除
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\VRCT"
SectionEnd

View File

@@ -1,16 +0,0 @@
# アンインストーラ
Section "Uninstall"
# アンインストーラを削除
# Delete "$INSTDIR\Uninstall.exe"
# ファイルを削除
# Delete "$INSTDIR\VRCT.exe"
# ディレクトリを削除
RMDir /r "$INSTDIR"
# スタート メニューから削除
Delete "$SMPROGRAMS\VRCT\VRCT.lnk"
RMDir "$SMPROGRAMS\VRCT"
# デスクトップ ショートカットを削除
Delete "$DESKTOP\VRCT.lnk"
# レジストリ キーを削除
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\VRCT"
SectionEnd