我有一个不需要UAC警告的文件。我使用C#.NET将文件复制到另一个位置
File.Copy("Original.exe", "Copy.exe");
现在我看到Copy.exe需要在Windows 7 / Vista下运行UAC警告。
我如何在Original.exe和Copy.exe之间进行比较,以确切了解文件发生了什么并手动更改,以便它不再需要UAC。我可以使用哪种工具来实现这一目标?
可执行的是同一个文件:如何知道这两个文件之间的区别?
答案 0 :(得分:6)
Windows Installer Detection Technology
就是这种行为的原因。有一组条件迫使可执行文件被视为需要管理员权限:
- 32位可执行文件
- 没有requestedExecutionLevel的应用程序
- 以启用LUA的标准用户身份运行的交互式进程
醇>在创建32位进程之前,以下属性是 检查以确定它是否是安装程序:
- 文件名包含"安装,"等关键字。 "设置," "更新,"等
- 以下版本控制资源字段中的关键字:供应商,公司名称,产品名称,文件描述,原始文件名, 内部名称和导出名称。
- 可执行文件中嵌入的并排清单中的关键字。
- 可执行文件中链接的特定StringTable条目中的关键字。
- 可执行文件中链接的RC数据中的关键属性。
- 可执行文件中的目标字节序列。
相关MSDN文章:http://technet.microsoft.com/en-us/library/cc709628%28WS.10%29.aspx
可能的解决方案:
requestedExecutionLevel
mt
或某些通用资源编辑器)update
,install
和setup
答案 1 :(得分: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);
答案 2 :(得分:0)
您可能会发现问题与位置而不是文件有关。 Win 7非常挑剔,特别是如果您尝试在Program Files下更改任何内容。
您是否尝试将原始文件放在新位置以检查是否还需要UAC批准?