为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Wix 递归 DirFiles 构建 MSI#

使用 Wix 递归 DirFiles 构建 MSI#

C#
九州编程 2023-09-09 17:28:22
我正在探索 Wix# 的功能,与 Wix 相比,我对它的简单性感到惊讶。我们已经在使用 QT Installer Framework,但我们的客户还需要 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#,我真的不知道如何开始。
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

要包含所有文件和子目录,请new Files("@"C:\Temp\MyProductFiles\*.*")使用new DirFiles(@"C:\Temp\MyProductFiles\*.*".


var project =

    new Project("MyProduct",

        new Dir(@"%ProgramFiles%\My Company\My Product",

            new Files(@"..\Release Folder\Release\*.*")

查看完整回答
反对 回复 2023-09-09
?
达令说

TA贡献1821条经验 获得超6个赞

据我所知,没有内置的机制来获取所有子目录,但您可以递归地遍历树,并将每个条目投影到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)));


查看完整回答
反对 回复 2023-09-09
  • 2 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信