1
我有一个.NET应用程序的安装项目,并且安装/卸载工作得很好,如果他们在工作时被单独留下。自定义VS 2008安装项目卸载程序
但是,如果某人在处理过程中取消了卸载,回滚似乎没有正确处理,并且在稍后尝试再次卸载时,用户会收到空引用异常。
我想简化一下情况;我想删除用户取消正在进行的卸载的功能。这可以做到吗?
感谢, -Ben
我有一个.NET应用程序的安装项目,并且安装/卸载工作得很好,如果他们在工作时被单独留下。自定义VS 2008安装项目卸载程序
但是,如果某人在处理过程中取消了卸载,回滚似乎没有正确处理,并且在稍后尝试再次卸载时,用户会收到空引用异常。
我想简化一下情况;我想删除用户取消正在进行的卸载的功能。这可以做到吗?
感谢, -Ben
是的,这是可以这样做。 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
添加使用逆戟鲸的记录本手册任务可能会更好用短的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)
好的答案。你绝对指出我正确的方向。不幸的是,'ProgressForm'不是在卸载过程中显示进度的对话框。事实上,我浏览了对话表中的所有对话框,并在标题中添加了数字,以便我可以追踪此对话框,但根本没有运气。我的猜测是卸载进度对话框不能使用ControlCondition表编辑。不过,我很欣赏这个答案,因为它为我打开了很多定制的可能性。谢谢 :) – Ben 2010-01-15 22:39:51