Try Dim process As New Process() process.StartInfo.FileName = "cmd.exe " process.StartInfo.Verb = "runas" process.StartInfo.UseShellExecute = False process.StartInfo.RedirectStandardInput = True process.StartInfo.RedirectStandardOutput = True process.StartInfo.RedirectStandardError = True process.StartInfo.CreateNoWindow = True process.Start() process.StandardInput.WriteLine("route add 8.31.99.141 mask 255.255.255.255 " & cmdorder) process.StandardInput.WriteLine("exit") Dim input As String = process.StandardOutput.ReadToEnd process.Close() Dim regex As Regex = New Regex("(ok)+",RegexOptions.IgnoreCase) ' wa requested ' txtLog.AppendText(input) Return regex.IsMatch(input)
谢谢.
您可以使用Process.Start()来启动提升的进程,但仅当您使用UseShellExecute = true时:
Dim process As New Process() process.StartInfo.FileName = "cmd.exe " process.StartInfo.Verb = "runas" process.StartInfo.UseShellExecute = True process.Start()
原因是,如果要启动提升的进程,则必须使用ShellExecute.只有ShellExecute知道如何提升.
如果指定UseShellExecute = False,则使用CreateProcess而不是ShellExecute. CreateProcess不知道如何提升.为什么? From the AppCompat guy:
Well,CreateProcess is really low in the layers. What can you do without the ability to create a process? Not a whole lot. Elevation,however,is a different story. It requires a trip to the app elevation service. This then calls into consent.exe,which has to know how to read group policy and,if necessary,switch to the secure desktop and pop open a window and ask the user for permission / credentials,etc. We don’t even need to take all of these features,let’s just take the dialog Box.
Now,for creating a process that requires elevation,normally you just switch up APIs. The shell sits in a much higher layer,and consequently is able to take a dependency on elevation. So,you’d just swap out your call to CreateProcess with a call to ShellExecute.
这样就解释了如何提升cmd,但是一旦你这样做了:你不允许重定向输出或隐藏窗口; as only CreateProcess
can do that:
Redirecting I/O and hiding the window can only work if the process is started by CreateProcess().
这是一个很长的说法,这家伙问same question over here;但没有让某人关闭你的问题的侮辱.
Note: Any code is released into the public domain. No attribution required.