如何在 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 不应以管理员身份运行
最佳答案
C:\ProgramData\Desktop 是 C:\Users\Public\Desktop 的别名 - 这是所有用户共享的桌面,旨在由系统管理员配置。
启用 UAC 后, guest 、用户组成员或管理员组的非提升成员无法在不破坏 Windows 的整个安全模型的情况下在共享桌面上创建文件或文件夹。
例如,可以使用管理员帐户 - 在应用程序设置期间的 UAC 提升期间 - 添加访问控制列表条目,授予用户组成员对子文件夹或文件的某种创建/写入控制权公共(public)\桌面。
因此,除非您的“示例程序”试图演示一种从未提升帐户在共享位置写入文件的方法,否则您最好在用户自己的桌面上创建文件 - c:\Users\YourUserAccount\桌面 - 您检索到的路径当然是使用适当的 (SHGetSpecialFolderLocation) API!
关于c++ - UAC 打开时如何在 VC++ 6.0 中创建文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1073102/