1 c++ windows uac windows-vista
如何在UAC打开时使用C++创建文件,但不以管理员身份运行?
我正在尝试在以下路径中创建一个文本文件:当Vista的UAC打开时,VC++ 6.0中的"C:\ Programdata\Desktop".但是,Createfile(...)"拒绝许可"失败了.
当我以"以管理员身份运行"运行示例应用程序时,它可以工作.但我的示例应用程序不应该"以管理员身份运行".
当UAC打开时,是否有任何API可以授予上述路径?
示例代码:const 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( );
Run Code Online (Sandbox Code Playgroud)
注意:UAC应该打开,VC++ 6.0不应该以管理员身份运行
C:\ ProgramData\Desktop是C:\ Users\Public\Desktop的别名 - 这是所有用户共享的桌面,由系统管理员配置.
启用UAC后,访客,Users组成员或Administrators组的非提升成员无法在共享桌面上创建文件或文件夹,而不会破坏Windows的整个安全模型.
这将是,例如,可以使用管理员帐户 - 应用程序设置过程中UAC提升过程中 - 增加一个访问控制列表条目授予用户组的mebers某种创建/写控制在公共\子文件夹或文件桌面.
因此,除非您的"示例程序"试图演示一种从未高速帐户在共享位置写入文件的方法,否则最好不要在用户自己的桌面上创建文件 - c:\ Users\YourUserAccount\Desktop - The您检索的路径当然是使用适当的(SHGetSpecialFolderLocation)API!