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 2010 中删除/卸载项目模板