UAC在启动程序上提示“;asInvoker;在“;requestedExecutionLevel”;
本文关键字:asInvoker requestedExecutionLevel 提示 启动 程序上 UAC | 更新日期: 2023-09-27 17:57:44
我正在开发一个非常简单的C#Windows应用程序(它只显示一个消息框,上面写着"UACtest"),我希望它在启动时运行,而不提示UAC。
为此,我在HKCU下为它创建了一个注册表项,在我编译它的机器上(使用Visual Studio 2013的Windows 8 64位),它在启动时运行,而不会像预期的那样提示UAC。
但是,如果我将可执行文件导出到Windows7计算机并执行完全相同的操作,则在启动时会显示UAC提示。
请注意,可执行文件的清单在"requestedExecutionLevel"上有"asInvoker",整个清单是这样的:
<?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位),它在启动时提示UAC。
这真的让我很困惑,有人能告诉我一种编译它的方法吗?这样它就不会在所有版本的Windows上启动时提示UAC了?
我在Visual Studio 2013上使用的项目属性是默认的,除了:*目标框架:2.0*平台目标:x86
以及所有机器上的UAC设置,其中默认设置为:"仅当应用程序试图在我的计算机上进行更改时通知我(默认)"
移动可执行文件会导致目标系统将文件标记为来自其他系统,因此目标系统将在启动时阻止执行(以防可执行文件恶意添加到启动中)
删除块应该可以解决这个问题,但是,如果安装程序将可执行文件添加到系统中,则可以完全避免这个问题
然而,如何设置安装程序则是另一个问题。
问题在于区域标识符,对于从互联网下载的所有文件,该标识符设置为3。如果其他人有这个问题,只需删除区域标识符,例如使用此工具:
http://jameskovacs.com/2005/04/11/zonestripper-updated/
现在,该程序应该在启动时运行,而无需提示UAC。