【问题标题】:UAC prompting on startup program with "asInvoker" on the "requestedExecutionLevel"UAC 在“requestedExecutionLevel”上使用“asInvoker”提示启动程序
【发布时间】:2014-04-10 00:22:49
【问题描述】:

我正在开发一个非常简单的 C# Windows 应用程序(它只显示一个显示“UACtest”的消息框),我希望它在启动时运行而不提示 UAC。

为此,我在 HKCU 下为它创建了一个注册表项,并在我编译它的机器(使用 Visual Studio 2013 的 Windows 8 64 位)中,它在启动时运行而不提示 UAC,正如预期的那样。

但是,如果我将可执行文件导出到 Windows 7 机器并执行完全相同的操作,则会在启动时显示 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 没有按预期在启动时提示,但是,当我在另一台机器(Virtual Box 下的 Windows 7 64 位)上测试它在启动时提示 UAC。

这现在真的让我很困惑,有人可以告诉我一种编译它的方法,这样它就不会在所有版本的 Windows 上启动时提示 UAC 吗?

我在 Visual Studio 2013 上使用的项目属性是默认的,除了: *目标框架:2.0 *平台目标:x86

以及所有机器上的 UAC 设置,其中默认设置:“仅当应用程序尝试在我的计算机上进行更改时通知我(默认)”

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 删除什么块?因此,例如,如果我希望从我的网站下载我的程序,执行时可以将自身添加到 HKCU,并且每次客户重新启动他的机器时都不会触发 UAC?
    • 添加到注册表应由安装程序处理,以避免在用户希望删除程序时留下未使用的密钥。关于街区;如果您在目标系统上查看可执行文件的属性,它应该显示在窗口底部。
    • 您的意思是右键单击可执行文件并选择“属性”吗?还是在 Visual Basic 的项目属性中?
    • 如果它触发 UAC,我将尝试制作安装程序并在此处发布。但是,我确信有一种方法可以在没有安装程序的情况下将其添加到 HKCU,并且不会在启动时触发 UAC,因为例如我使用了这个名为“Don'tSleep”的程序作为测试:tomsguide.com/us/download/Dont-Sleep,0301-28162.html 如果我添加它到HKCU,在Windows 8 64-bt或Windows 7 32-bit上都不会在启动时提示UAC,这很奇怪...
    • 可执行属性,而不是项目属性。使用 .Net 编辑注册表是很有可能的,但这仍然是一个不同的问题,我不建议这样做。添加启动密钥应该在安装时处理。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-07-11
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多