如何从.msi安装程序转到电子生成器(nsis)

时间:2019-03-04 23:33:46

标签: windows wix windows-installer electron electron-builder

我目前在该领域中有一个应用程序,该应用程序是作为.msi安装程序分发的(内置Wix)。我刚刚将这个应用程序移植到Electron上,以利用所有最新和最强大的功能,包括使用Electron Builder和Auto Updates。

任何wix / msi专家都知道我可以卸载旧的msi并运行新的安装程序的最佳方法吗?我找到的解决方案包括在Windows注册表中搜索以找到msi UUID,然后使用msiexec。

是否可以仅创建一个新版本的.msi来清理所有内容?

1 个答案:

答案 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


链接