使用 *.reg 文件在 Windows 上定义环境变量

使用 *.reg 文件在 Windows 上定义环境变量

我正在准备一组指令,用于在我们团队的计算机上自动安装某些应用程序,作为该自动化的一部分,我需要添加用户环境变量和系统环境变量。我们正在使用两者Windows XPWindows 7的

我想使用 *.reg 文件来添加这些变量。所以我有几个问题:

以下对于用户环境变量是否正确:

[HKEY_CURRENT_USER\Environment]
"TEST"="ABC"'

以下对于系统环境变量是否正确:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
"TEST2"="XYZ"'

以下两者有何区别:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment]

我想更新 PATH 环境变量,我可以执行以下操作:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
"PATH"="C:\temp\;%PATH%"'

谢谢。

答案1

关于用户和计算机环境位置,您基本上是对的。如果您创建 REG_SZ 类型的值,Windows 将拒绝“扩展”您可能在其中引用的其他环境变量(例如,将“FOO”="%OTHER_VAR%\bar”作为 REG_SZ 将创建一个环境变量 FOO,其值为文字字符串“%OTHER_VAR%\bar”。创建 REG_EXPAND 类型的值将导致 Windows 扩展变量。这是一种奇怪的行为,因为 REG_EXPAND 类型实际上并没有被注册表 API“扩展”。

“CurrentControlSet” 是指向正在使用的 ControlSetXXX 实例的符号链接。如果您使用不同的硬件配置文件启动,您将获得不同的“CurrentControlSet”。如果您熟悉 SYSV *nix,则可以大致认为此机制类似于 inittab 中的不同运行级别。

为了证明“CurrentControlSet”确实是一个符号链接,只需在“HKLM\System\CurrentControlSet”下创建一个新键,然后在“...\ControlSet001”下查找它。你会在那里找到它。

最后,您想通过向 PATH 变量添加内容来执行的操作将不起作用。您不能在同一个键中拥有多个具有相同名称的注册表值。如果您创建一个名为“PATH”的值,那么新的“PATH”将没有“%PATH%”来扩展。向 PATH 附加内容是路径在注册表中存储方式的一个真正缺点。您必须将一个字符串附加到“PATH”值,如果您关心卸载,则需要解析“PATH”变量以在用户卸载时将其撤消。

相关内容