Windows installer 如何从electron builder参数化msi文件

Windows installer 如何从electron builder参数化msi文件,windows-installer,electron-builder,Windows Installer,Electron Builder,我正在尝试使用electron builder(版本20.39.0)创建一个.msi安装程序文件,该文件可以在安装期间参数化。 参数(如服务器端点)应写入文件中 示例: 当MsiExec/i“MyProject.msi”SERVER\u ENDPOINT=myapp.example.com 然后,myapp.example.com应该出现在安装目录中的一个文件中 我试图编辑添加以下内容以将${SERVER\u ENDPOINT}写入SERVER.txt 文件C:\…\MyProject\node

我正在尝试使用electron builder(版本20.39.0)创建一个.msi安装程序文件,该文件可以在安装期间参数化。 参数(如服务器端点)应写入文件中

示例:
MsiExec/i“MyProject.msi”SERVER\u ENDPOINT=myapp.example.com

然后,
myapp.example.com
应该出现在安装目录中的一个文件中

我试图编辑添加以下内容以将${SERVER\u ENDPOINT}写入SERVER.txt

文件
C:\…\MyProject\node\u modules\electron builder lib\templates\msi\template.xml

。。。
server.txt“Return=”check“/>
...
...

MsiExec /i "MyProject.msi" /L*v Install.log SERVER_ENDPOINT=myapp.example.com
我还没有工作。它会安装,但不会在日志文件中显示
writeConfigFile

您认为这是使msi文件参数化的正确方法吗?
或者你会推荐另一种解决方案吗

我还找到了Orca.exe来创建MST文件,但我更喜欢一个简单的解决方案,不需要手动步骤。

设置MSI属性 我对Electron builder不熟悉。但是,在MSI术语中,您需要指定文件中的内容应替换为,然后您需要在
转换中、通过
命令行或
属性表中设置属性(嵌入MSI)

事实上,您可以同时设置所有三个,我不确定哪一个适用:-)。命令行肯定会覆盖属性表,但我不确定在转换和命令行参数之间的战斗中,什么会获胜:

转换(在命令行上应用转换,转换文件中的实际设置-
mst
):

命令行(在命令行上设置公共属性):

属性表(每个MSI中的内置属性表也可以设置一个值):


使用MSI属性 设置属性显然是不够的,您必须在安装过程中定义值的位置

  • 如果该文件是一个
    INI文件
    ,则设置参数非常容易,因为这是MSI的内置功能
  • XML文件更新
    文本文件更新
    更糟糕,因为这样一来,您就依赖第三方解决方案或通过自定义操作自己完成()
具有非常好的特性来替换XML和文本文件中的参数。也有这样的特点。开源也有,但它比商业工具涉及更多

关于电子,我不知道它是如何工作的。但是,在任何一种情况下,中心任务都是让MSI包含如下构造:

这是一个用高级安装程序编译的MSI。您可以看到我有一个参数化的值[MYVALUE]。它可以在命令行上设置,因为它是全大写属性-也称为公共MSI属性。安装期间,大括号中的属性将替换为传入的值。很明显


某些链接

msiexec.exe /i "MySetup.msi" TRANSFORMS="MyTransform.mst"

在SteinÅsmul的帮助下,这是我目前的解决方案:

我选择了当前值,并添加了一个选项,将变量写入ini文件


...
完整的模板如下所示:


= 601]]>
{{if(iconPath){}
{{ } -}}
{{if(isAssisted | | isranterfinish){}
{{ } -}}
{{if(isPerMachine){}
{{}其他{}
{{ } -}}
{{if(isAssisted){}
{{}else如果(isrunterfinish){}
{{ } -}}
{{if(isCreateDesktopShortcut){}
{{ } -}}
{{if(isCreateStartMenuShortcut){}
{{ } }}
{{-dirs}}
{{-files}}
使用电子-builder@20.39.0,我用

set DEBUG=electron生成器:*
cp template.xml。\node\u modules\app builder lib\templates\msi\template.xml
电子建设者
然后使用安装MSI

MsiExec/i“myapp.msi”MYSERVER=myapp.example.com MYSECONDPROPERTY=helloworld/L*v Install.log
安装完成后,我在installdir中获得了AppConfig.ini(
%USERPROFILE%\AppData\Local\Programs\MyApp\AppConfig.ini


在22.11.x和版本中添加了一个最新的配置属性,这些版本支持在将project.wxs编译为MSI之前对其进行修改

msiProjectCreated

它接受函数或函数字符串,并接受一个参数作为指向project.wxs的路径


这将使您能够更好地利用扩展名或基于安装时属性创建自定义ini文件。

开始编写答案,但我不知道。安装后启动应用程序时是否有应用设置的功能。稍后我可能会添加我的答案,这是关于MSI的一般性问题,以及如何通过MSI表设置属性。回到基础,可能不是你想知道的。以下用例:我们构建一个MSI文件并将其发送给我们的客户。客户将其集成到其“msi卷展系统”中,并希望配置后端服务器(param或MST)。所以我需要一种读取MSI参数或创建MST文件的方法。我会对你们关于MSI表中属性的一般情况非常感兴趣,我刚刚把我在下面写的东西都扔了。快速浏览一下。谢谢您的详细解释:)INI方式听起来简单而有趣。我刚刚试过:
MsiExec/I“myApp.msi”SAVEINI=Response.ini SERVER\u ENDPOINT=myApp.example.com
,但没有创建Response.ini
msiexec.exe /i "MySetup.msi" MYPROPERTY="My Value here"
[AppConfig]
Server="myapp.example.com"
SecondProp="helloworld"