vb.net – 使用管理员权限运行cmd.exe

这是我的代码尝试使用admin priviligies运行cmd.exe.但是,我得到请求操作需要提升.如果我通过我的Windows运行带有“以管理员身份运行”的cmd.exe,它可以通过vb运行,但事实并非如此.这是我的代码.
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.

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...