Visual Studio 安装项目:如何强制卸载程序以管理员模式运行?

Posted

技术标签:

【中文标题】Visual Studio 安装项目:如何强制卸载程序以管理员模式运行?【英文标题】:Visual Studio Setup Project: How Can I force an Uninstaller to run in Administrator mode? 【发布时间】:2011-12-17 12:32:21 【问题描述】:

我创建了一个 Visual Studio 安装项目,并为我的主应用程序创建了一个安装程序类。在这个安装程序类中,我重写了卸载程序函数来清理我的应用程序创建的额外文件夹。这在 Windows XP 中运行良好,但在 Windows 7 中却不行,因为我认为它与 UAC 有关。如何强制我的卸载程序提升权限?

我在另一篇文章中问过这个问题,但我并不清楚我的意图。

我找到了这些链接,但我不知道它是否相关:http://msdn.microsoft.com/en-us/library/aa370852.aspx http://msdn.microsoft.com/en-us/library/aa370134%28v=VS.85%29.aspx


更新(2011 年 11 月 7 日)

我发现了 Orca 可以用来修改 msi 安装应用程序属性,但没有适当的文档(或示例/教程)。以下是我为解决此问题所采取的步骤:

    使用 Orca 打开 appInstal.msi。 从左侧表格中单击 customAction 在所有行的末尾添加一个新条目(通过双击新行) 输入 Elevate_Install_Uninstall 作为操作名称,输入 3072 作为类型 为目标键入 ALL 并将 Source 留空

希望这对某人有所帮助/

【问题讨论】:

【参考方案1】:

将这些属性添加到卸载过程:

    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
    public override void Uninstall(IDictionary savedState)
    
        base.Uninstall(savedState);
    

【讨论】:

【参考方案2】:

我的假设是您创建了一个新的自定义操作,该操作在卸载 MSI 软件包时执行。要运行提升的自定义操作 - 无论是在安装时还是在卸载时 - 它必须是 deferred 并且必须标有 noimpersonation 标志。

在 WiX 中,您可以设置 CustomAction element 的这些属性:

Execute="deferred"Impersonate="no"

就 Windows Installer 而言,您的自定义操作必须设置以下位:msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate;见Custom Action In-Script Execution Options。

【讨论】:

如何设置这些位?我在 VS2010 IDE 中没有看到任何窗口。 @ArmenB。对不起,但我不知道如何在 VS2010 IDE 中做到这一点。可能根本没有这样的选择。这些位转到 MSI 数据库中 CustomAction 表的 Type 列。您可以使用 Orca 编辑您的 MSI 并对其进行测试。 (注意:在 Orca 中,您将使用 numerical 值。) 谢谢阿列克西。我将对 Orca 进行更多研究,并在此处发布解决方案。【参考方案3】:

Vista 的 UAC 类似于 windows 7 的,所以你应该在这里找到一些帮助:

http://www.professionalvisualstudio.com/blog/2007/10/05/enabling-your-application-for-uac-on-vista/

这篇文章详细介绍了如何调整您的应用以在不遇到 UAC 问题的情况下运行。

它允许您将清单文件添加到您的解决方案中,以确保它在特定级别的权限下运行。

【讨论】:

这里没有描述如何提升卸载程序。不过感谢您的链接。

以上是关于Visual Studio 安装项目:如何强制卸载程序以管理员模式运行?的主要内容,如果未能解决你的问题,请参考以下文章

如何将visual studio卸载干净

我可以绕过 Visual Studio 安装项目中的卸载吗?

如何把visual studio卸载干净

如何在 Visual Studio 2010 中删除/卸载项目模板

如何卸载.vsix Visual Studio Extensions?

怎么彻底删除visual studio