微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐