0

我正在使用 wix sharp 来开发我的安装程序,并且一切正常,除了我无法在运行时提供安装目录位置。在安装时,我从用户那里获取输入并将它们作为“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,但它不会在运行时获取它。如果我在构建安装程序本身之前设置了这个值,它就会取值。

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

4

2 回答 2

2

要在运行时设置安装目录,可以使用ManagedProject.Loadevent.

在项目声明中设置根目录 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在安装之前在客户端机器上调用,但在收集所有用户输入之后。

在此处查看完整示例和有关 wix# 事件文档。

于 2021-05-23T11:02:51.607 回答
0

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

于 2021-05-21T00:58:42.023 回答