7

我有一个不需要 UAC 警告的文件。我使用 C#.NET 将文件复制到另一个位置

 File.Copy("Original.exe", "Copy.exe");

现在我看到 Copy.exe 需要 UAC 警告才能在 Windows 7/Vista 下运行。

我如何在 Original.exe 和 Copy.exe 之间进行比较,以准确查看文件发生了什么并手动更改它,使其不再需要 UAC。我可以使用哪个工具来实现这一目标?

在此处输入图像描述

两个可执行文件是同一个文件:如何知道这两个文件之间的区别?

4

3 回答 3

6

WindowsInstaller Detection Technology是这种行为的原因。有一组条件强制可执行文件被视为需要管理员权限:

  1. 32 位可执行文件
  2. 没有请求执行级别的应用程序
  3. 在启用 LUA 的情况下作为标准用户运行的交互式进程

在创建 32 位进程之前,会检查以下属性以确定它是否是安装程序:

  • 文件名包括“安装”、“设置”、“更新”等关键字。
  • 以下版本控制资源字段中的关键字:供应商、公司名称、产品名称、文件描述、原始文件名、内部名称和导出名称。
  • 嵌入在可执行文件中的并排清单中的关键字。
  • 可执行文件中链接的特定 StringTable 条目中的关键字。
  • 可执行文件中链接的 RC 数据中的关键属性。
  • 可执行文件中的目标字节序列。

相关 MSDN 文章:http ://technet.microsoft.com/en-us/library/cc709628%28WS.10%29.aspx

可能的解决方案:

  • 如果您是可执行文件的作者,请包含指定的清单requestedExecutionLevel
  • 如果您无权访问源代码 - 尝试使用适当的实用程序(mt例如,或者一些通用资源编辑器)添加或修改清单
  • 避免关键字updateinstallsetup在可执行文件名中
于 2012-07-16T08:21:48.643 回答
1

复制文件后,尝试像这样设置文件的 acl:

var file = new FileInfo("copy.exe")
 var fileSecurity = file.GetAccessControl();
 fileSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null),
                                                                FileSystemRights.FullControl,
                                                                AccessControlType.Allow));
 file.SetAccessControl(fileSecurity);
于 2012-07-16T07:32:52.037 回答
0

您可能会发现问题出在位置而不是文件上。Win 7 非常挑剔,特别是如果您尝试更改 Program Files 下的任何内容。

您是否尝试将原始文件放在新位置以检查是否还需要 UAC 批准?

于 2012-07-15T22:32:21.857 回答