Vb.net MSI卸载覆盖逻辑失败,那么我可以’;t卸载

Vb.net MSI卸载覆盖逻辑失败,那么我可以’;t卸载,vb.net,windows-installer,Vb.net,Windows Installer,我添加了一些自定义逻辑来覆盖MSI的卸载方法。当我将错误代码添加到卸载方法时,MSI卸载炸弹。由于卸载失败,我无法删除我的软件包并重试。所以MSI软件包安装得很好,然后我尝试卸载,我看到了我的错误,然后我无法卸载它 我有以下两种设置,它们似乎很有效: 检测到重新安装版本错误 RemovePreviousVersion True 我真的不需要显示代码,因为我知道它很糟糕,但它就在这里。基本上,如果有人将文件添加到此目录中,我想在卸载时将其清除。我也无法删除InstallerClass.exe,因为

我添加了一些自定义逻辑来覆盖MSI的卸载方法。当我将错误代码添加到卸载方法时,MSI卸载炸弹。由于卸载失败,我无法删除我的软件包并重试。所以MSI软件包安装得很好,然后我尝试卸载,我看到了我的错误,然后我无法卸载它

我有以下两种设置,它们似乎很有效: 检测到重新安装版本错误 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
我尝试过很多事情,比如加速版本和改变我的第26个版本开关,但我没有得到任何乐趣

我很乐意知道“卸载之舞”的诀窍,例如构建一个已知良好的版本,安装/卸载或查找一个较旧的已知良好版本并安装/卸载

此外,我知道,当您使用新MSI卸载旧MSI时,它尝试做的第一件事就是从旧版本中查找并使用InstallerClass.exe。很明显,它不起作用,因为旧版本不好


谢谢大家

您必须在Orca中编辑MSI以禁用自定义操作(InstallExecuteSequence表条件),并使用命令msiexec/I foo.MSI REINSTALLMOE=vomus reinstally=ALL/qb对其进行重新设置


或者您可以只回复VM上的快照以退出安装。我猜你现在明白了,在你真正关心的机器上安装之前,安装程序应该经过良好的测试。

我有点惊讶VS2010没有类似Orca的东西。但是好的,Windows SDK现在正在安装。这是因为Windows Installer不是开发部门的技术。这是一种Windows平台技术。因此,我有一个新的MSI(没有错误的MSI),但它无法卸载旧软件包,我相信,因为卸载设置在InstallerClass.exe中。它看起来不像Orca编辑InstallerClass.exe。没有任何MSI从现有的InstallerClass获取它的代码吗?在新的MSI(有效的MSI)中,我看到的与卸载相关的唯一属性是:_6D065175_37EA_49A1_B20F_89722E64EE17.uninstall.setPropertyYah,我编辑原始MSI。现在我必须找到它。。。编辑-不,我没有原始的MSI。请转到C:\Windows\Installer并找出这些MSI文件中的哪一个是您的产品。FindStr-i-m SEARCHTEXT*.msi很有帮助。使用Orca编辑该文件并跳过重新缓存步骤(这是缓存)