# 設定檔位置說明 ## 問題背景 報到系統客戶端安裝在 `Program Files` 資料夾時,由於 Windows 安全限制,應用程式在執行期間無法修改 `Program Files` 目錄下的檔案(包括 `App.config`)。 ## 解決方案 設定檔已改為存儲在用戶的 **AppData** 資料夾中,具有完整的寫入權限。 ## 設定檔位置 ### 用戶設定檔(可寫入) ``` %LOCALAPPDATA%\報到系統客戶端\AppSettings.config ``` 展開後的實際路徑示例: ``` C:\Users\[用戶名]\AppData\Local\報到系統客戶端\AppSettings.config ``` ### 預設設定檔(唯讀) ``` [應用程式安裝目錄]\報到系統客戶端.exe.config ``` ## 如何運作 1. **首次運行** - 應用程式檢查用戶 AppData 資料夾中是否存在 `AppSettings.config` - 如果不存在,系統會自動建立並初始化預設設定 2. **讀取設定** - 優先從用戶 AppData 資料夾中的 `AppSettings.config` 讀取 - 如果失敗,回退到 `App.config` 中的預設值 3. **寫入設定** - 所有設定變更都會保存到用戶 AppData 資料夾中的 `AppSettings.config` - 不會修改 `Program Files` 下的原始檔案 ## 優勢 ✓ 解決 Program Files 權限問題 ✓ 使用標準的 Windows AppData 位置 ✓ 每個用戶可擁有獨立的設定 ✓ 支持應用程式自動更新 ✓ 卸載應用程式時設定保留(用戶可選擇刪除) ## API 基礎 URL 更新 使用 `ConfigService.SetApiBaseUrl()` 方法更新 API 基礎 URL 時,變更會自動保存到用戶的設定檔: ```csharp // 設定新的 API 基礎 URL bool success = ConfigService.Instance.SetApiBaseUrl("http://new-api-server:8080"); // 讀取目前的 API 基礎 URL string currentUrl = ConfigService.Instance.GetApiBaseUrl(); ``` ## 安裝程式更新 在安裝自訂動作中(`ConfigInstaller.cs`),如有必要可以: - 在首次安裝時預先初始化用戶設定檔 - 或保持現有邏輯,讓應用程式在首次運行時自動初始化 當前實現選擇由應用程式在首次運行時自動初始化,無需修改安裝程式邏輯。