在 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#中设置应用程序设置而不保存[重复]

如何在asp.net c#的web配置文件中设置起始页

(C#)在Web.config中设置Session的超时时间没有反应,请教!有点急,先谢谢了!

C#在不同窗体中设置菜单menuStrip可用或不可用(或者使之变灰)

在 C# 中设置电子邮件附件名称

Windows 图像采集 - 在 C# 中设置设备属性