MSI无法卸载

我很抱歉,如果这是重复,但我无法通过谷歌找到我想要的东西(主要是因为我不知道该问什么)。

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

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

1
投票

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

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

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

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

第3节:Uninstalling an MSI file from the command line without using msiexec How can I find the product GUID of an installed MSI setup?

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

自我修复/恢复能力:MSI“知道”您安装的内容。它试图主动维护安装状态,如下所述:Why does the MSI installer reconfigure if I delete a file?。不要打MSI - 它反击。尝试遵循范式 - 或者你搭乘风车:-)。

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

Bogdan Mitrache:https://www.advancedinstaller.com/antivirus-whitelisting.html 本答案第7节:How do I avoid triggering MSI self-repair with my WiX / MSI package?

链接:

How to build MSI package on a linux server? How do I avoid distributing sensitive information in my MSI by accident? https://devblogs.microsoft.com/setup/resolving-prompts-for-source/ https://devblogs.microsoft.com/setup/resolvesource-requires-source/