0

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()

ありがとう。

4

1 に答える 1

0

クラス ProcessStartInfo には、スクリプトを実行するユーザー名を定義するために使用できる 2 つのプロパティがあります。

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()  
于 2012-06-27T20:15:41.060 に答える