2015-02-23 79 views
0

問題:我的C++程序在重新啓動後無法寫入文件,因爲它被拒絕訪問。登錄時由Windows自動啓動時的C++文件權限

程序將被添加到註冊表中的以下位置,從而使其能夠在啓動期間:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 

的代碼內的下列剪斷類似於一個引起該問題:

ofstream myfile; 
myfile.open ("example.txt", ios:app); 
myfile << "Writing this to a file.\n"; 
myfile.close(); 

因爲這段代碼在一個循環內運行,文件被重複打開和關閉,但是當計算機重新啓動時,程序似乎失去了對它的文件許可,而.open表示它獲得了Acess Denied錯誤文件。

這裏有什麼問題?如果程序在沒有管理員權限的情況下啓動時運行得如何,但在Windows啓動時沒有運行該程序?

回答

2

據我所知,問題不在於C++ libs,而在於你的應用程序在Windows上運行它的權限。因此,請嘗試以下操作:

1)爲您的exe文件創建快捷方式;

2)HKEY_CURRENT_USER\...\Run將應用程序名稱從*.exe更改爲*.lnk(僅用於通過快捷方式運行應用程序);

3)在高級安全設置部分的快捷方式屬性中將OWNER更改爲SYSTEM。

也許這有助於。

+0

壞主意。將自己已知的bug代碼作爲「SYSTEM」運行是一種安全風險。 – MSalters 2015-02-23 08:33:31

+0

我同意,從安全的角度來看,這不是一個完美的解決方案,但如果它工作並沒有其他選擇,它可以謹慎使用 – VolAnd 2015-02-23 08:44:16

1

"example.txt"與您的工作目錄相關,在啓動時可能會有所不同。添加一個硬編碼路徑來測試這個假設。