gpt4 book ai didi

c# - 在 WiX 中安装期间创建临时文件夹

转载 作者:行者123 更新时间:2023-11-30 18:30:38 32 4
gpt4 key购买 nike

在 WiX 中,如何在安装期间在目标机器上创建一个临时隐藏文件夹(如 IS 中的 SUPPORTDIR)以及如何将文件添加到其中,这些文件存储在二进制表中,然后在安装后删除它是在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 负责将文件提取到正确的位置以使其可用于自定义操作代码,并在工作完成后进行清理。

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

关于c# - 在 WiX 中安装期间创建临时文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21331673/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com