这是我的代码尝试使用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)
Run Code Online (Sandbox Code Playgroud)
谢谢.
Ian*_*oyd 11
你无法达到你想要的效果.
您可以使用它Process.Start()来启动提升的流程,但前提是UseShellExecute = true:
Dim process As New Process()
process.StartInfo.FileName = "cmd.exe "
process.StartInfo.Verb = "runas"
process.StartInfo.UseShellExecute = True
process.Start()
Run Code Online (Sandbox Code Playgroud)
原因是,如果要启动升级过程,则必须使用ShellExecute.只ShellExecute知道如何提升.
如果您指定UseShellExecute = False,则CreateProcess使用而不是ShellExecute.CreateProcess不知道如何提升.为什么?来自AppCompat的家伙:
好吧,CreateProcess在层中确实很低.没有创建流程的能力,你能做什么?不是很多.然而,海拔是一个不同的故事.它需要访问应用程序提升服务.这然后调用consent.exe,它必须知道如何读取组策略,并在必要时切换到安全桌面并弹出一个窗口并询问用户是否有权限/凭据等.我们甚至不需要获取所有这些功能,让我们只需要对话框.
现在,为了创建需要提升的流程,通常只需切换API即可.shell位于更高的层中,因此能够依赖于高程.因此,您只需调用ShellExecute就可以调用CreateProcess.
这样就解释了如何提升cmd,但是一旦你做了:你不允许重定向输出或隐藏窗口; 只能CreateProcess这样做:
重定向I/O并隐藏窗口只能在CreateProcess()启动进程时才能工作.
这是一个很长的路要说这个人在这里问了同样的问题 ; 但没有让某人关闭你的问题的侮辱.
注意:任何代码都将发布到公共域中.无需归属.
| 归档时间: |
|
| 查看次数: |
20347 次 |
| 最近记录: |