自定义VS2008安装项目卸载

时间:2010-01-14 22:16:28

标签: .net setup-project uninstaller

我的.NET应用程序有一个安装项目,安装/卸载工作正常,如果他们在工作时不管它们。

但是,如果有人在处理时取消卸载,则回滚似乎无法正确处理,并且在稍后尝试再次卸载时,将向用户提出空引用异常。

我想简化一下情况;我想删除用户取消正在进行的卸载的功能。可以这样做吗?

谢谢, -ben

1 个答案:

答案 0 :(得分:1)

是的,有可能这样做。 MSDN列出several options;但是,修补Visual Studio创建的MSI文件可能更简单。这可以使用Orca完成(您将在Windows SDK文件夹中找到此工具的安装程序,通常位于C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ Bin \ orca.msi下)。

Orca允许您编辑MSI数据库表。要隐藏取消按钮,您必须将记录添加到ControlCondition表(来自here):

Dialog        | Control      | Action   | Condition
------------------------------------------------------
ProgressForm  | CancelButton | Hide     | 1

使用Orca添加记录的手动任务可能更适合使用这样的简短VBScript:

Set oMsi = CreateObject("WindowsInstaller.Installer")

' get path to msi from command line
strMsiFullPath = Wscript.Arguments(0)
' open transacted
Set oDB = oMsi.OpenDatabase(strMsiFullPath , 1)

' insert a record into the [ControlCondition][3] table
Set oView = oDB.OpenView("INSERT INTO `ControlCondition` " & _
    "(`ControlCondition`.`Dialog_`, `ControlCondition`.`Control_`," & _
     "`ControlCondition`.`Action`, `ControlCondition`.`Condition`) " & _
     "VALUES ('ProgressForm', 'CancelButton', 'Hide', '1')")

' clean up
oView.Execute: oView.Close: oDB.Commit
Set oMsi = Nothing

此脚本可以作为构建后步骤添加到您的安装项目中(请注意,输出路径的Visual Studio变量中存在拼写错误):

cscript $(ProjectDir)patch.vbs $(BuiltOuputPath)