diff --git a/config.py b/config.py index afd25f43..cf2c91bf 100644 --- a/config.py +++ b/config.py @@ -1,6 +1,8 @@ import sys import inspect from os import path as os_path +from os import getenv as os_getenv +from os import makedirs as os_makedirs from json import load as json_load from json import dump as json_dump import tkinter as tk @@ -39,10 +41,18 @@ class Config: def VERSION(self): return self._VERSION + @property + def LOCAL_PATH(self): + return self._LOCAL_PATH + @property def PATH_CONFIG(self): return self._PATH_CONFIG + @property + def PATH_LOGS(self): + return self._PATH_LOGS + @property def GITHUB_URL(self): return self._GITHUB_URL @@ -520,7 +530,10 @@ class Config: def init_config(self): # Read Only self._VERSION = "2.0.0" - self._PATH_CONFIG = os_path.join(os_path.dirname(sys.argv[0]), "config.json") + self._LOCAL_PATH = os_path.join(os_getenv('LOCALAPPDATA'), "VRCT") + self._PATH_CONFIG = os_path.join(self._LOCAL_PATH, "config.json") + self._PATH_LOGS = os_path.join(self._LOCAL_PATH, "logs") + os_makedirs(self._LOCAL_PATH, exist_ok=True) self._GITHUB_URL = "https://api.github.com/repos/misyaguziya/VRCT/releases/latest" self._BOOTH_URL = "https://misyaguziya.booth.pm/" self._DOCUMENTS_URL = "https://mzsoftware.notion.site/VRCT-Documents-be79b7a165f64442ad8f326d86c22246" diff --git a/installer/Install.nsi b/installer/Install.nsi new file mode 100644 index 00000000..f32b7b0f --- /dev/null +++ b/installer/Install.nsi @@ -0,0 +1,108 @@ +# Modern UI +!include MUI2.nsh +# nsDialogs +!include nsDialogs.nsh +# LogicLib +!include LogicLib.nsh + +# アプリケーション名 +Name "VRCT Setup" +# 作成されるインストーラ +OutFile "VRCT_Setup.exe" + +RequestExecutionLevel admin +ShowInstDetails show + +# 圧縮メソッド +SetCompressor lzma +# インストールされるディレクトリ +InstallDir "$PROGRAMFILES\VRCT" +# XPマニフェスト +XPStyle on +# ページ +!insertmacro MUI_PAGE_WELCOME +!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 +!insertmacro MUI_LANGUAGE "Japanese" +# インターフェース 設定 +!define MUI_ABORTWARNING +# 変数 +Var Checkbox_InstallDocs +Var Dialog_Options +Var InstallDocs +Var Label_DescriptionOptions + +# 初期化時コールバック +Function .onInit + # オプション値を初期化します。 + StrCpy $InstallDocs ${BST_CHECKED} +FunctionEnd + +# オプション ページ +Function OptionPage + # nsDialogsを作成します。 + nsDialogs::Create 1018 + # 作成された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)" + Pop $Checkbox_InstallDocs + + ${If} $InstallDocs == ${BST_CHECKED} + # チェックが入力済の場合、チェックボックスにチェックを入れます。 + ${NSD_Check} $Checkbox_InstallDocs + ${EndIf} + nsDialogs::Show +FunctionEnd + +# オプション ページ退出コールバック +Function OptionPageLeave + ${NSD_GetState} $Checkbox_InstallDocs $InstallDocs +FunctionEnd + +# デフォルト セクション +Section + # 出力先を指定します。 + SetOutPath "$INSTDIR" + # インストールされるファイル + File "..\dist\VRCT.exe" + + ${If} $InstallDocs == ${BST_CHECKED} + # ドキュメントをインストールする場合 + # 出力先を指定します。 + SetOutPath "$INSTDIR\docs" + # インストールされるファイル + File "..\dist\README.txt" + ${EndIf} + + # アンインストーラを出力 + WriteUninstaller "$INSTDIR\Uninstall.exe" + # スタート メニューにショートカットを登録 + 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"' +SectionEnd + +# アンインストーラ +!include Uninstall.nsi diff --git a/installer/Uninstall.nsi b/installer/Uninstall.nsi new file mode 100644 index 00000000..4187f6c5 --- /dev/null +++ b/installer/Uninstall.nsi @@ -0,0 +1,14 @@ +# 繧「繝ウ繧、繝ウ繧ケ繝医シ繝ゥ +Section "Uninstall" + # 繧「繝ウ繧、繝ウ繧ケ繝医シ繝ゥ繧貞炎髯、 + Delete "$INSTDIR\Uninstall.exe" + # 繝輔ぃ繧、繝ォ繧貞炎髯、 + Delete "$INSTDIR\VRCT.exe" + # 繝繧」繝ャ繧ッ繝医Μ繧貞炎髯、 + RMDir /r "$INSTDIR" + # 繧ケ繧ソ繝シ繝 繝。繝九Η繝シ縺九i蜑企勁 + Delete "$SMPROGRAMS\VRCT\VRCT.lnk" + RMDir "$SMPROGRAMS\VRCT" + # 繝ャ繧ク繧ケ繝医Μ 繧ュ繝シ繧貞炎髯、 + DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\VRCT" +SectionEnd \ No newline at end of file diff --git a/model.py b/model.py index 51a881dd..1be1ce9f 100644 --- a/model.py +++ b/model.py @@ -91,10 +91,10 @@ class Model: return result def startLogger(self): - os_makedirs(os_path.join(os_path.dirname(sys.argv[0]), "logs"), exist_ok=True) + os_makedirs(config.PATH_LOGS, exist_ok=True) logger = getLogger() logger.setLevel(INFO) - file_name = os_path.join(os_path.dirname(sys.argv[0]), "logs", f"{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.log") + file_name = os_path.join(config.PATH_LOGS, f"{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.log") file_handler = FileHandler(file_name, encoding="utf-8", delay=True) formatter = Formatter("[%(asctime)s] %(message)s") file_handler.setFormatter(formatter)