【发布时间】: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