【发布时间】:2009-07-02 08:07:46
【问题描述】:
当 UAC 开启但没有以管理员身份运行时,如何在 C++ 中创建文件?
我正在尝试在以下路径中创建一个文本文件:当 Vista 的 UAC 开启时,VC++ 6.0 中的“C:\Programdata\Desktop”。但是,Createfile(...) 因“权限被拒绝”而失败。
当我使用“以管理员身份运行”运行示例应用程序时,它可以工作。但我的示例应用程序不应“以管理员身份运行”。
当 UAC 开启时,是否有任何 API 可以授予上述路径的权限?
示例代码: 常量 nSize = 100; CStdioFile 文件; CFileException obFileExp; CString csFilePath(_T("C:\ProgramData\Desktop\sample.txt"));
if (!file.Open( csFilePath , CFile::modeCreate | CFile::modeWrite ,&obFileExp ) )
{
// opening of file failed
TCHAR szErr[nSize];
obFileExp.GetErrorMessage(szErr,nSize);
AfxMessageBox(szErr);
return ;
}
file.WriteString( "welcome" );
file.Close( );
注意:UAC 应该开启,VC++ 6.0 不应该以管理员身份运行
【问题讨论】:
-
我强烈怀疑是路径问题。桌面不是用户配置文件的一部分吗?您应该在代码中获取该文件夹的路径,而不是通过硬编码作为假定路径。
-
Vista 桌面文件夹位于 c:\Users\USERNAME\ 而不是 ib ProgramData。如果您尝试创建一个名为 Desktop 的文件夹然后写入您的文件,则情况不同。
-
在 Visata 中,示例路径:“C:\ProgramData\Desktop\sample.txt”表示“C:\Users\Public\Desktop\sample.txt”
标签: c++ windows windows-vista uac