使用 Wix 递归 DirFiles 构建 MSI#

我正在探索 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#,我真的不知道如何开始。


九州编程
浏览 98回答 2
2回答

饮歌长啸

要包含所有文件和子目录,请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\*.*")

达令说

据我所知,没有内置的机制来获取所有子目录,但您可以递归地遍历树,并将每个条目投影到DirFilesIEnumerable<string> GetSubdirectories(string root){&nbsp; &nbsp; string[] subdirectories = Directory.GetDirectories(root);&nbsp; &nbsp; foreach (var subdirectory in subdirectories)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; yield return subdirectory;&nbsp; &nbsp; &nbsp; &nbsp; foreach (var nestedDirectory in GetSubdirectories(subdirectory))&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; yield return nestedDirectory;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}DirFiles投影可以输出到带有强制通配符模式的数组中:DirFiles[] dirFiles = GetSubdirectories(rootPath).Select(d => new DirFiles(Path.Combine(d, "*.*"))).ToArray();然后,只需通过它即可:var project = new Project("MyProduct", new Dir(@"C:\Temp\MyProduct", dirFiles)));
打开App,查看更多内容
随时随地看视频慕课网APP