【问题标题】:VB.Net - execute vbscript using process with 'run as administrator'VB.Net - 使用“以管理员身份运行”的进程执行 vbscript
【发布时间】:2012-06-27 19:43:40
【问题描述】:

我有一个要在我的 vb.net 应用程序中运行的 vbscript 文件。在应用程序中,脚本“必须”使用进程。原因是它实际上是从 Windows 进程中调用的。为了让我手动执行 vbscript,我必须右键单击快捷方式并选择“以管理员身份运行”。

如何使用 vb.net 进行模拟?目前执行有效,因为我只用它创建了一个文本文件对其进行了测试。另外,我想假设用户在管理员组中,并且不希望他们每次都必须登录,因为它将每分钟执行一次。

我的代码:

Dim foo As New System.Diagnostics.Process
foo.StartInfo.WorkingDirectory = "c:\"
foo.StartInfo.RedirectStandardOutput = True
foo.StartInfo.FileName = "cmd.exe"
foo.StartInfo.Arguments = "%comspec% /C cscript.exe //B //Nologo C:\aaa\test.vbs"
foo.StartInfo.UseShellExecute = False
foo.StartInfo.CreateNoWindow = True
foo.Start()
foo.WaitForExit()
foo.Dispose()

谢谢。

【问题讨论】:

  • 对不起,我尝试过两次使用“代码”功能。它在预览窗格中正确显示,但在我发布时却没有显示!??
  • 在“My code:”和“Dim...”之间放置一个换行符/回车符,以使代码正确显示。我会自己做,但编辑太小了。

标签: vb.net process vbscript


【解决方案1】:

ProcessStartInfo 类有两个属性,可用于定义运行脚本的用户名

ProcessStartInfo.UserName
ProcessStartInfo.Password

请注意来自 MSDN: The WorkingDirectory property must be set if UserName and Password are provided. If the property is not set, the default working directory is %SYSTEMROOT%\system32.

Password 属性是 SecureString 类型。这个类需要这样一个特殊的初始化代码:

  ' Of course doing this will render the secure string totally 'insecure'
  Dim pass As String = "Password"
  Dim passString As SecureString = New SecureString()
  For Each c As Char In pass
     passString.AppendChar(ch)
  Next   

所以你的代码可以这样改变

Dim foo As New System.Diagnostics.Process   
foo.StartInfo.WorkingDirectory = "c:\"   
foo.StartInfo.RedirectStandardOutput = True   
foo.StartInfo.FileName = "cmd.exe"   
foo.StartInfo.Arguments = "%comspec% /C cscript.exe //B //Nologo C:\aaa\test.vbs"   
foo.StartInfo.UseShellExecute = False   
foo.StartInfo.CreateNoWindow = True   
foo.StartInfo.UserName = "administrator"
foo.StartInfo.Password = passString
foo.Start()   
foo.WaitForExit()   
foo.Dispose()  

【讨论】:

  • 嗨,伙计。为回归而欢呼。我确实看过但不认为它会达到我所需要的(对不起,我应该说),这就是为什么......如果用户更改密码会发生什么?我不想指定用户名或密码。就像我现在手动运行时一样。我可以右键单击并选择“以管理员身份运行”,在此处不会提示我输入任何凭据。这可能吗?
  • 不,我认为这是不可能的。如果您想以其他用户身份运行某些内容,则需要使用用户名和密码登录。但是,如果更改密码是您的问题,请在程序开始时询问用户,并在启动 vb.script 的程序的生命周期内将其保存在内存中(作为 SecureString)。跨度>
  • 大家好。好的。谢谢你的帮助:)
猜你喜欢
  • 1970-01-01
  • 2014-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多