1

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

但是,如果有人在卸载过程中取消卸载,回滚似乎没有得到正确处理,并且在稍后再次尝试卸载时,用户会收到空引用异常。

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

谢谢,-本

4

1 回答 1

1

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

Orca 允许您编辑 MSI 数据库表。要隐藏取消按钮,您必须向 ControlCondition 表添加一条记录(从此处):

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)
于 2010-01-15T01:07:38.237 回答