2016-03-03 206 views
2

如何在我的wix項目中啓用日誌並設置MsiLogFileLocation? 現在我正在我的install.msi命令行參數:在wix安裝程序中啓用日誌記錄

msiexec /i install.msi /l*v InstallLog.log

我想記錄我的工作永遠只是運行install.msi不帶任何參數。有沒有辦法做到這一點?

回答

6

你可以告訴WiX的使用詳細日誌記錄是這樣的:

<Property Id="MsiLogging" Value="v" /> 

,但你不能指定寫入文件 - MSIEXEC已經確定的時候維克斯到達設置的屬性。它將默認爲%TEMP%\MSI{random chars}.LOG。您可以爲用戶提供一個複選框,以確定他們是否要打開該日誌,就像這樣(假設您使用內置的InstallDir UI模板 - 其他人也可以使用它),但這是一個非常簡單的例子) :

<Property Id="MsiLogging" Value="v" /> 

<UI> 
    <UIRef Id="WixUI_InstallDir" /> 
    <Publish Dialog="ExitDialog" 
    Control="Finish" 
    Event="DoAction" 
    Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish> 
</UI> 
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="View Installation Log" /> 

<WixVariable Id="WixUILicenseRtf" Value="license.rtf"/> 

<Property Id="WixShellExecTarget" Value="[MsiLogFileLocation]" /> 
<CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" /> 

這將日誌文件複製到一個約儘可能晚地在遊戲目錄下,但將缺席至少一些日誌的尾端:

<Property Id="MsiLogging" Value="v!" /> 
<CustomAction Id="CopyLog" Execute="immediate" 
       ExeCommand="cmd /c copy [MsiLogFileLocation] C:\temp\log.txt" 
       Directory="TARGETDIR" 
       Impersonate="no" 
       Return="asyncNoWait" /> 

<InstallExecuteSequence> 
    <Custom Action="CopyLog" OnExit="success" /> 
</InstallExecuteSequence> 

注意,這將不適用於C:驅動器根目錄,因爲這需要管理權限。如果您確定缺少更多日誌,可以將OnExit='success'更改爲After='InstallFinalize',並將CustomAction上的Execute屬性更改爲commit。這應該允許它以管理員身份運行。

多一點看到這個討論:http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Setting-MsiLogFileLocation-property-td7374335.html

+0

我如何從%TEMP%複製日誌到磁盤C:和修改C盤上他們的名字,我有兩個日誌(第二個是* _action.log) – Anton23

+0

那麼,在'WixShellExecTarget'中,您可以將該值設置爲'複製[MsiLogFileLocation] c:\ installer.log'或類似的東西。但是這幾乎肯定會需要管理權限(即您的安裝程序以管理員身份運行)。 –

+0

當我設置屬性:我收到錯誤:'WixShellExecTarget'屬性的值包含'[MsiLogFileLocation]'非法提及另一物業。如果此值是一個字符串文字,而不是屬性引用,請忽略此警告。要使用另一個屬性的值設置屬性,請使用具有屬性和值屬性的CustomAction – Anton23