在运行时以 wix sharp 提供安装目录位置

Provide the Installation directory location at runtime in wix sharp

我正在使用 wix sharp 开发我的安装程序并且一切正常,除了我无法在 运行 时间提供安装目录位置。在安装时,我从用户那里获取输入并将它们作为“InstallFolder”存储在环境变量中,并且在 wix sharp 代码中我从环境变量中获取它。

 var installLocation = Environment.GetEnvironmentVariable("installLocation", 
 EnvironmentVariableTarget.User);
 var XYZ_project = new ManagedProject("xyz_Product",
 new Dir(installLocation,new Files(@"xxx\yyy\*.*"))

理想情况下,它应该从 env 变量中获取 instalLocation,但它不会在 运行 时间获取它。如果我在构建安装程序本身之前设置此值,它就会采用该值。

我需要在 运行 时间从用户那里获取值并设置它们。请对此提出建议。

我看到您正在获取用户上下文中的环境变量。您是否尝试过将上下文设置为 Machine or Process?执行实际安装的 installExecuteSequence 在 System 的上下文中运行。我猜这可能会为您解决这个问题。

要在运行时设置安装目录,您可以使用ManagedProject.Load事件。

在项目声明中设置根目录 ID(示例中的“DIR1”)并订阅 Load 事件。

  var project =
        new ManagedProject("MyProduct",
            new Dir(new Id("DIR1"), "root1", new File("test.exe")));

    project.Load += Project_Load;

在事件处理程序中设置目录的值

static void Project_Load(SetupEventArgs e)
{
    e.Session["DIR1"] = 
Environment.GetEnvironmentVariable("installLocation", 
 EnvironmentVariableTarget.User);
    }

Project_Load 将在安装前在客户端计算机上调用,但在收集完所有用户输入之后。

查看完整示例 here and documentation about wix# event here