在运行时以 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
将在安装前在客户端计算机上调用,但在收集完所有用户输入之后。
我正在使用 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
将在安装前在客户端计算机上调用,但在收集完所有用户输入之后。