我添加了一些自定义逻辑来覆盖MSI的卸载方法。当我向卸载方法添加坏代码时,MSI卸载炸弹。由于卸载轰炸,我不能删除我的软件包,然后再试一次。所以MSI软件包安装得很好,然后我尝试卸载,我看到了我的错误,我的方式,然后我无法得到的东西卸载。
我有以下两个似乎有效的设置: DetectNewerInstalledVersion False RemovePreviousVersion True
我真的不需要显示代码,因为我知道它很糟糕,但它在这里。基本上,如果有人将文件添加到这个目录中,我希望在卸载时将它们销毁。我也不能删除InstallerClass.exe,因为它正在被使用。当卸载程序工作时,如果父目录为空,则整个父目录将被删除。
Public Overrides Sub Uninstall(savedState As System.Collections.IDictionary)
Dim InstallerFileInfo As FileInfo = New FileInfo(Context.Parameters("assemblypath"))
Dim InstallerDirectoryName As String = InstallerFileInfo.DirectoryName
Dim ScriptsDirectory As String = (InstallerDirectoryName & "\Directory_to_be_Deleted")
Dim InstallerClass As String = "InstallerClass.exe"
If Directory.Exists(InstallerDirectoryName) Then
For Each foundFile As String In My.Computer.FileSystem.GetFiles(InstallerDirectoryName)
If (foundFile IsNot InstallerClass) Then
My.Computer.FileSystem.DeleteFile(foundFile, FileIO.UIOption.AllDialogs, FileIO.RecycleOption.DeletePermanently)
End If
Next
End If
'MyBase.Uninstall(savedState)
End Sub
我尝试过很多事情,比如修改版本和改变我的xxVersion开关,但是我没有joy。
我很乐意知道“卸载之舞”的诀窍,例如构建一个已知的-好版本,安装/卸载或找到一个旧的已知良好和安装/卸载。
另外,我知道当您使用新的MSI卸载旧的MSI时,它首先要做的是从旧版本中查找并使用InstallerClass.exe。所以很明显,它不起作用,因为旧版本是坏的。
谢谢你们!
发布于 2013-07-30 18:20:17
您必须在Orca中编辑MSI以禁用自定义操作(InstallExecuteSequence表条件),并使用命令msiexec /I foo.msi REINSTALLMOE=vomus REINSTALL=ALL /qb重新执行它。
或者您只需回复VM上的快照就可以退出安装。我猜你现在明白了,在你真正关心的机器上安装它之前,安装程序应该经过很好的测试。
https://stackoverflow.com/questions/17953798
复制相似问题