是否有可能将PowerShell脚本嵌入安装程序中并使用Wix从那里而不是在本地运行它?

问题描述 投票:0回答:1

我想让安装程序运行PowerShell脚本,然后再安装所有其他文件。但是,当前的构建方式仅在完成安装后才能运行脚本,因为它将powershell脚本放置在目标目录中。现在,可以通过使目录始终存在来解决此问题。但是,我不想一直都向脚本提供安装程序,我希望脚本被嵌入到安装程序中并从那里运行,或者至少运行脚本文件中的命令。

我曾尝试将自定义操作的“之后”更改为“ InstallInitialize”,但是会抛出一条错误消息,指出它无法建立路径(这是合乎逻辑的,因为尚未创建路径,因为脚本是在安装前执行的文件)。

这里有一些代码提供了运行powershell脚本的所有逻辑:

<DirectoryRef Id="INSTALLFOLDER">
  <Component Id ="SOMESCRIPT" Guid="">
    <File Id="SOMESCRIPT" Name="My-Script.ps1" Source="My-Script.ps1" />
  </Component>
</DirectoryRef>

<Property Id="POWERSHELLEXE">
  <RegistrySearch Id="POWERSHELLEXE"
                  Type="raw"
                  Root="HKLM"
                  Key="SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell"
                  Name="Path" />
</Property>

<Condition Message="This application requires Windows PowerShell.">
  <![CDATA[Installed OR POWERSHELLEXE]]>
</Condition>

<SetProperty Id="PSscript"
         After="PSscript"
         Sequence="execute"
         Value ="&quot;[POWERSHELLEXE]&quot; -Version 3.0 -NoProfile -NonInteractive -InputFormat None -ExecutionPolicy Bypass -Command &quot;&amp; '[#SOMESCRIPT]' ; exit $$($Error.Count)&quot;" />

<CustomAction Id="PSscript"
              BinaryKey="WixCA"
              DllEntry="WixQuietExec"
              Execute="deferred"
              Return="check"
              Impersonate="yes" />

<InstallExecuteSequence>
  <Custom Action="PSscript" After="InstallInitialize"><![CDATA[NOT Installed]]></Custom>
</InstallExecuteSequence>

预期结果是将脚本嵌入到.msi文件中,而不依赖仅在安装后创建的文件。该错误消息是因为找不到脚本,所以找不到脚本。我实际上不希望脚本文件首先放在文件夹中,我只希望脚本在安装程序中运行,而对脚本文件不做任何其他操作。

powershell wix installer
1个回答
0
投票

我可以在网上找到Wix的This the only PS extension,但似乎这也可能仅限于您的情况。

为了在安装之前支持正在运行的脚本,我们(在Advanced Installer)创建了预定义的支持,以在安装启动时将PS脚本提取为临时文件并从该临时位置执行该脚本。如果Wix有类似的支持,我不会。

披露:我正在团队建设Advanced Installer。

© www.soinside.com 2019 - 2024. All rights reserved.