2016-07-07 129 views
1

我已經使用了幾周的WiX,但仍然很難獲得有關應該如何工作的良好信息。其中之一是伐木。我要求安裝程序將日誌文件寫入特定位置,而用戶不必添加任何/ l命令行參數。我看到有一個Log命令,但它的父項是Bundle,它是創建捆綁軟件包的根元素。我有一個簡單的安裝程序,所以可能不需要我的情況。這應該很簡單,對吧?WiX Toolset默認日誌文件位置

+0

更新:所以最後搜索高和低後,結果創建一個自定義的BA用戶界面是答案。這意味着創建一個包含所有默認對話框等的整個框架,但是WiX源代碼確實有一個很好的起點。在捆綁包中有一個Log命令,您可以告訴它使用環境變量來獲取日誌位置,我使用Temp –

回答

1

。這是最簡單的解決方案(如果我是你,我會做這個) - 創造出執行以下命令的批處理文件:

msiexec MyProduct.msi /L*V "%TEMP%\MyProduct.log" 

編輯在批處理文件到您要自定義路徑的路徑。

。您可以使用MSILogging Property在命令行外設置日誌記錄。但是,此屬性僅適用於Windows Installer 4.0。

基本上,你需要在你的內部添加一個新的屬性。WXS文件:

<Property Id="MsiLogging" Value="voicewarmupx!"/> 
  • v - 詳細輸出
  • o - 外的磁盤空間不足消息
  • i - 狀態消息
  • c - 初始UI參數
  • e - 所有錯誤消息
  • w - 非致命警告
  • a - 啓動操作r
  • - 具體行動,記錄
  • m - 非內存或致命的退出信息
  • u - 用戶請求
  • p - 終端屬性
  • ! - 將每行刷新到日誌
  • x - 額外調試信息

這將確保該日誌文件將會保留l在%temp%文件夾中創建,日誌文件的名稱將類似於「MSI * .LOG」。日誌文件的完整路徑可以從此屬性中讀取,並且可以從MsiLogFileLocation中讀取。但MsiLogFileLocation屬性是隻讀的,無法設置。

現在這不符合您在自定義位置創建日誌文件的要求,因爲我們無法設置日誌文件位置。我們無法在WIX中設置日誌文件位置的原因是因爲我們需要告訴MSIEXEC在Windows安裝程序引擎實際開始執行MSI之前將日誌文件寫入哪裏。

要解決此問題,您可以執行的一項操作是添加自定義操作並將日誌文件從%temp%文件夾複製到所需的文件夾。這將是這樣的:

<CustomAction Id="CopyLogFile" Execute="immediate" 
       ExeCommand="cmd /c copy [MsiLogFileLocation] C:\customlocation\MyProduct.log" 
       Directory="TARGETDIR" 
       Impersonate="no" 
       Return="asyncNoWait" /> 

<InstallExecuteSequence> 
    <Custom Action="CopyLogFile" OnExit="success" /> 
</InstallExecuteSequence> 
+0

我開始明白爲什麼複雜性存在。我會試一試你的解決方案,它似乎是最接近潛在解決方案的東西。我將不得不弄清楚如何調整它,但由於我昨天得到的另一個要求是我們永遠不會覆蓋日誌文件。所以我必須將其複製到自定義位置並在最後按順序編號標記。我們目前的安裝程序以這種方式工作,但這是在InstallShield中完成的。只要我能確認,我會盡快給出答案。謝謝。 –

+0

如果這對你有幫助,請將其標記爲答案。 – Isaiah4110

0

您可以將捆綁包作爲單個安裝程序的包裝,並讓安裝程序在安裝期間顯示其自己的界面。這應該很容易做到,也許是正確的行動方式。如果能讓您輕鬆地完成您所需的任務,我確實不會看到有一包1包的問題。

除此之外,安裝程序需要在啓用日誌記錄的情況下調用,另一個選項是通過註冊表爲Windows安裝程序啓用全局日誌記錄 - 但這可能不適合您的需要,需要在您的安裝程序運行。

+0

那麼你是說,即使對於捆綁包,如果用戶沒有指定/ l來啓動日誌記錄,它不會創建一個日誌文件? –

+0

不,捆綁軟件默認爲捆綁軟件本身和所有捆綁的安裝程序創建日誌,並記錄到%temp%目錄,但可以使用鏈接的Log元素覆蓋該位置。 –