如何在VC++;6.0 UAC何时开启? 我在UAC打开时如何在C++中创建文件,但以管理员的身份运行?< /P>
我正在尝试创建一个文本文件,路径如下:“C:\Programdata\Desktop”,在VC++6.0中,当Vista的UAC打开时。但是,如何在VC++;6.0 UAC何时开启? 我在UAC打开时如何在C++中创建文件,但以管理员的身份运行?< /P>,c++,windows,windows-vista,uac,C++,Windows,Windows Vista,Uac,我正在尝试创建一个文本文件,路径如下:“C:\Programdata\Desktop”,在VC++6.0中,当Vista的UAC打开时。但是,Createfile(…)失败,权限被拒绝 当我使用“以管理员身份运行”运行示例应用程序时,它可以正常工作。但我的示例应用程序不应“以管理员身份运行” 当UAC开启时,是否有API授予上述路径权限 示例代码: 常数nSize=100; CStdioFile文件; cfileexceptionobfileexp; CString csFilePath(_T(
Createfile(…)
失败,权限被拒绝
当我使用“以管理员身份运行”运行示例应用程序时,它可以正常工作。但我的示例应用程序不应“以管理员身份运行”
当UAC开启时,是否有API授予上述路径权限
示例代码:
常数nSize=100;
CStdioFile文件;
cfileexceptionobfileexp;
CString csFilePath(_T(“C:\ProgramData\Desktop\sample.txt”)
注意:UAC应该打开,VC++6.0不应该以管理员身份运行如果不允许您在某个地方写东西,您就是不被允许。如果你能以某种方式做到这一点,那将是黑客攻击 话虽如此,我所知道的最后一件事是允许应用程序在vista中写入programdata。这就是它应该做的。存储程序的数据。但我不确定其中是否有桌面文件夹。据我所知,vista中没有这样的标准文件夹
请你详细说明一下你到底想在那个文件夹中保存什么?如果你不允许在某个地方写东西,你就是不被允许。如果你能以某种方式做到这一点,那将是黑客攻击 话虽如此,我所知道的最后一件事是允许应用程序在vista中写入programdata。这就是它应该做的。存储程序的数据。但我不确定其中是否有桌面文件夹。据我所知,vista中没有这样的标准文件夹
请详细说明您要在该文件夹中保存的内容好吗?据我所知,如果UAC打开,您需要写入C:\Program Files”,这是一个受限文件夹,您需要具有管理员权限 没有解决方法。UAC最多可能会虚拟化您的应用程序,从而使您的应用程序认为它正在写入C:\Program文件,但实际上它将写入%UserProfile%中的虚拟文件夹 您可以嵌入一个清单(使用外部清单工具),权限设置为“RequiredMinistrator”,而不是让用户始终右键单击->RunAs。因此,每当执行应用程序时,如果允许提升应用程序或否,则提示用户
如果必须写入programdata,则不需要管理员权限。据我所知,如果UAC打开,则需要写入C:\Program Files”,这是一个受限文件夹,您需要具有管理员权限 没有解决办法。UAC最多可能会虚拟化您的应用程序,从而使您的应用程序认为它正在写入C:\Program文件,但实际上它将写入%UserProfile%中的虚拟文件夹 您可以嵌入特权设置为“RequireAdministrator”的清单(使用外部清单工具),而不是让用户始终执行右键单击->运行方式。因此,每当你的应用程序被执行时,就会有一个提示,提示用户是否允许提升你的应用程序 如果必须写入programdata,则不需要管理员权限。请查看 您可以在exe中嵌入清单,也可以使用单独的清单文件来控制权限。请查看
您可以在exe中嵌入清单,也可以使用单独的清单文件来控制权限。C:\ProgramData\Desktop是C:\Users\Public\Desktop的别名,它是所有用户共享的桌面,由系统管理员配置 启用UAC后,来宾、用户组成员或管理员组的非提升成员无法在共享桌面上创建文件或文件夹,而不会破坏Windows的整个安全模型 例如,在应用程序安装期间的UAC提升期间,可以使用管理员帐户添加访问控制列表条目,授予用户组成员对公用\桌面中的子文件夹或文件的某种创建/写入控制权
因此,除非您的“示例程序”试图演示一种从不相关的帐户在共享位置写入文件的方法,否则您最好在用户自己的桌面上创建文件-c:\users\YourUserAccount\desktop-您检索的路径当然是使用适当的(SHGetSpecialFolderLocation)API C:\ProgramData\Desktop是C:\Users\Public\Desktop的别名,它是所有用户共享的桌面,由系统管理员配置 启用UAC后,来宾、用户组成员或管理员组的非提升成员无法在共享桌面上创建文件或文件夹,而不会破坏Windows的整个安全模型 例如,在应用程序安装期间的UAC提升期间,可以使用管理员帐户添加访问控制列表条目,授予用户组成员对公用\桌面中的子文件夹或文件的某种创建/写入控制权
因此,除非您的“示例程序”试图演示一种从不相关的帐户在共享位置写入文件的方法,否则您最好在用户自己的桌面上创建文件-c:\users\YourUserAccount\desktop-您检索的路径当然是使用适当的(SHGetSpecialFolderLocation)API 我想你这里指的是“程序文件”而不是程序数据。虚拟化是针对“Program files”文件夹进行的,ProgramData不需要管理员权限。我如何使用VC++6.0实现这一点?我想您这里指的是“Program files”而不是ProgramData。虚拟化是为“程序f”而进行的
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( );