我正在开发一个非常简单的C#Windows应用程序(它只显示一个消息框,说明" UACtest")我希望它在启动时运行而不会提示UAC。
为此我在HKCU下为它创建了一个注册表项,在我编译它的机器上(使用Visual Studio 2013的Windows 8 64位),它在启动时运行而不会像预期的那样提示UAC。
但是,如果我将可执行文件导出到Windows 7计算机并执行完全相同的操作,则会在启动时显示UAC提示符。
请注意,可执行文件的清单有" asInvoker"在" requestedExecutionLevel"上,整个清单是:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly
此外,当我直接双击可执行文件时,它从不在Windows 7 32位或Windows 8 64位上提示UAC,UAC提示问题仅在启动时。
我还尝试在Windows 7 32位计算机上编译可执行文件(可能会绕过一些兼容性问题)并且发生了一件奇怪的事情,在那台机器中现在UAC在启动时没有按预期提示,但是,当我制作时在另一台机器上进行测试(Windows 7 64位在Virtual Box下)它在启动时提示UAC。
现在这让我很困惑,有人可以告诉我一种编译方式,以便在启动时不会在所有版本的Windows上提示UAC吗?
我在Visual Studio 2013上使用的项目属性是默认属性,但以下情况除外: *目标框架:2.0 *平台目标:x86
所有默认设备上的UAC设置:&#34;仅当应用程序尝试在我的计算机上进行更改时通知我(默认)&#34;
答案 0 :(得分:0)
移动可执行文件导致目标系统将文件标记为来自不同的系统,因此目标系统将在启动时阻止执行(如果可执行文件恶意地将其自身添加到启动中)。
删除块应解决问题,但如果安装程序将可执行文件添加到系统中,则可以完全避免
但是,如何设置安装程序是一个不同的问题。
答案 1 :(得分:0)
问题是区域标识符,设置为3,与从互联网下载的所有文件一样。 如果其他人有此问题,只需删除区域标识符,例如使用此工具:
http://jameskovacs.com/2005/04/11/zonestripper-updated/
现在程序应该在启动时运行而不会提示UAC。