簡體   English   中英

在WiX中安裝期間創建臨時文件夾

[英]Creating a temporary folder during installation in WiX

在WiX中,如何在目標計算機上創建臨時隱藏文件夾(如IS中的SUPPORTDIR),在安裝過程中以及如何向其中添加文件,存儲在二進制表中,然后在安裝完成后立即刪除它威克斯?

感謝任何幫助。

謝謝。

這是一個示例解決方案,擴展我在自己的評論中引用的想法

簡而言之,您不必通過向二進制表添加額外文件來使解決方案復雜化,在自定義操作中提取它們並在之后刪除。 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負責將文件提取到適當的位置,以使其可用於自定義操作代碼,並在作業完成后進行清理。

希望此概述有助於理解其工作方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM