[英]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#,我真的不知道如何開始。
據我所知,沒有內置的機制來獲取所有子目錄,但您可以遞歸遍歷樹,並將每個條目DirFiles
到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)));
要包含所有文件和子目錄,請使用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\*.*")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.