gpt4 book ai didi

environment-variables - 运行 Inno Setup 安装程序时如何修改 PATH 环境变量?

转载 作者:行者123 更新时间:2023-12-03 05:42:11 24 4
gpt4 key购买 nike

Inno Setup 允许您通过 [Registry] 部分设置环境变量(通过设置与环境变量相对应的注册表项)

但是,有时您不仅仅想设置环境变量。通常,您想修改它。例如:安装时,人们可能想向 PATH 环境变量添加/删除目录。

如何从 InnoSetup 中修改 PATH 环境变量?

最佳答案

您提供的注册表项中的路径是 REG_EXPAND_SZ 类型的值。正如 [Registry] 部分的 Inno Setup 文档所述,有一种方法可以将元素附加到这些元素:

On a string, expandsz, or multisz type value, you may use a special constant called {olddata} in this parameter. {olddata} is replaced with the previous data of the registry value. The {olddata} constant can be useful if you need to append a string to an existing value, for example, {olddata};{app}. If the value does not exist or the existing value isn't a string type, the {olddata} constant is silently removed.

因此,可以使用与此类似的注册表部分附加到路径:

[Registry]
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; \
ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};C:\foo"

这会将“C:\foo”目录附加到路径中。

不幸的是,当您第二次安装时,会重复出现这种情况,这也应该得到解决。带有 Pascal 脚本中编码的函数的 Check 参数可用于检查路径是否确实需要扩展:

[Registry]
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; \
ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};C:\foo"; \
Check: NeedsAddPath('C:\foo')

该函数读取原始路径值并检查给定目录是否已包含在其中。为此,它会在前面和后面添加分号字符,这些分号字符用于分隔路径中的目录。考虑到搜索的目录可能是第一个或最后一个元素,分号字符也被前置并附加到原始值:

[Code]

function NeedsAddPath(Param: string): boolean;
var
OrigPath: string;
begin
if not RegQueryStringValue(HKEY_LOCAL_MACHINE,
'SYSTEM\CurrentControlSet\Control\Session Manager\Environment',
'Path', OrigPath)
then begin
Result := True;
exit;
end;
{ look for the path with leading and trailing semicolon }
{ Pos() returns 0 if not found }
Result := Pos(';' + Param + ';', ';' + OrigPath + ';') = 0;
end;

请注意,在将常量作为参数传递给检查函数之前,您可能需要扩展常量,有关详细信息,请参阅文档。

在卸载期间从路径中删除此目录可以以类似的方式完成,并留给读者作为练习。

关于environment-variables - 运行 Inno Setup 安装程序时如何修改 PATH 环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3304463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com