2013-10-10 2 views
-2

Это то, что запись реестра выглядит следующим образом:vb. Изменение реестра Значение с Vb программы

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

Мой сценарий будет принимать номер ячейки для экземпляра значения «A3» и передать его на программу VB я нахожусь пытаясь написать. Программа VB считывает ввод, определяет, существует ли A3 и изменяет значение.

Вот фрагмент кода VB:

модуль Main Public Sub Set_A3 (объявить строку) Open Registry ПолучитьЗначение Если A3 существует изменение A3 = "число Location" для ввода Registry.Close End Sub

Sub Main() Declare линии в качестве строки Readline Если строка содержит входной вызов функции End Sub

Где я застрял от команды, как программа отлично работает. Однако, как только я включу его в скрипт, он висит, читая все остальные записи.

Вопрос: как мне вызвать функцию readline, когда программа появляется на специальном символе из сценария, прежде чем получить номер места и затем остановится?

Любые другие способы приблизиться ко всему этому !! !!

Надеюсь, я выполнил задание OK, описывающее проблему. Если у вас есть какие-либо вопросы, пожалуйста, спрашивайте. Поистине оцените помощь.

Код по запросу Кена Уайта:

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» и, таким образом, он будет просто сидеть там. Принимая во внимание, что если я просто вызову файл .exe через cmd с этим параметром '-a3 12345', он заполнит поле A3, которое будет прекрасно записано в реестре.

Надеюсь, это поможет. Пожалуйста помоги. Я очень ценю любые предложения/материалы.

+1

Добро пожаловать в StackOverflow. Отправьте свой фактический код. Очень сложно отлаживать псевдокод; поскольку он не будет работать в любом случае, трудно сказать, почему он «из команды, как программа работает нормально» (???), когда вы «включаете ее в скрипт, она зависает» (???), потому что ни один из них не имеет никакого смысла. Вопросы о коде, который вы написали, должны содержать фактический код и четкое описание проблемы, с которой вы сталкиваетесь; этот вопрос в его текущем состоянии не содержит. –

+0

Кен, большое спасибо за приветствие и разъяснения. Вот код. Пожалуйста, несите меня, когда я изучаю гайки или болты. Я всегда был lurker, это мой первый пост. – user2868634

ответ

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 
+0

Пожалуйста, не отвечайте на такие плохие вопросы, как этот, прежде чем они будут отредактированы. Вы удалили все стимулы, чтобы отредактировать его, и теперь поощряли будущие вопросы низкого качества этим плакатом (и, возможно, другими). Благодарю. –

Смежные вопросы