C# 使用WiX Sharp创建WiX Msi

C# 使用WiX Sharp创建WiX Msi,c#,wix,windows-installer,wixsharp,C#,Wix,Windows Installer,Wixsharp,用于创建msi的我的WiX Sharp程序: static public void BuildMsi(string FolderPath) { string InstallationDirectoryPath = @"D:\Program"; var project = new Project("MyProduct", new Dir(InstallationDirectoryPath,

用于创建msi的我的WiX Sharp程序:

static public void BuildMsi(string FolderPath)
{
    string InstallationDirectoryPath = @"D:\Program";
    var project = new Project("MyProduct",
                      new Dir(InstallationDirectoryPath,
                          new Files(System.IO.Path.Combine(FolderPath,"**"))));

    Compiler.BuildMsi(project);
}
在这段代码中,如果我传递了我想要释放的文件夹路径,那么它将创建一个工作正常的msi

我的问题是我想传递多个文件夹路径,所以我的主要函数看起来是这样的,但我无法确定在代码中间需要更改什么


静态public void BuildMsi(list folderPath)

您可以尝试类似的方法,但代码并不完美。。 它将获得包含文件的主目录和包含文件的所有子目录

static string sRootDir = @"<Path of main directory>";


static public void BuildMsi(string FolderPath)
{
    WixEntity[] weDir = new WixEntity[0];
        weDir = BuildDirInfo(sRootDir, weDir);
        var project = new Project("MyProduct", weDir);

    Compiler.BuildMsi(project);
}


static WixEntity[] BuildDirInfo(string sRootDir, WixEntity[] weDir)
        {
            DirectoryInfo RootDirInfo = new DirectoryInfo(sRootDir);
            if (RootDirInfo.Exists)
            {
                DirectoryInfo[] DirInfo = RootDirInfo.GetDirectories();
                List<string> lMainDirs = new List<string>();
                foreach (DirectoryInfo DirInfoSub in DirInfo)
                    lMainDirs.Add(DirInfoSub.FullName);
                int cnt = lMainDirs.Count;
                weDir = new WixEntity[cnt + 1];
                if (cnt == 0)
                    weDir[0] = new DirFiles(RootDirInfo.FullName + @"\*.*");
                else
                {
                    weDir[cnt] = new DirFiles(RootDirInfo.FullName + @"\*.*");
                    for (int i = 0; i < cnt; i++)
                    {
                        DirectoryInfo RootSubDirInfo = new DirectoryInfo(lMainDirs[i]);
                        if (!RootSubDirInfo.Exists)
                            continue;
                        WixEntity[] weSubDir = new WixEntity[0];
                        weSubDir = BuildDirInfo(RootSubDirInfo.FullName, weSubDir);
                        weDir[i] = new Dir(RootSubDirInfo.Name, weSubDir);
                    }
                }
            }
            return weDir;
        }
静态字符串sRootDir=@; 静态公共void BuildMsi(字符串FolderPath) { WixEntity[]weDir=新WixEntity[0]; weDir=BuildDirInfo(sRootDir,weDir); var项目=新项目(“我的产品”,weDir); 编译器.BuildMsi(项目); } 静态WixEntity[]BuildDirInfo(字符串sRootDir,WixEntity[]weDir) { DirectoryInfo RootDirInfo=新的DirectoryInfo(sRootDir); if(RootDirInfo.Exists) { DirectoryInfo[]DirInfo=RootDirInfo.GetDirectories(); List lMainDirs=新列表(); foreach(DirInfo中的DirectoryInfo DirInfoSub) lMainDirs.Add(DirInfoSub.FullName); int cnt=lMainDirs.Count; weDir=新的WixEntity[cnt+1]; 如果(cnt==0) weDir[0]=新的目录文件(RootDirInfo.FullName+@“\*.*); 其他的 { weDir[cnt]=新的目录文件(RootDirInfo.FullName+@“\*.*); 对于(int i=0;i哪个库提供项目、目录和文件?这是伪代码吗?我相信您正在尝试使用WiXSharp。@ChristopherPaint是的,我正在使用WiXSharp并提供Dir-pathWiXSharp是一个新颖的概念,但我真的不认为这是一个好的实践。恐怕我没有兴趣用它来回答你的问题。老实说,我不确定其他人也会这么做。