这是注册表项的样子:
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字段。
希望这会有所帮助。请帮忙。我非常感谢任何建议/意见。
答案 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