我目前在该领域中有一个应用程序,该应用程序是作为.msi安装程序分发的(内置Wix)。我刚刚将这个应用程序移植到Electron上,以利用所有最新和最强大的功能,包括使用Electron Builder和Auto Updates。
任何wix / msi专家都知道我可以卸载旧的msi并运行新的安装程序的最佳方法吗?我找到的解决方案包括在Windows注册表中搜索以找到msi UUID,然后使用msiexec。
是否可以仅创建一个新版本的.msi来清理所有内容?
答案 0 :(得分:1)
如果我理解正确,您想从MSI迁移到NSIS格式吗? 这里有一篇文章: https://nsis.sourceforge.io/Uninstalling_a_previous_MSI。
但是,我建议您找到MSI的产品代码,并使用产品代码和您自己的卸载字符串(不是)来调用 msiexec.exe
如上面的文档所示,是从注册表中获得的)。这样,您可以添加一些构造以防止自发重启并强制正常无提示运行。下面介绍这种方法。
卸载MSI :您可以通过多种方式运行卸载命令来卸载以前的MSI版本:Uninstalling an MSI file from the command line without using msiexec。
查找产品代码 :您可以按以下方式找到MSI的产品GUID:How can I find the product GUID of an installed MSI setup?
命令行 :结合上面第一个链接中的方法3.5和使用第二个链接中的信息找到的产品代码,您可以使用这样的命令行来调用在您的NSIS安装程序中:
msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /QN /L*V "C:\msilog.log" REBOOT=ReallySuppress
快速参数说明 :
/X = run uninstall sequence
{11111111-1111-1111-1111-11111111111X} = product guid of app to uninstall
/QN = run completely silently
/L*V "C:\msilog.log"= verbose logging at path specified
REBOOT=ReallySuppress = prevent unexpected reboot of computer
ExecWait :NSIS需要自己独特的命令格式:Running MSIEXEC in a NSIS script with installer switches。尚未测试,但有一个建议:
StrCpy $R0 "{11111111-1111-1111-1111-11111111111X}"; the MSI's ProductID of my package
ExecWait '"msiexec.exe" /x $R0 /QN REBOOT=ReallySuppress'
在此处检查命令行的微调:https://nsis.sourceforge.io/Uninstalling_a_previous_MSI。
链接 :