2014-01-24 99 views
3

在維克斯,創建一個臨時文件夾如何在目標計算機上創建一個臨時隱藏文件夾(像SUPPORTDIR在IS),在安裝過程中,如何將文件添加到它,存儲在二進制表,然後在wix中完成安裝後刪除它?安裝過程中維克斯

感謝任何幫助。

謝謝。

+0

此評論可能有幫助:http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Extract-Binary-file-from-MSI-to-Temp-folder-using-C -td7588682.html#a7588730 –

+0

也是這樣的:http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/SUPPORTDIR-for-WIX-td2389950.html和http://stackoverflow.com/questions/2624603/wix-using-a-temporary-file-install-install可能有助於理解。 –

+0

@Yan:謝謝你的迴應。我已經閱讀過。但我不知道如何處理C#DTF。 – sam

回答

0

這是一個擴展the idea我在自己的評論中引用的樣品溶液。

簡而言之,您不必通過向二進制表中添加額外文件而將解決方案複雜化,然後在自定義操作中提取它們並在之後刪除。 DTF自定義操作的內置機制可爲您提供幫助。

比方說,你有你想要的自定義操作讀取輸出一些信息的安裝日誌文件的XML文件。首先,你應該在VS中創建一個自定義動作項目(文件 - >新建 - >項目...並選擇「C#自定義動作項目」模板)。

然後,添加一個XML文件作爲內容:右鍵單擊解決方案資源管理器中的項目,選擇添加 - >新建項目...並選擇XML文件。我們稱之爲data.xml。內容可能是這樣的:

<?xml version="1.0" encoding="utf-8" ?> 
<settings> 
    <setting name="a" value="one" /> 
    <setting name="b" value="two" /> 
</settings> 

接下來,添加一些代碼來讀取該XML值,並寫一些東西到安裝日誌(請記住,它只是一個樣本):

[CustomAction] 
public static ActionResult ReadXml(Session session) 
{ 
    var doc = XDocument.Load("data.xml"); 
    var settings = from setting in doc.Descendants("setting") 
       select new 
       { 
        Name = setting.Attribute("name").Value, 
        Value = setting.Attribute("value").Value 
       }; 

    foreach (var setting in settings) 
    { 
    session.Log(string.Format("{0} = {1}", setting.Name, setting.Value)); 
    } 

    return ActionResult.Success; 
} 

注我將XML文件引用爲data.xml - 當自定義操作運行時,它會從它運行的同一目錄中找到該文件。

最後,添加自定義操作安裝過程:

<Binary Id="MainBinary" SourceFile="bin\ExtraFiles.CA.dll" /> 
<CustomAction Id="ReadXmlCA" BinaryKey="MainBinary" DllEntry="ReadXml" Execute="deferred" /> 

<InstallExecuteSequence> 
    <Custom Action="ReadXmlCA" After="InstallFiles" /> 
</InstallExecuteSequence> 

現在,建立MSI軟件包並運行安裝方式如下:

msiexec -i SupportDir.msi /l*v install.log 

當包安裝完成後,打開install.log文件並搜索CustomActions.ReadXml。你會看到這樣的事情:

SFXCA: Extracting custom action to temporary directory: C:\Windows\Installer\MSIAB8D.tmp-\ 
SFXCA: Binding to CLR version v4.0.30319 
Calling custom action ExtraFiles!ExtraFiles.CustomActions.ReadXml 
a = one 
b = two 

顯然,自定義操作已完成其工作:它讀取XML文件內容並輸出適當的信息到日誌文件。還有一點需要注意:臨時目錄路徑。嘗試導航到該目錄 - 你會發現它是空的。

這意味着DTF注意將文件提取到正確的位置以使其可用於自定義操作代碼,並在作業完成後進行清理。

希望這個概述有助於理解它的工作方式。

+0

由於某些原因,Windows Installer有時會更改其臨時文件夾,因此此解決方案不起作用。 –