1

我制作了一个 WixSharp 64 位安装程序,它应该在“程序文件”下的两个不同目录下安装文件。这是代码的精简版本:

using System;
using WixSharp;
using File = WixSharp.File;

public class Script {

    public static void Main(string[] args) {
       var project =
           new Project("My Product",
               new Dir(@"%ProgramFiles%",
                   new Dir(@"SubDir1", new File(@"Files\test2.txt")),
                   new Dir(@"SubDir2", new File(@"Files\test2.txt"))
               ));

        project.Platform = Platform.x64;
        project.GUID = new Guid("6f330b47-2577-43ad-9095-1861ba25889b");    
        Compiler.BuildMsi(project);
}

}

问题是子目录将在“c:\%ProgramFiles64%\”下创建,而不是在“c:\Program Files\”下。

如果我只安装一个子目录,那么该目录将正确安装到“c:\Program Files”中。

如果我在不将平台指定为 x64 的情况下执行相同操作,则文件将正确位于“c:\Program Files(x86)”下。

我在这里做错了什么?我怎么能在那里得到这两个目录。

我首先怀疑我可能遇到了 Dir 构造函数的错误重载,但是当使用以下代码确保它进入 Dir(string targetPath, params WixEntity[] items) 构造函数时,行为是相同的:

           new Dir(@"%ProgramFiles%",new WixEntity[] {
                new Dir(@"SubDir1", new File(@"Files\test2.txt")),
                new Dir(@"SubDir2", new File(@"Files\test2.txt"))
            }
4

2 回答 2

2

我在 Wix# 项目页面上问了同样的问题,Oleg_s 给出了解决方法并很好地解释了为什么它不起作用。答案在这里:

http://wixsharp.codeplex.com/discussions/648259#post1454338

于 2015-12-03T07:56:23.217 回答
1
string strLocationOne = "InstallDirOne";
string strLocationTwo = "InstallDirTwo";
string strAllDeployFilesLocation = @"E:\files_to_deploy\*.*"
var project = new Project("MyApp",
                            new Dir(@"C:\", 
                            new Dir(strLocationOne, new DirFiles(strAllDeployFilesLocation)),
                            new Dir(strLocationTwo", new DirFiles(strAllDeployFilesLocation))
                            ));
于 2018-07-02T19:38:01.837 回答