VB.Net如何在代码中向Path env变量追加dir
我想为我的应用程序的用户提供一种简单的方法来更新应用程序所需的环境变量。 一般来说,我在获取和设置环境变量方面没有问题,这一切都是可行的 问题是,当我更新Path环境变量时,其中的所有变量名都将丢失。例如,当我读取条目%JAVA\u HOME%\bin时,它会被扩展为完整路径,因此我无法像扩展之前那样将其写回 我已尝试将变量设置为%PATH%;myaddedpath。这在shell中工作,但在代码中它会将%PATH%写入环境变量VB.Net如何在代码中向Path env变量追加dir,vb.net,path,environment-variables,Vb.net,Path,Environment Variables,我想为我的应用程序的用户提供一种简单的方法来更新应用程序所需的环境变量。 一般来说,我在获取和设置环境变量方面没有问题,这一切都是可行的 问题是,当我更新Path环境变量时,其中的所有变量名都将丢失。例如,当我读取条目%JAVA\u HOME%\bin时,它会被扩展为完整路径,因此我无法像扩展之前那样将其写回 我已尝试将变量设置为%PATH%;myaddedpath。这在shell中工作,但在代码中它会将%PATH%写入环境变量 Private Sub AddStringtoPath(value
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
这段代码解析一个列表框,该列表框包含路径变量的条目,并在到达字符串末尾时将其添加到字符串中。如果字符串不在该列表框中,则继续将其添加到路径变量中
Private Sub AddStringtoPath(value As String)
Dim lPathVar As String = ""
Dim Status As Integer = MsgBox("Modifying environment variables can cause side effects. Are you sure?", vbOKCancel)
If Status = vbOK Then
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
lPathVar = lPathVar.Substring(1, lPathVar.Length - 1)
lPathVar = lPathVar + ";" + value
Dim regKey As Microsoft.Win32.RegistryKey
regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(
"System\CurrentControlSet\Control\Session Manager\Environment",
True)
regKey.SetValue("Path", lPathVar)
RefreshFormData()
End If
End Sub
就目前的情况而言,它可以正确地将现有行写入Path变量,并添加我的新条目,但路径中的变量已消失。
这是一个问题,因为如果用户更改路径中引用的环境变量的内容,代码将无法再找到正确的位置
有没有办法:
- 在不展开内部变量的情况下获取Path环境变量
- 附加到现有Path变量,而不丢失其当前内容
Private Sub AddStringtoPath(value As String)
Dim lPathVar As String = ""
Dim Status As Integer = MsgBox("Modifying environment variables can cause side effects. Are you sure?", vbOKCancel)
If Status = vbOK Then
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
lPathVar = lPathVar.Substring(1, lPathVar.Length - 1)
lPathVar = lPathVar + ";" + value
Dim regKey As Microsoft.Win32.RegistryKey
regKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(
"System\CurrentControlSet\Control\Session Manager\Environment",
True)
regKey.SetValue("Path", lPathVar)
RefreshFormData()
End If
End Sub
您是否考虑过使用存储路径?可能会提供一些额外的信息,这会有所帮助。您必须检查注册表并获取/设置
路径
值。使用.OpenSubKey()。我会尽快尝试的。谢谢吉米。