Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 使用父程序或批处理中的环境变量值进行Inno设置(不是注册表中的全局变量)_Batch File_Environment Variables_Inno Setup - Fatal编程技术网

Batch file 使用父程序或批处理中的环境变量值进行Inno设置(不是注册表中的全局变量)

Batch file 使用父程序或批处理中的环境变量值进行Inno设置(不是注册表中的全局变量),batch-file,environment-variables,inno-setup,Batch File,Environment Variables,Inno Setup,摘要: 我正在开发的程序不是安装程序的传统用途,它将是一个标准的可执行程序,但Inno Setup是我唯一拥有的工具,到目前为止,我已经使它适合各种用途 当前试用版-删除使用环境变量(PROG\u USER)定位的特定文件。这一部分很好。最初,如果在Windows中设置变量,应用程序工作正常。我让它先验证变量的设置。如果是,则允许用户继续 问题: 但问题是。我运行了许多测试环境,每个环境都会设置运行中应用程序的变量,通常我从该程序启动的任何程序都会继承这些变量。但到目前为止,Inno安装程序始终

摘要:
我正在开发的程序不是安装程序的传统用途,它将是一个标准的可执行程序,但Inno Setup是我唯一拥有的工具,到目前为止,我已经使它适合各种用途

当前试用版-删除使用环境变量(
PROG\u USER
)定位的特定文件。这一部分很好。最初,如果在Windows中设置变量,应用程序工作正常。我让它先验证变量的设置。如果是,则允许用户继续

问题:
但问题是。我运行了许多测试环境,每个环境都会设置运行中应用程序的变量,通常我从该程序启动的任何程序都会继承这些变量。但到目前为止,Inno安装程序始终尝试解析注册表。有没有办法收集当前会话变量

一个简单的测试是在设置变量后从批处理或命令提示符执行程序,例如
SET PROG\u USER=c:\testing\version2\USER\u files

然后启动可执行文件,每次它都让我知道变量没有设置,即使我运行
set
我可以看到这个会话确实有这个值。就像我说的,也许这太过分了,但我已经看到了一些很好的答案,我希望能找到一个答案


更新: 我想使用变量,但不是注册表中的变量。 e、 g.
PROG_USER=USER1
(在注册表中) 但是我将从中启动安装程序的应用程序设置了
PROG\u USER=USER20

我的代码如下:

程序初始化;
变量
MsgResult:整数;
程序:字符串;
开始
PROG:=GetEnv('PROG_USER');
如果PROG“”那么
开始
MsgResult:=
MsgBox('PROG#u USER Path='+PROG+#13#10+'是否仍要继续?',
MB信息,MB_YESNO);
如果MsgResult=idies,则
开始
{用户按“是”执行程序的其余部分}
结束
其他的
如果MsgResult=IDNO,则
开始
中止
结束
结束
其他的
开始
MsgBox('未设置PROG_用户变量,此进程现在将退出!',
MB信息,MB_OK);
中止
结束;
结束;
如果您希望检查和/或使用Windows全局设置的环境变量(正如您所知,Windows将这些变量存储在注册表中,这似乎是Inno安装程序的位置),则可以使用此代码

我想要另一个应用程序使用的当前变量。我从另一个程序启动我的“设置”,而不是双击它


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

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

您有两个选择:

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

    PrivilegesRequired=lowest
    
    然后安装程序将像普通程序一样运行,继承父进程的环境

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


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

您有两个选择:

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

    PrivilegesRequired=lowest
    
    然后安装程序将像普通程序一样运行,继承父进程的环境

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