VB.Net如何在代码中向Path env变量追加dir

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

我想为我的应用程序的用户提供一种简单的方法来更新应用程序所需的环境变量。 一般来说,我在获取和设置环境变量方面没有问题,这一切都是可行的

问题是,当我更新Path环境变量时,其中的所有变量名都将丢失。例如,当我读取条目%JAVA\u 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
这段代码解析一个列表框,该列表框包含路径变量的条目,并在到达字符串末尾时将其添加到字符串中。如果字符串不在该列表框中,则继续将其添加到路径变量中

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变量,而不丢失其当前内容

按照上面Jimmi的建议,直接从注册表读取和更新Path环境变量。这是代码。此版本允许我读取条目而不扩展内部变量,如果用户选择,还可以使用环境变量保存值

lstPathList是一个列表框,其中已经包含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()。我会尽快尝试的。谢谢吉米。