使用C#中的命令提示符参数执行VBS脚本

时间:2013-05-31 15:50:30

标签: c# vbscript process

我有一个需要从C#应用程序执行的.vbs脚本文件。我们通常会通过右键单击它并选择“使用命令提示符打开”来执行vbs文件,这样用户就可以输入参数并且脚本将会起飞。

使用下面的代码我可以执行vbs文件,但它仍然提示输入:

var MyProcess = new Process();
MyProcess.StartInfo.FileName = @"MyVBSScript.vbs";
MyProcess.StartInfo.WorkingDirectory = @"C:\Folder\WhereVBS\FileLives";
MyProcess.StartInfo.Arguments = @"UserArgumentWithoutSpaces";
MyProcess.Start();
MyProcess.WaitForExit();
MyProcess.Close();

我的目标是通过传递参数来绕过提示。我需要在VBS文件中做些什么,或者我的C#代码中的某些内容需要更改吗?

1 个答案:

答案 0 :(得分:1)

我不确定你要传递的args是什么,但请看下面的HelloWorld示例。我在此脚本中的参数是/admin/userCase...Else,以确保在没有args的情况下无法运行脚本。如果您希望该过程稍微隐藏,则命令行将为cscript.exe "C:\Scripts\Hello_with_Args.vbs" /admin,如果您希望用户查看该过程,则wscript.exe "C:\Scripts\Hello_with_Args.vbs" /admin。并使用MyProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;或类似的东西来隐藏命令提示符窗口。希望这会有所帮助。

'Hello_with_Args.vbs
Dim args
Set args = WScript.Arguments
If args.Count > 0 Then
    For i = 0 To args.Count - 1
        Select Case LCase(args.Item(i))
            Case "/admin"
                WScript.Echo "Hello World!!" & vbCrLf & "You passed the /admin arg."
            Case "/user"
                WScript.Echo "Hello World!!" & vbCrLf & "You passed the /user arg."
            Case Else
                WScript.Echo "You can only use the ""/admin"" or ""/user"" command line arg or do not specify an arg."
        End Select
    Next
Else
    Wscript.Echo "Hello World!!" & vbCrLf & "No command line args passed."
End If