【问题标题】:MSI Failure to UninstallMSI 卸载失败
【发布时间】:2019-03-05 19:18:38
【问题描述】:

很抱歉,如果这是重复的,但我无法通过 Google 找到我要查找的内容(主要是因为我不知道要问什么)。

tl;dr - 有没有办法让我的 C# VS Installer 项目在更新版本安装期间忽略任何版本控制错误或以前安装的丢失文件?

长版:我创建了一个包含 6 个文件(3 个程序、2 个服务和一个 DLL)的 C# 应用程序。我在 VS 中使用 MSI 部署项目来创建和分发这些文件、注册 DLL 并安装服务。当防病毒或恶意软件应用程序从系统中删除我的文件(和/或注册密钥、服务等)时,问题就开始了。为了安装我的应用程序的新版本,MSI 必须能够卸载旧版本。此时安装失败,因为文件或服务已被更改并且需要原始 MSI 包。找到原件可能会很棘手,因为我的客户通常不会保留它们。还有一些情况,当我不知道更好的时候,客户需要对可执行文件进行自定义更改。我只需更改文件并将其复制到用户安装文件夹即可。这进一步激怒了 MSI 众神,因为文件版本现在与安装程序放在那里的文件版本不同。如何轻松删除旧版本的应用程序并安装新版本?我正在计划进行一次重大修订,并且预计会有超过一百次左右的安装会让人头疼。将来我还可以/应该考虑什么来避免这些问题?我没有理解什么?

【问题讨论】:

    标签: c# .net visual-studio windows-installer installation


    【解决方案1】:

    范围:这一次是很多问题。 Firstly, how large is your distribution? How many machines are we talking about?

    FixItYou can try this FixIt tool from Microsoft 作为“快速修复”,但在许多计算机上手动运行它至少可以说很麻烦。不确定它是否可以自动化。没试过。

    MSI 卸载:MSI 确实不需要通常需要卸载原始源,除非它错误地调用 ResolveSource 标准动作或自定义动作会做一些奇怪的事情。这个旧答案更详细地解释了:Why does MSI require the original .msi file to proceed with an uninstall?

    重大升级卸载:可能是在重大升级期间进行了一些源解析 - 坦率地说,我不确定。您是否尝试手动调用卸载?换句话说,只运行卸载命令,而不是在旧版本之上安装新版本并进行重大升级卸载? 有机会我会进行测试

    全新安装位置:作为一种解决方法,您可以将新版本安装在与旧版本不同的位置,并将其与过去的版本分离。在 COM 服务器和其他全局注册方面可能存在冲突,但如果没有,您可以将旧版本保留在原处(可能删除其快捷方式)并将其保留在那里。紧急“解决方案”。


    自我修复/弹性:MSI“知道”您安装了什么。它尝试积极维护该安装状态,如下所述:Why does the MSI installer reconfigure if I delete a file?不要与 MSI 对抗——它会反击。尝试遵循范式 - 否则你会乘风车:-)。


    Virustotal.com:针对恶意软件包含误报检测和文件隔离的一种措施是使用在线服务,该服务使用许多恶意软件扫描程序来扫描您的二进制文件。 Virustotal.com 就是这样的服务。上传你完成的设置,也许还有二进制文件,看看不同的工具对你的二进制文件做了什么。很抱歉,如果这很明显,请添加为其他阅读此内容的人的提示。


    链接

    【讨论】:

    • 这是一个专门为我们的客户构建的小型(大约 100 个)发行版。 .它确实通过 Internet 与 a 进行通信,并且没有(很快将获得此重大更新)代码签名证书。我一直认为,使用小型发行版、未签名代码和互联网通信,我很可能会在多年内看到防病毒/恶意软件误报,如果不是总是这样的话。全新安装会很棒,但是服务会留在原地,并导致我的服务器上的连接日志令人头疼。无论如何,你给了我很多阅读...非常感谢。
    • 通过 Internet 通信?设置中是否有自定义操作?自定义操作可能会导致源媒体解析问题。现有服务可以从您的较新设置中关闭,即使它转到不同的位置。有机会会做一些测试。
    • 您可以使用多种技术来禁用导致卸载问题的自定义操作,有些是手动的,有些是自动的。手动方法是我上面提到的 Microsoft FixIt 工具。最好的办法是通过小升级来修补现有安装,以禁用有问题的自定义操作。让我们知道您的包中有哪些自定义操作?
    • 抱歉... 不,安装程序不会与服务器通信。 do 中包含的一些可执行文件目前包含未签名的代码,并且没有广泛分布。这是为了解释为什么 AV 和恶意软件可能总是将单个可执行文件和安装程序视为威胁。
    猜你喜欢
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多