gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:49:00 34 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”目录附加到路径中。

不幸的是,当您第二次安装时,这会重复发生,这也应该被修复。一个 Check 参数和一个用 Pascal 脚本编码的函数可以用来检查路径是否确实需要扩展:

[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/12519099/

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