![](/img/trans.png)
[英]WiX run PowerShell script in custom action before system file check
[英]Wix installer custom action powershell script not properly executed
在安裝過程中,我需要自定義一些配置文件,這些文件基本上是要搜索和替換作為屬性提供給msi intaller的某些關鍵字。 自定義操作如下所示:
<CustomAction Id="SetApplicationProperties"
Directory="CONFIG.DIR"
ExeCommand="powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -Command "cat application.properties.template | % { $_ -replace 'SERVERNAME','[SERVERNAME]' } > application.properties.customer" "
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 "cat application.properties.template | % [\{] $_ -replace '<SERVERNAME>','[SERVERNAME]' [\}] > application.properties.customer 2>&1 " "
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.