MFC 程序需讀寫同目錄下的 Excel 文件。用 Setup Factory 打包安裝到 Program Files 後運行報錯(權限不足),安裝到 C 盤根目錄則正常。
Program Files 受 UAC 保護,標準用戶無寫入權限。CString GetDataPath() {
CString path;
SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL, 0, path.GetBuffer(MAX_PATH));
path.ReleaseBuffer();
path += _T("\\MyApp\\data.xlsx");
return path;
}
// 首次運行從安裝目錄複製模板到此路徑
%LOCALAPPDATA%\MyApp,無需管理員權限。CSIDL_COMMON_APPDATA 或 CSIDL_LOCAL_APPDATA。SHGetKnownFolderPath(FOLDERID_ProgramData) 獲取數據路徑。將數據文件移出 Program Files 是根治之道,符合 Windows 應用開發規範,也能避免安裝包覆蓋提示問題。