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

问题描述

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

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

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

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

解决方法

要在运行时设置安装目录,您可以使用 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 和有关 wix# 事件 here 的文档。

,

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