我添加了一些自定义逻辑来覆盖 MSI 的 Uninstall 方法。当我向我的卸载方法添加错误代码时,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 开关,但我没有得到任何乐趣。
我很高兴知道“卸载之舞”的诀窍,例如构建一个已知良好的版本,安装/卸载或找到一个较旧的已知良好并安装/卸载。
另外,我知道当您使用新的 MSI 卸载旧的 MSI 时,它尝试做的第一件事就是从旧版本中找到并使用 InstallerClass.exe。所以显然它不起作用,因为旧版本不好。
多谢你们!