如何比较两个可执行文件?

Raf*_*ari 7 .net c# visual-studio-2010

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

 File.Copy("Original.exe", "Copy.exe");
Run Code Online (Sandbox Code Playgroud)

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

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

在此输入图像描述

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

max*_*max 6

Windows Installer Detection Technology就是这种行为的原因.有一组条件迫使可执行文件被视为需要管理员权限:

  1. 32位可执行文件
  2. 没有requestedExecutionLevel的应用程序
  3. 作为标准用户运行的交互式进程启用了LUA

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

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

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

可能的解决方案:

  • 如果您是可执行文件的作者,请包含指定的清单 requestedExecutionLevel
  • 如果您无权访问源代码 - 尝试使用适当的实用程序添加或修改清单(mt例如,或者某些通用资源编辑器)
  • 避免关键字update,install并setup在可执行文件名