我想给出一个文件(在客户端计算机.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多个客户端部署了一个应用程序,因此想发布一个补丁以解决行政权利问题。

有帮助吗?

解决方案

构建清单文件(请参阅 http://www.gregcons.com/kateblog/addingamanifesttoavistaapplication.aspx 除其他地方)并将其命名为任何n.exe.manifest,然后将其放在与EXE的同一文件夹中。 Nanifest应将请求的ExecutionLevel设置为需求deasteadministrator。可以了,好了。

如果您拥有另一个EXE,则可以在构建清单时嵌入清单。这在Visual Studio 2008及以上几乎是微不足道的。请参阅“应用程序”选项卡并将清单放下。附近有指示。同样,当您使用VS 2008向项目添加清单时,您不必键入所有XML,只需从生成的注释中复制适当的请求的执行级别即可。

其他提示

具有管理特权的执行不是文件许可。

通常通过添加来配置 清单文件 (要么在EXE中的Win32资源,要么作为外部清单)。该清单文件可以说明应用程序是否需要运行高度。

我不确定Windows将“以管理员为管理员”的兼容性设置藏在哪里。

使用清单文件是最好的方法,但是另一种方法是通过设置简单的注册表密钥来编程设置“作为管理员”标志的“作为管理员”标志(在EXE属性的“兼容性”选项卡中找到的选项)。您需要在这些键之一下创建一个字符串值(REG_SZ)(如果您希望设置分别为每个用户或每台计算机):

hkey_current_user software Microsoft Windows NT Currentversion AppCompatflags Layers

或者

HKEY_LOCAL_MACHINE SOFTWORD MICROSOFT WINDOWS NT CurrentVersion AppCompatflags Layers

值的名称必须是通往您的可执行文件的完整路径(如果路径包含空格,请勿用引号包围路径),并且该值的数据必须包含字符串 RUNASADMIN.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top