【发布时间】:2020-11-08 17:57:21
【问题描述】:
我想为我的应用程序的用户提供一种简单的方法来更新应用程序所需的环境变量。 一般来说,我可以毫无问题地获取和设置环境变量,一切正常。
问题是当我更新 Path 环境变量时,其中的所有变量名都丢失了。例如,条目 %JAVA_HOME%\bin 在我读取时会扩展为完整路径,因此我无法将其写回扩展前的状态。
我尝试使用 %PATH%;myaddedpath 设置变量。这在 shell 中有效,但在代码中它实际上将 %PATH% 写入环境变量!
Private Sub AddStringtoPath(value As String)
Dim lPathVar As String
For a As Integer = 0 To lstPathList.Items.Count - 1
If lstPathList.Items(a) = value Then
Exit Sub
Else
lPathVar = lPathVar + ";" + lstPathList.Items(a)
End If
Next
lstPathList.Items.Add(value)
lPathVar = lPathVar.Substring(1, lPathVar.Length - 1)
lPathVar = lPathVar + ";" + value
Environment.SetEnvironmentVariable("Path", lPathVar + value, EnvironmentVariableTarget.Machine)
RefreshFormData()
End Sub
此代码解析一个列表框,其中包含路径变量的条目,将它们添加到字符串中,如果它到达末尾,则字符串尚未存在,因此它继续将其添加到路径变量中。
就目前而言,它可以正确地将现有行写回 Path 变量并添加我的新条目,但 Path 中的变量已经消失。 这是一个问题,因为如果用户更改路径中引用的环境变量的内容,代码将不再找到正确的位置。
有什么办法:
- 在不扩展内部变量的情况下获取 Path 环境变量
- 附加到现有的 Path 变量,而不会丢失其当前内容。
【问题讨论】:
-
您是否考虑过使用My.Settings 来存储路径?也许VB.NET My.Settings deep dive 提供了一些有用的额外信息。
-
您必须通过注册表并获取/设置
PATH值。使用 .OpenSubKey().GetValue("PATH", "", RegistryValueOptions.DoNotExpandEnvironmentNames),变量不会展开。 -
在注册表中设置值听起来很有希望。我会尽快尝试。谢谢吉米。
标签: vb.net path environment-variables