Okay I am trying to use slmgr -dlv to find if kms activation was successful but can't get the output so here is what I got Code: Public Sub checks() Dim attempts As Single = 1 Dim p As New Process() Dim sw As StreamWriter Dim sr As StreamReader Dim err As StreamReader p.StartInfo.UseShellExecute = False p.StartInfo.RedirectStandardInput = True p.StartInfo.RedirectStandardOutput = True p.StartInfo.RedirectStandardError = True p.StartInfo.CreateNoWindow = True p.StartInfo.FileName = Temp & "/system32/cscript.exe" p.StartInfo.Arguments = Temp & "\slmgr.vbs -dli" p.Start() sw = p.StandardInput sr = p.StandardOutput sw.AutoFlush = True Dim cmd = Temp & "\slmgr.vbs -dli" sw.WriteLine(cmd) TextBox1.Text = TextBox1.Text & sr.ReadToEnd() TextBox1.Text += TextBox1.Text & err.ReadToEnd() If InStr(TextBox4.Text, "259200") Then Kill32() Kill64() Delete() TextBox4.Text = "Activation Was Succesful!" Done() Else If attempts = 4 Then MessageBox.Show("Could not activate please go to support") Kill32() Kill64() Delete() Done() End If attempts = attempts + 1 Kmsact() checks() End If End Sub And it always gives me UseShellExecute must be set to False to redirect output... Thanks, Flare4000
Does it work if you use this method as a starting point for modification? I've had success with it earlier. Code: void RunWithRedirect(string cmdPath) { var proc = new Process(); proc.StartInfo.FileName = cmdPath; // set up output redirection proc.StartInfo.RedirectStandardOutput = true; proc.StartInfo.RedirectStandardError = true; proc.EnableRaisingEvents = true; proc.StartInfo.CreateNoWindow = true; // see below for output handler proc.ErrorDataReceived += proc_DataReceived; proc.OutputDataReceived += proc_DataReceived; proc.Start(); proc.BeginErrorReadLine(); proc.BeginOutputReadLine(); proc.WaitForExit(); } void proc_DataReceived(object sender, DataReceivedEventArgs e) { // output will be in string e.Data // modify TextBox.Text here } Source The method demonstrated above takes advantage of event handlers to accomplish its mission. Code: proc.ErrorDataReceived += proc_DataReceived; proc.OutputDataReceived += proc_DataReceived;
Thanks got it to work here is what I had done Code: Public Sub checks() Dim attempts As Single = 0 Dim proc = New Process() proc.StartInfo.FileName = Temp & "/system32/cscript.exe" proc.StartInfo.Arguments = Temp & "\slmgr.vbs -dli" ' set up output redirection proc.StartInfo.RedirectStandardOutput = True proc.StartInfo.RedirectStandardError = True proc.EnableRaisingEvents = True proc.StartInfo.CreateNoWindow = True proc.StartInfo.UseShellExecute = False ' see below for output handler AddHandler proc.ErrorDataReceived, AddressOf proc_DataReceived AddHandler proc.OutputDataReceived, AddressOf proc_DataReceived proc.Start() proc.BeginErrorReadLine() proc.BeginOutputReadLine() proc.WaitForExit() If InStr(TextBox4.Text, "259200") Then Kill32() Kill64() Delete() TextBox4.Text = "Activation Was Succesful!" Done() Else If attempts = 4 Then MessageBox.Show("Could not activate please go to support") Kill32() Kill64() Delete() Done() End If attempts = attempts + 1 Kmsact() checks() End If End Sub Private Sub proc_DataReceived(ByVal sender As Object, ByVal e As DataReceivedEventArgs) ' output will be in string e.Data ' modify TextBox.Text here TextBox4.Text = TextBox4.Text & e.Data End Sub