2016-02-17 68 views
8

我们有一个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 & featuresPrograms 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提示,他们别无选择,只能取消它,而我们的卸载程序不会运行。

+0

我刚刚在早上处理这个“功能”。对我们来说唯一的方法就是让卸载程序以当前用户的身份重新启动。以下是该方法的说明,该方法使用资源管理器重新启动可执行文件: 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 –

+0

I假设这并没有解决主要问题,但是对于我们来说,担心的是升级时卸载失败,因为它需要访问HKCU和LocalAppData。这并没有解决阻止提升的问题,但即使是Chrome的CurrentUser安装(以及您提到的Opera),在从应用程序和功能中卸载时也会遇到与Windows 10相同的提升问题,所以我们认为它不足以满足失败并以当前用户的身份执行,无论其是否升级。 –

回答

3

据我所知,这是“Apps &功能”中的一个错误。 WiX的人有closed this issue作为Windows的错误,我认为他们已经通知了正确的人@微软。 Insider build 15042中的行为仍然相同,但它可能无法及时修复创作者更新。

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

如果他们可以提升,那么你可以使用发表评论中的re-spawn workaround或手动加载用户配置文件并呼吁RegOverridePredefKey,但他们都是丑陋的黑客(恕我直言)。

+0

你刚刚给我节省了大量的调试,谢谢。 – johnwbyrd