gpt4 book ai didi

c# - 使用 Wix# 构建 MSI 的递归 DirFiles

转载 作者:行者123 更新时间:2023-12-03 23:51:12 25 4
gpt4 key购买 nike

我正在探索 Wix# 的功能,与 Wix 相比,我对它的简单性感到震惊。我们已经在使用 QT 安装程序框架,但我们的客户也需要 MSI 安装包。

我已经有一个包含我们产品的所有文件的目录,并且只有一个包。我试图在 C:\Temp\MyProductFiles 中包含所有文件进入我的 MSI 安装程序。

using System;
using WixSharp;

class Script
{
static public void Main(string[] args)
{
Compiler.WixLocation= @"C:\WiX-3.7\binaries";
var project = new Project("MyProduct",
new Dir(@"C:\Temp\MyProduct",
new DirFiles(@"C:\Temp\MyProductFiles\*.*")
)
);
project.UI = WUI.WixUI_Common;

Compiler.BuildMsi(project);
}
}

安装程序基本上按预期工作,但不幸的是 C:\Temp\MyProductFiles包含许多子目录,我不想每次都明确说明,因为我们有几个产品。

有没有一种简单的方法可以使用 Wix# 自动包含所有文件和子目录?

也许使用 C# 也可以做到,但我不精通 C#,我真的不知道如何开始。

最佳答案

据我所知,没有内置的机制来获取所有子目录,但您可以递归遍历树,并将每个条目投影到 DirFiles 中。

IEnumerable<string> GetSubdirectories(string root)
{
string[] subdirectories = Directory.GetDirectories(root);
foreach (var subdirectory in subdirectories)
{
yield return subdirectory;
foreach (var nestedDirectory in GetSubdirectories(subdirectory))
{
yield return nestedDirectory;
}
}
}

投影可以输出成 DirFiles的数组使用强制通配符模式:
DirFiles[] dirFiles = GetSubdirectories(rootPath).Select(d => new DirFiles(Path.Combine(d, "*.*"))).ToArray();

然后,这只是传递它的问题:
var project = new Project("MyProduct", new Dir(@"C:\Temp\MyProduct", dirFiles)));

关于c# - 使用 Wix# 构建 MSI 的递归 DirFiles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57555120/

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