要点:
我正在进行的程序不是传统安装程序的使用,而且实际上是标准的可执行程序,但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不会。
答案 0 :(得分:0)
当安装程序提升为管理员权限时,它将在不同的上下文中运行,因此它不会继承父进程环境。
您有两种选择:
如果安装程序不需要管理员权限,请设置
PrivilegesRequired=lowest
然后安装程序将作为正常程序运行,继承父进程的环境。
如果安装程序确实需要管理员权限,请立即运行具有管理员权限的父进程。然后父进程和安装程序将使用相同的上下文,也将继承环境。