这是我的代码尝试使用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)
感谢。
答案 0 :(得分: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()
原因是,如果您要启动提升的流程,必须使用ShellExecute
。只有ShellExecute
知道如何提升。
如果您指定UseShellExecute = False
,则使用CreateProcess
而不是ShellExecute
。 CreateProcess
不知道如何提升。为什么? From the AppCompat guy:
嗯,CreateProcess在图层中确实很低。没有创建流程的能力,你能做什么?不是很多。然而,海拔是一个不同的故事。它需要访问应用程序提升服务。这然后调用consent.exe,它必须知道如何读取组策略,并在必要时切换到安全桌面并弹出一个窗口并询问用户是否有权限/凭据等。我们甚至不需要获取所有这些功能,让我们只需要对话框。
现在,要创建一个需要提升的流程,通常只需切换API即可。 shell位于更高的层中,因此能够依赖于高程。所以,你只需要调用ShellExecute来调用CreateProcess。
这样就解释了如何提升cmd
,但是一旦你做了:你不能重定向输出或隐藏窗口; as only CreateProcess
can do that:
重定向I / O并隐藏窗口只有在CreateProcess()启动进程时才能工作。
这是一个很长的说法,这个人问same question over here;但没有让某人关闭你的问题的侮辱。
注意:任何代码都会发布到公共域中。无需归属。
答案 1 :(得分:0)
将其设为对象,然后将其设置为在application.object.settings事件中启动需要admin priv。