【问题标题】:Recursive DirFiles to build MSI using Wix#使用 Wix 构建 MSI 的递归 DirFiles#
【发布时间】:2019-08-19 10:41:13
【问题描述】:

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

【问题讨论】:

标签: c# wix windows-installer wixsharp


【解决方案1】:

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

【讨论】:

  • 非常感谢。添加适当的using 指令后,它就可以工作了。
【解决方案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\*.*")

见"Release Folder" WixSharp Sample

Issue #439 - List directories with wilcards and nested DirFiles也解决了这个问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 2018-06-21
    • 2014-11-16
    • 2015-04-12
    相关资源
    最近更新 更多