-2

这是注册表项的样子:

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

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

下面是一段VB代码:

Module Main Public Sub Set_A3(declare String) Open Registry GetValue 如果 A3 存在更改 A3="Location number" 输入 Registry.Close End Sub

Sub Main() Declare line as String Readline If line contains input call function End Sub

我被卡住的地方是来自像程序正常工作的命令。但是,一旦我将它合并到脚本中,它就会挂起读取所有其他条目。

问题,当程序在获取位置编号之前出现脚本中的特殊字符然后停止时,如何调用 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”之前会遍历所有其他输入,因此它只会坐在那里。然而,如果我只是通过 cmd 使用此参数“-a3 12345”调用 .exe 文件,它将在注册表中很好地填充 A3 字段。

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

4

1 回答 1

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
于 2013-10-10T21:53:24.753 回答