簡體   English   中英

使用 Wix# 構建 MSI 的遞歸 DirFiles

[英]Recursive DirFiles to build MSI using Wix#

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

據我所知,沒有內置的機制來獲取所有子目錄,但您可以遞歸遍歷樹,並將每個條目DirFilesDirFiles

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)));

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

請參閱“發布文件夾”WixSharp 示例

這個問題也在問題 #439 - 列出帶有通配符和嵌套 DirFiles 的目錄中得到解決

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM