我们有一个x86 Win32桌面应用程序。当安装程序由标准(非管理员)用户运行时,我们避免提升和/或显示UAC提示,并在C:\Users\username\AppData\Roaming\...
而不是通用的Program Files
目录下安装。如何防止标准Windows 10用户卸载程序升级?
在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
推出时一样卸载行为不同?
当从Apps &功能启动卸载程序时,如何避免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上测试。
编辑:只是为了澄清,我想处理的情况是用户有一个标准帐户,不知道管理员帐户的密码。如果他们在尝试卸载时看到UAC提示,他们别无选择,只能取消它,而我们的卸载程序不会运行。
我刚刚在早上处理这个“功能”。对我们来说唯一的方法就是让卸载程序以当前用户的身份重新启动。以下是该方法的说明,该方法使用资源管理器重新启动可执行文件: http://brandonlive.com/2008/04/27/getting-the-shell-to-run-an-application-for-you -part-2-how/ 我们使用NSIS,所以我们能够利用ShellExecAsUser插件,它基于第一个链接: http://nsis.sourceforge.net/ShellExecAsUser_plug-in –
I假设这并没有解决主要问题,但是对于我们来说,担心的是升级时卸载失败,因为它需要访问HKCU和LocalAppData。这并没有解决阻止提升的问题,但即使是Chrome的CurrentUser安装(以及您提到的Opera),在从应用程序和功能中卸载时也会遇到与Windows 10相同的提升问题,所以我们认为它不足以满足失败并以当前用户的身份执行,无论其是否升级。 –