在 C# 中设置文件的 UAC 设置
Posted
技术标签:
【中文标题】在 C# 中设置文件的 UAC 设置【英文标题】:setting UAC settings of a file in C# 【发布时间】:2011-02-13 19:08:27 【问题描述】:我想授予文件(已存在于客户端计算机上的 .exe)权限以始终以管理权限执行。
请注意,我要授予权限的文件已经在目标机器上。我想通过另一个用 c# 编写的程序更改该文件的权限,它具有执行所有操作的管理权限。
请告诉我怎么做 我正在使用此代码
System.Security.AccessControl.FileSecurity fs = File.GetAccessControl(@"c:\inam.exe");
FileSystemAccessRule fsar = new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow);
fs.AddAccessRule(fsar);
File.SetAccessControl(@"c:\inam.exe", fs);
此代码将正确更改权限,但当我在执行此代码后执行 inam.exe 时,UAC 未出现,并且 inam.exe 无法执行管理操作。
实际上我已经在超过 10,000 个客户端上部署了一个应用程序,所以想发布一个补丁来解决管理权限问题。
【问题讨论】:
***.com/questions/2313045/… 的可能重复项 不是重复的,但可能包含可能的答案(尤其是在问题中)。 【参考方案1】:以管理权限执行不是文件权限。
这通常通过添加a manifest file 来配置(可以添加到EXE 中的Win32 资源中,或者作为外部清单)。此清单文件可以说明应用程序是否需要运行提升。
我不完全确定 Windows 将“以管理员身份运行此程序”兼容性设置的位置。
【讨论】:
【参考方案2】:构建一个清单文件(请参阅http://www.gregcons.com/KateBlog/AddingAManifestToAVistaApplication.aspx 以及其他地方)并将其命名为whatever.exe.manifest,并将其放在与exe 相同的文件夹中。 nanifest 应该将 requestedExecutionLevel 设置为 requireAdministrator。搞定。
如果您拥有其他 exe,则可以在构建时嵌入清单。这在 Visual Studio 2008 及更高版本中几乎是微不足道的。请参阅应用程序选项卡并下拉清单下拉列表。附近有说明。此外,当您使用 VS 2008 将清单添加到您的项目时,您不必键入所有 XML,您只需从为您生成的 cmets 复制适当的请求执行级别。
【讨论】:
【参考方案3】:使用清单文件是最好的方法,但另一种方法是以编程方式设置“以管理员身份运行此程序”标志(您可以在 EXE 属性的“兼容性”选项卡中找到的选项)注册表项。您需要在这些键之一下创建一个字符串值 (REG_SZ)(如果您希望设置分别针对每个用户或每台机器):
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
或
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
值的名称需要是您的可执行文件的完整路径(如果路径包含空格,请不要用引号将路径括起来),并且值的数据必须包含字符串RUNASADMIN
。
【讨论】:
以上是关于在 C# 中设置文件的 UAC 设置的主要内容,如果未能解决你的问题,请参考以下文章
(C#)在Web.config中设置Session的超时时间没有反应,请教!有点急,先谢谢了!