我正在尝试将字符串从 vb.net 传递到命令提示符窗口中。最后,我想使用 runas 并使用之前登录应用程序时提供的密码作为密码。基本上我想运行runas命令,然后在窗口中输入密码(或以某种方式将其提供给cmd(
Public Sub runCmd(ByVal pass As String, ByVal command As String, ByVal arguments As String, ByVal permanent As Boolean)
Dim p As Process = New Process()
Dim pi As ProcessStartInfo = New ProcessStartInfo()
pi.Arguments = " " + If(permanent = True, "/K", "/C") + " " + command + " " + arguments
pi.FileName = "cmd.exe"
pi.Verb = "runas"
p.StartInfo = pi
p.Start()
End Sub
这是我收到目录错误的更新代码
Public Sub runCmd(ByVal pass As String, ByVal user As String, ByVal domainName As String, ByVal command As String, ByVal arguments As String, ByVal permanent As Boolean)
Dim p As Process = New Process()
Dim pi As ProcessStartInfo = New ProcessStartInfo()
pi.Arguments = " " + If(permanent = True, "/K", "/C") + " " + command + " " + arguments
pi.FileName = "cmd.exe"
pi.Verb = "runas"
pi.UserName = user
pi.Domain = domainName
pi.Password = getSecureString(pass)
p.StartInfo = pi
pi.UseShellExecute = False
p.Start()
End Sub
无法同时使用不同的用户帐户启动具有提升权限的Process
。因此,我根据是否可以从批处理文件中获取用户的UAC提示?修改了您的runCmd
函数。动态创建一个脚本,其中包含要使用提升的权限运行的命令。然后,使用 Process
在所需的用户帐户下运行该脚本。
Public Sub runCmd(ByVal password As String, ByVal user As String, ByVal domain As String, ByVal command As String, ByVal permanent As Boolean)
' Create script with desired command to run under elevated prompt.
Dim persist As String = If(permanent, "/K ", "/C ")
File.WriteAllText(
"runCmd.js",
$"ShA=new ActiveXObject(""Shell.Application"")" & vbCrLf &
$"ShA.ShellExecute(""cmd.exe"",""{persist} {command}"","""",""runas"",5);")
' Run script as domainuser with password.
Dim p As Process = New Process()
Dim pi As ProcessStartInfo = New ProcessStartInfo()
pi.Arguments = "runCmd.js"
pi.FileName = "wscript.exe"
pi.UserName = user
pi.Domain = domain
pi.Password = GetSecureString(password)
p.StartInfo = pi
pi.UseShellExecute = False
p.Start()
End Sub
其中GetSecureString()
函数定义如下。
Public Function GetSecureString(ByVal str As String) As SecureString
Dim secureString As SecureString = New SecureString
For Each ch As Char In str
secureString.AppendChar(ch)
Next
secureString.MakeReadOnly()
Return secureString
End Function
例如,您可以调用:
runCmd("password", "user", "domain", "dir", True)
你将获得 UAC 提示符,将打开一个命令窗口,运行dir
命令,命令窗口将保持打开状态。
您可以通过查看 ShellExecute 和 wscript 提供的不同选项来进一步自定义您的解决方案。