我们有一个x86 Win32桌面应用程序。 当标准(非pipe理员)用户运行安装程序时,我们避免提升和/或显示UAC提示,并安装在C:\Users\username\AppData\Roaming\...
而不是常见的Program Files
目录下。
在Windows 10上,当从Control Panel -> Programs -> Programs and Features
启动卸载Control Panel -> Programs -> Programs and Features
,不显示UAC提示,卸载程序运行时不会升级。 这是所需的行为。 当从“ Start -> Settings -> System -> Apps & features
相同的卸载Start -> Settings -> System -> Apps & features
,会显示一个UAC提示。
(在Opera浏览器安装程序/卸载程序中可以看到相同的行为,我testing了v35.0.2066.37。)
为什么从Apps & features
与Programs and Features
启动时,同一个卸载程序的行为有所不同?
当从应用程序和function启动卸载程序时,如何避免UAC提示?
我们的卸载程序的清单包括:
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" /> </requestedPrivileges> </security> </trustInfo>
我尝试更改requestedExecutionLevel
,并试图完全删除trustInfo
,但没有任何方式的行为改变。
在Windows 10 1511 build 10586.104上testing。
编辑:只是为了澄清,我试图处理的情况下,用户有一个标准帐户,不知道pipe理员帐户的密码。 如果他们在尝试卸载时看到UAC提示,他们别无select,只能取消它,而我们的卸载程序不会运行。
就我所知,这是“应用程序和功能”中的一个错误。 WiX人已经把这个问题作为一个Windows bug来解决,我想他们已经通知了微软正确的人。 在Insider build 15042中的行为仍然是相同的,尽管如此,创作者更新可能不会得到修复。
如果标准用户无法升级,则没有可以使用的解决方法。
如果他们可以提升,那么你可以使用评论中发布的重新生成的变通办法或手动加载用户配置文件,并调用RegOverridePredefKey
但他们都是丑陋的黑客(恕我直言)。