如何防止标准Windows 10用户的卸载程序升级?

d.l*_*.l. 10 windows uac uninstall elevated-privileges

我们有一个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 & featuresvs 启动时表现不同Programs and Features?

从应用和功能启动卸载程序时,如何避免UAC提示?

我们卸载程序的清单包括:

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
   <security>
      <requestedPrivileges>
         <requestedExecutionLevel level="asInvoker" />
      </requestedPrivileges>
   </security>
</trustInfo>
Run Code Online (Sandbox Code Playgroud)

我尝试更改了requestedExecutionLevel,并尝试trustInfo完全删除,但无论如何都没有改变行为.

在Windows 10 1511版本10586.104上测试.

编辑:只是为了澄清,我正在尝试处理的情况是用户拥有标准帐户并且不知道管理员帐户的密码.如果他们在尝试卸载时看到UAC提示,他们别无选择,只能取消它,并且我们的卸载程序无法运行.

And*_*ers 8

据我所知,这是“应用程序和功能”中的一个错误。WiX 人员已将此问题作为 Windows 错误关闭,我认为他们已通知正确的人员@Microsoft。尽管 Insider build 15042 中的行为仍然相同,但它可能不会在 Creators Update 中及时修复。

如果标准用户无法提升,则没有您可以使用的解决方法。

如果他们可以提升,那么您可以使用评论中发布的重新生成解决方法或手动加载用户配置文件并调用,RegOverridePredefKey但它们都是丑陋的黑客(恕我直言)。