2017-08-06 26 views
-1

我最近爲Windows創建了一個C++程序,當它啓動時,它讀取一些存儲用戶配置的文件,如果它是程序第一次運行,它存儲用戶設置的選項並創建這些文件。當我在Visual Studio中調試它時,它按預期工作。在啓動應用程序時讀取文件

所以我開始創建安裝設置,我使用Inno Setup。我的程序需要在啓動時啓動,所以我使用以下代碼,這是來自inno網站http://www.jrsoftware.org/iskb.php?startwithwindows。我的問題是,當程序啓動時,這些文件不會被讀取或創建,但如果關閉程序並使用桌面圖標啓動程序,它會讀取並創建de文件。

所以我的問題是Inno腳本中有什麼東西允許它讀取文件?可能是fstream類的問題?,可能有代碼解決方案

在此先感謝。

我跟着邁克爾的意見,我用漫遊子文件夾APPDATA文件夾,現在該程序讀取配置文件並按預期運行,感謝您的幫助!!。

+0

代碼解決方案?你現在有代碼問題還是你需要一個?提供更多關於你在C++應用中做什麼的細節。 –

+1

您試圖將文件寫入哪個目錄?應用程序在運行時是否具有對文件/目錄的適當權限? –

+1

如果您使用相對路徑,請確保您的當前工​​作目錄是正確的。 –

回答

1

從上面的註釋中可以看出,您將配置文件存儲在與.exe相同的文件夾中,並且您的應用程序能夠在從Visual Studio運行時創建文件,但在安裝到「Program Files( x86)「文件夾或C:/ root。

聽起來好像您正在遇到UAC(用戶訪問控制)權限問題。至少「Program Files(x86)」文件夾,我相信C:/(root)也需要管理員權限才能寫入。 Windows XP和更舊版本的情況並非如此;它與現代版本。您可能以管理員身份運行Visual Studio並且不知道它,並且在安裝時允許管理員權限,但該應用程序因此不能以管理員身份運行,因此無法寫入這些位置。

嘗試以管理員身份運行您的(安裝的)應用程序(右鍵單擊該文件並選擇「以管理員身份運行」)。如果它起作用了,那麼你可以這樣做:如果你希望它能夠將配置文件存儲在與.exe相同的目錄下,則必須以管理員身份運行它,否則(更好的解決方案)將配置文件存儲在正確命名爲%APPDATA%的子目錄,運行應用程序的用戶將始終可以在沒有管理員權限的情況下寫入該子目錄。

+0

可能不是Visual Studio以管理員身份運行,但程序的manifest中設置了requireAdministrator選項,因爲OP說它在從桌面運行時起作用。 IIRC,當程序通過運行鍵或啓動文件夾啓動時,requireAdministrator選項將被忽略。正如你所說,解決方案是不將文件存儲在可執行文件旁邊。根據情況,ProgramData文件夾(也稱爲全局應用程序數據文件夾,又名CommonAppDataFolder)可能比用戶的應用程序數據文件夾更明智 –

相關問題