Inno Setup使用来自父程序或批处理的环境变量值(不是来自注册表的全局)

时间:2016-05-25 22:26:09

标签: batch-file environment-variables inno-setup

要点:
我正在进行的程序不是传统安装程序的使用,而且实际上是标准的可执行程序,但Inno Setup是我唯一拥有的工具,到目前为止我已经使它适合各种用途。

当前试用 - 删除使用环境变量(PROG_USER)定位的特定文件。这部分很好,如果在Windows中设置变量,应用程序可以正常工作。我首先验证变量是否已设置。如果是这样,它允许用户继续。

问题:
但这是问题所在。我运行了许多测试环境,每个测试环境都从正在运行的应用程序中设置变量,通常我从该程序启动的任何程但到目前为止,Inno Setup总是试图解决注册表问题。有没有办法收集当前的会话变量?

一个简单的测试是在设置变量之后从批处理或命令提示符执行程序。 SET PROG_USER=c:\testing\version2\user_files

然后启动可执行文件,每次它让我知道变量未设置,即使我运行SET我可以看到此会话确实具有该值。就像我说的那样,这可能是一段时间,但我已经看到了一些很好的答案,我希望能找到一个。

更新: 我想使用变量而不是注册表中的变量。 例如PROG_USER=USER1(在注册表中) 但是我将从中启动安装程序的应用程序已设置PROG_USER=USER20

我的代码是这样的:

procedure InitializeWizard;
var
  MsgResult: Integer;
  PROG: string;
begin
  PROG := GetEnv('PROG_USER');

  if PROG <> '' then
  begin
    MsgResult := MsgBox('PROG_USER Path = ' + PROG +  #13#10 +'Do you wish to still proceed?', mbInformation, MB_YESNO)
    if MsgResult = IDYES then
    begin
      // user pressed Yes do rest of program
    end
      else
    if MsgResult = IDNO then
    begin
      Abort;
    end
  end
    else
  begin
    MsgBox('PROG_USER variable is not set, this process will now exit!',mbInformation, MB_OK);

    Abort;
  end;      
end;

如果您想要检查和/或使用Windows全局设置的环境变量(如您所知,Windows将这些存储在Inno安装程序所在的注册表中,那么此代码就可以了吗?)

我想要其他应用程序使用的当前变量。我正在推出我的&#34;设置&#34;从另一个程序,而不是双击它。

正如我所提到的,这可以通过调用setup.exe的简单批处理文件来模拟。通常,任何以这种方式调用的程序都将继承该批处理(或程序)中设置的变量,但我的Inno Setup不会。

1 个答案:

答案 0 :(得分:0)

当安装程序提升为管理员权限时,它将在不同的上下文中运行,因此它不会继承父进程环境。

您有两种选择:

  • 如果安装程序不需要管理员权限,请设置

    PrivilegesRequired=lowest
    

    然后安装程序将作为正常程序运行,继承父进程的环境。

  • 如果安装程序确实需要管理员权限,请立即运行具有管理员权限的父进程。然后父进程和安装程序将使用相同的上下文,也将继承环境。