UAC使用" asInvoker"提示启动程序在" requestedExecutionLevel"

时间:2014-04-10 00:22:50

标签: c# windows visual-studio-2013 uac

我正在开发一个非常简单的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;

2 个答案:

答案 0 :(得分:0)

移动可执行文件导致目标系统将文件标记为来自不同的系统,因此目标系统将在启动时阻止执行(如果可执行文件恶意地将其自身添加到启动中)。
删除块应解决问题,但如果安装程序将可执行文件添加到系统中,则可以完全避免 但是,如何设置安装程序是一个不同的问题。

答案 1 :(得分:0)

问题是区域标识符,设置为3,与从互联网下载的所有文件一样。 如果其他人有此问题,只需删除区域标识符,例如使用此工具:

http://jameskovacs.com/2005/04/11/zonestripper-updated/

现在程序应该在启动时运行而不会提示UAC。