首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MSI卸载覆盖逻辑失败,则无法卸载

MSI卸载覆盖逻辑失败,则无法卸载
EN

Stack Overflow用户
提问于 2013-07-30 17:42:54
回答 1查看 362关注 0票数 0

我添加了一些自定义逻辑来覆盖MSI的卸载方法。当我向卸载方法添加坏代码时,MSI卸载炸弹。由于卸载轰炸,我不能删除我的软件包,然后再试一次。所以MSI软件包安装得很好,然后我尝试卸载,我看到了我的错误,我的方式,然后我无法得到的东西卸载。

我有以下两个似乎有效的设置: DetectNewerInstalledVersion False RemovePreviousVersion True

我真的不需要显示代码,因为我知道它很糟糕,但它在这里。基本上,如果有人将文件添加到这个目录中,我希望在卸载时将它们销毁。我也不能删除InstallerClass.exe,因为它正在被使用。当卸载程序工作时,如果父目录为空,则整个父目录将被删除。

代码语言:javascript
运行
复制
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。所以很明显,它不起作用,因为旧版本是坏的。

谢谢你们!

EN

Stack Overflow用户

回答已采纳

发布于 2013-07-30 18:20:17

您必须在Orca中编辑MSI以禁用自定义操作(InstallExecuteSequence表条件),并使用命令msiexec /I foo.msi REINSTALLMOE=vomus REINSTALL=ALL /qb重新执行它。

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

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17953798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档