在 WiXSharp 中创建动态安装目录

Creating a dynamic install directory in WiXSharp

我的目录有问题,我希望我的 InstallDir 成为我的顶级父目录,并且任何其他 Dir 都包含在此文件夹结构中。我已经尝试了多种方法,但似乎无法解决,但我的目标是能够使用 installDirDialog 更改安装位置。保持不变的目录可以正确安装,但如果我要更改安装位置,它只会构建新的文件夹结构并将文件安装到默认位置。我知道为什么它安装到这个位置,因为它引用了一个静态字符串,我只使用下面的例子来简化我遇到的问题。

string dirs = @"%ProgramFiles%\My Company\My Product";
var project = new ManagedProject("MyProduct",
   new InstallDir(dirs),        
   new Dir(dirs + @"\DataAPI",
       new Files(@"E:\Temp\installertemp\DataAPI\*.*"))); 

另一种方法是使用 MSI 属性 并将其设置为安装路径。

public class General
    {
        public static string Product = "PRODUCT";
        public static string InstallLocation = "INSTALLDIRECTORY";
    }

在setup.cs string dirs = General.InstallLocation;

然后我在安装对话框中设置 属性。 MsiRuntime.Session[General.InstallLocation] = installDir.Text;

这也不起作用,只传递了 INSTALLDIRECTORY 作为路径。

在浪费了无数个小时之后,解决方案实际上非常简单,Wixsharp 的好心人向我解释清楚了。

只需移动 instalDir 的结束括号即可包含任何子目录及其文件。

 new InstallDir(dirs,        
   new Dir("DataAPI",
       new Files(@"E:\Temp\installertemp\DataAPI\*.*")));