簡體   English   中英

Wix安裝程序自定義操作Powershell腳本未正確執行

[英]Wix installer custom action powershell script not properly executed

在安裝過程中,我需要自定義一些配置文件,這些文件基本上是要搜索和替換作為屬性提供給msi intaller的某些關鍵字。 自定義操作如下所示:

 <CustomAction Id="SetApplicationProperties"
    Directory="CONFIG.DIR"
    ExeCommand="powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -Command &quot;cat application.properties.template | % { $_ -replace 'SERVERNAME','[SERVERNAME]' } > application.properties.customer&quot; "
    Execute="deferred"
    Impersonate="no"
  />

但是,我只得到一個空的“ application.properties.customer”文件。 安裝程序日志文件中沒有錯誤/警告。 我嘗試了各種不同的引號組合,但是沒有成功。 將命令簡化為:

ExeCommand='powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -Command "cat application.properties.template  > application.properties.test" '

起作用,因此似乎在引用“ -replace ...”語句時出現了問題。

有沒有人建議如何正確設置安裝程序的報價?

認為有害的PowerShell CA :使用PowerShell進行自定義操作是觸發非常糟糕的運行時要求。 它既是腳本又是托管代碼-兩者本身都存在問題。 腳本通常很難調試,並且可以觸發防病毒鎖定,並且托管代碼取決於.NET運行時,並且具有許多眾所周知的技術陷阱(版本問題,CLR版本的加載行為,還有很多其他問題。) )。 如果可以,請避免執行PowerShell自定義操作

XML更新 :這是XML文件嗎? 如果是這樣,也許您可​​以嘗試WiX自己的XML更新功能? 也許看到以下答案: 在app.config中添加了新的應用程序設置,但MSI不會安裝它(不會覆蓋)

JSON如果是JSON,請允許我向您介紹一個鏈接 ,到目前為止我還沒有使用過。 我在書簽中找到的所有內容。 掠奪github.com是我的常用方法。 只是做一個搜索。

INI :也許甚至是INI格式? 如果是這樣,我沒有樣品適合您。 商業工具InstallShield和Advanced Installer允許您從INI文件中檢索值。 MSI的內置功能可能太奇怪了(編碼問題,功能集有限)。 我不確定WiX是否擴展了對檢索INI文件值的支持。

同時,經過反復試驗,我自己找到了解決該問題的方法,我發現在從項目到執行的“轉移”過程中,消除了{和' } '。 我發現鏈接可以作為進一步實驗的起點。 結果是[\\{] VALUE [\\}]可用於“轉義”括號。 現在,工作代碼如下所示:

  ExeCommand="powershell -NoLogo -NoProfile -NonInteractive -InputFormat None -ExecutionPolicy Bypass -Command &quot;cat application.properties.template | % [\{] $_ -replace '&lt;SERVERNAME&gt;','[SERVERNAME]' [\}] > application.properties.customer 2>&amp;1 &quot; "

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM