问题:
我需要检查用户(本地用户或域用户,哪一个是可能的)是否具有对文件的写入权限(如果您好奇,%windir%\system32\inetsrv\config\applicationHost.config
。此文件受Windows保护,您需要成为管理员写信给它。)
我的解决方案: 一般结构是:
using (Impersonator impersonator = new Impersonator(domain, username, password))
{
try
{
using (FileStream fs = File.OpenWrite(appHostConfigPath))
{
return true;
}
catch
{
return false;
}
}
您可以想象,Impersonator类是一个IDisposible,它使用本机互操作来调用LogonUser。没有什么太有创意,而且有效。
我被困的地方
在启用了UAC的Windows操作系统上,即使 username 指定的用户是管理员,此函数也始终返回false
。即使我的程序作为管理员运行升级,我怀疑正在发生的是模拟代码作为有限管理员运行。因此,该方法返回false。
我没有任何创造性的解决方案。有人可以帮忙吗?
答案 0 :(得分:0)
你能看一下这个例外吗?它是否具有权限或“文件未找到异常”? 因为在Windows 7上它位于
%WINDIR%\ System32下\ INETSRV \设置\的applicationHost.config
也可能与Windows Vista相同。
答案 1 :(得分:0)
GetFileSecurity和GetEffectiveRightsFromAcl怎么样?
第二个链接有一个实际上非常完整的例子(在C ++中)。