2015-02-23 82 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"与您的工作目录相关,在启动时可能会有所不同。添加一个硬编码路径来测试这个假设。