VB。使用Vb程序更改注册表值

时间:2013-10-10 20:14:27

标签: vb.net registry

这是注册表项的样子:

A1="OS Ver";A2="Patch Ver";A3="Location Number" ...

我的脚本将获取例如“A3”值的位置编号,并将其传递给我正在尝试编写的VB程序。 VB程序读取输入,确定A3是否存在并更改值。

以下是VB代码的片段:

模块主要 Public Sub Set_A3(声明字符串) 打开注册表 的GetValue 如果A3存在,则输入A3 =“位置编号” Registry.Close 结束子

Sub Main() 将行声明为String 的ReadLine 如果行包含输入调用函数 结束子

我遇到的问题是来自程序运行正常的命令。但是,只要我将其合并到脚本中,它就会挂起读取所有其他条目。

问题,当程序在获取位置编号之前从脚本出现特殊字符然后停止时,如何调用readline函数?

任何其他方法来接近整个事情?? !!

我希望我能很好地描述这个问题。如有任何问题,请询问。真的很感激帮助。

Ken White的请求代码:

Imports System.Data.OleDb
Imports System.Net.NetworkInformation
Imports Microsoft.Win32

Module Main
Public Sub Set_A3(ByVal A3 As String)
        Try
            If A3 <> "" Then
                Dim sConfig As String
                Dim regKey As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\SS\Location\Variables", True)
                sConfig = regKey.GetValue("VariableGroups")
                Dim sConfigNew As String = ""
                Dim s() As String = sConfig.Split(";")
                For i As Integer = 0 To s.Count - 1
                    If s(i).Contains("A3") Then
                        s(i) = String.Format("A3={1}{0}{1}", AU, Chr(34))
                    End If
                    If s(i).Contains("A4") Then
                        s(i) = String.Format("A4={1}{0}{1}", "New Configuration", Chr(44))
                    End If
                Next
                Dim bFirst As Boolean = True
                For Each stmp As String In s
                    If bFirst Then
                        sConfigNew = stmp
                        bFirst = False
                    Else
                        sConfigNew = String.Format("{0};{1}", sConfigNew, stmp)
                    End If
                Next
                regKey.SetValue("VariableGroups", sConfigNew)
                regKey.Close()
            Else
                Console.WriteLine("No Location Number Input")
            End If
        Catch ex As Exception
            Console.WriteLine(String.Format("RegSet Error: {0}", ex.Message))
        End Try
    End Sub
    Sub Main()
        Try
            Dim line As String
            line = Console.ReadLine()
            If line IsNot Nothing And line.Contains("-a3") Then
                Set_A3(Environment.GetCommandLineArgs(2).ToString())
                line = Console.ReadLine()
                If line.Contains("True") Then
                Exit
                End If
            End If
        Catch ex As Exception
        End Try
    End Sub

End Module

那么在上面编码的程序被调用之后会发生什么,readline会在到达'-a3'之前通过所有其他输入,因此它只会坐在那里。然而,如果我只是通过带有此参数'-a3 12345'的cmd调用.exe文件,它将在注册表中填充A3字段。

希望这会有所帮助。请帮忙。我非常感谢任何建议/意见。

1 个答案:

答案 0 :(得分:0)

这应该大致按照你的需要做。根据你的伪代码,我很难理解。您将需要根据需要对其进行一些修改。我的猜测是你想用你的“输入”取代newStr。

    Dim str As String
    Dim reg As RegistryKey
    Dim pos As Integer
    Dim posEnd As Integer
    Dim strFinal As String
    Dim strLook As String = "A3="""

    Dim newStr As String = "Replaced With This"

    reg = Registry.LocalMachine.OpenSubKey("software\test", True)
    str = reg.GetValue("test")

    If str <> String.Empty Then
        pos = str.IndexOf(strLook, 0)
        If pos <> 0 Then
            posEnd = str.IndexOf("""", pos + strLook.Length + 1)
            strFinal = str.Substring(0, pos + strLook.Length) & newStr & str.Substring(posEnd, str.Length - posEnd)
            reg.SetValue("test", strFinal)
            reg.Close()
        End If
    End If