在維克斯,創建一個臨時文件夾如何在目標計算機上創建一個臨時隱藏文件夾(像SUPPORTDIR在IS),在安裝過程中,如何將文件添加到它,存儲在二進制表,然後在wix中完成安裝後刪除它?安裝過程中維克斯
感謝任何幫助。
謝謝。
在維克斯,創建一個臨時文件夾如何在目標計算機上創建一個臨時隱藏文件夾(像SUPPORTDIR在IS),在安裝過程中,如何將文件添加到它,存儲在二進制表,然後在wix中完成安裝後刪除它?安裝過程中維克斯
感謝任何幫助。
謝謝。
這是一個擴展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注意將文件提取到正確的位置以使其可用於自定義操作代碼,並在作業完成後進行清理。
希望這個概述有助於理解它的工作方式。
由於某些原因,Windows Installer有時會更改其臨時文件夾,因此此解決方案不起作用。 –
此評論可能有幫助:http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Extract-Binary-file-from-MSI-to-Temp-folder-using-C -td7588682.html#a7588730 –
也是這樣的: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可能有助於理解。 –
@Yan:謝謝你的迴應。我已經閱讀過。但我不知道如何處理C#DTF。 – sam