[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
# nsDialogs
; nsDialogs
!include nsDialogs.nsh
# LogicLib
; LogicLib
!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
# アプリケーション名
; アプリケーション名
Name "VRCT Setup"
# 作成されるインストーラ
; 作成されるインストーラ
OutFile "VRCT_Setup.exe"
RequestExecutionLevel admin
ShowInstDetails show
# 圧縮メソッド
; 圧縮メソッド
SetCompressor lzma
# インストールされるディレクトリ
; インストールされるディレクトリ
InstallDir "$PROGRAMFILES\VRCT"
# XPマニフェスト
; XPマニフェスト
XPStyle on
# ページ
; ページ
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "..\LICENSE"
!insertmacro MUI_PAGE_DIRECTORY
Page custom OptionPage OptionPageLeave
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
# アンインストーラ ページ
; アンインストーラ ページ
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH
# 日本語UI
; 日本語UI
!insertmacro MUI_LANGUAGE "Japanese"
# インターフェース 設定
; 引数取得マクロ
!insertmacro GetParameters
!insertmacro GetOptions
; インターフェース 設定
!define MUI_ABORTWARNING
# 変数
; 変数
Var Checkbox_InstallDocs
Var Checkbox_InstallShortcut
Var Dialog_Options
@@ -43,28 +62,28 @@ Var InstallDocs
Var InstallShortcut
Var Label_DescriptionOptions
# 初期化時コールバック
; 初期化時コールバック
Function .onInit
# オプション値を初期化します。
; オプション値を初期化します。
StrCpy $InstallDocs ${BST_CHECKED}
StrCpy $InstallShortcut ${BST_CHECKED}
FunctionEnd
# オプション ページ
; オプション ページ
Function OptionPage
# nsDialogsを作成します。
; nsDialogsを作成します。
nsDialogs::Create 1018
# 作成されたnsDialogsを変数に代入します。
; 作成されたnsDialogsを変数に代入します。
Pop $Dialog_Options
${If} $Dialog_Options == error
# ダイアログの作成に失敗した場合には終了します。
; ダイアログの作成に失敗した場合には終了します。
Abort
${EndIf}
# ラベルを作成します。
; ラベルを作成します。
${NSD_CreateLabel} 0 0 100% 12u "オプションを選択してください。"
# ラベルを変数に代入します。
; ラベルを変数に代入します。
Pop $Label_DescriptionOptions
${NSD_CreateCheckbox} 0 13u 100% 12u "ドキュメントをインストールする(&D)"
@@ -74,54 +93,91 @@ Function OptionPage
Pop $Checkbox_InstallShortcut
${If} $InstallDocs == ${BST_CHECKED}
# チェックが入力済の場合、チェックボックスにチェックを入れます。
; チェックが入力済の場合、チェックボックスにチェックを入れます。
${NSD_Check} $Checkbox_InstallDocs
${EndIf}
${If} $InstallShortcut == ${BST_CHECKED}
# チェックが入力済の場合、チェックボックスにチェックを入れます。
; チェックが入力済の場合、チェックボックスにチェックを入れます。
${NSD_Check} $Checkbox_InstallShortcut
${EndIf}
nsDialogs::Show
FunctionEnd
# オプション ページ退出コールバック
; オプション ページ退出コールバック
Function OptionPageLeave
${NSD_GetState} $Checkbox_InstallDocs $InstallDocs
${NSD_GetState} $Checkbox_InstallShortcut $InstallShortcut
FunctionEnd
# デフォルト セクション
; デフォルト セクション
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"
# インストールされるファイル
; インストールされるファイル
File /r "..\dist\VRCT\"
${If} $InstallDocs == ${BST_CHECKED}
# ドキュメントをインストールする場合
# 出力先を指定します。
; ドキュメントをインストールする場合
; 出力先を指定します。
SetOutPath "$INSTDIR\docs"
# インストールされるファイル
; インストールされるファイル
File "..\dist\README.txt"
${EndIf}
# アンインストーラを出力
; アンインストーラを出力
WriteUninstaller "$INSTDIR\Uninstall.exe"
${If} $InstallDocs == ${BST_CHECKED}
# デスクトップにショートカットを作成
; デスクトップにショートカットを作成
CreateShortCut "$DESKTOP\VRCT.lnk" "$INSTDIR\VRCT.exe"
${EndIf}
# スタート メニューにショートカットを登録
; スタート メニューにショートカットを登録
CreateDirectory "$SMPROGRAMS\VRCT"
SetOutPath "$INSTDIR"
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" "UninstallString" '"$INSTDIR\Uninstall.exe"'
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\VRCT" "DisplayIcon" '"$INSTDIR\_internal\img\vrct_logo_mark_black.ico"'
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