我正在探索 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/