我们有一个x86 Win32桌面应用程序。当标准(非管理员)用户运行安装程序时,我们避免提升和/或显示UAC提示并在C:\Users\username\AppData\Roaming\...
下安装,而不是在常见的Program Files
目录下安装。
在Windows 10上,当我们从Control Panel -> Programs -> Programs and Features
启动卸载程序时,不显示UAC提示符,并且卸载程序在没有提升的情况下运行。这是期望的行为。当从Start -> Settings -> System -> Apps & features
启动相同的卸载程序时,会显示UAC提示符。
(在Opera浏览器安装程序/卸载程序中可以看到相同的行为。我测试了v35.0.2066.37。)
为什么从Apps & features
和Programs and Features
发起时,同一个卸载程序的行为会有所不同?
从应用和功能启动卸载程序时,如何避免UAC提示?
我们卸载程序的清单包括:
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" />
</requestedPrivileges>
</security>
</trustInfo>
我尝试改变requestedExecutionLevel
,并尝试完全删除trustInfo
,但无论如何都没有改变行为。
在Windows 10 1511版本10586.104上测试。
编辑:只是为了澄清,我正在尝试处理的情况是用户拥有标准帐户并且不知道管理员帐户的密码。如果他们在尝试卸载时看到UAC提示,他们别无选择,只能取消它,并且我们的卸载程序无法运行。
据我所知,这是“应用和功能”中的错误。 WiX的人有closed this issue作为Windows的bug,我认为他们已经通知了正确的人@Microsoft。在Insider build 15042中,行为仍然相同,因此可能无法及时修复Creators Update。
如果标准用户无法提升,则无法使用解决方法。
如果他们可以提升那么你可以使用评论中发布的re-spawn workaround或手动加载用户个人资料并调用RegOverridePredefKey
但他们都是丑陋的黑客(恕我直言)。