67 lines
2.1 KiB
Markdown
67 lines
2.1 KiB
Markdown
# 設定檔位置說明
|
|
|
|
## 問題背景
|
|
報到系統客戶端安裝在 `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`),如有必要可以:
|
|
- 在首次安裝時預先初始化用戶設定檔
|
|
- 或保持現有邏輯,讓應用程式在首次運行時自動初始化
|
|
|
|
當前實現選擇由應用程式在首次運行時自動初始化,無需修改安裝程式邏輯。
|