Debugging a vbscript from C#
本文关键字:from vbscript Debugging | 更新日期: 2023-09-27 18:23:48
我有以下代码:
Process scriptProc = new Process();
scriptProc.StartInfo.FileName = @"cscript";
scriptProc.StartInfo.WorkingDirectory = @"C:'MyPath'";
scriptProc.StartInfo.Arguments = "filename.vbs //X";
scriptProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
scriptProc.Start();
scriptProc.WaitForExit();
scriptProc.Close();
我的VBS在编辑器(Visual Studio)中打开,该编辑器由//X属性指定,但只有当脚本没有语法错误时才会打开,如果我有脚本错误,则不会在编辑器中打开,这基本上使调试器的使用变得多余。
有没有什么方法可以让我只使用C#调试VBScript?
不幸的是,c|wscript.exe脚本主机没有像Perl的-c(语法检查)那样的选项。如果运行cscript maybebad.vbs
来捕获语法错误会执行完美的关机/格式化我的硬盘/。。。无意中/无意中编写的脚本。你可以用WScript.Quit 1
编写一个Execute(Global)
的脚本——maybebad.vbs的代码已准备好。
有MS ScriptControl可以用来避免炮击;我不确定这是否会简化你的"调试体验"。
下面的代码使用@Ekkehard.Horner方法。编译它,然后将.vbs文件拖放到可执行文件中,以测试文件是否存在语法错误:
using System;
using System.IO;
using System.Reflection;
using System.Windows.Forms;
using System.Runtime.InteropServices;
// Add reference to COM Microsoft Script Control 1.0
// Code works for .Net 2.0 and above
class Program
{
static void Main(string[] args)
{
// Check whether a file was dragged onto executable
if (args.Length != 1)
{
MessageBox.Show("Drag'n'drop .vbs file onto this executable to check syntax");
return;
}
MessageBox.Show("Syntax will be checked for'r'n" + args[0]);
String vbscode = "";
// Read the content of the file
try
{
StreamReader sr = new StreamReader(args[0]);
vbscode = sr.ReadToEnd();
}
catch (Exception e)
{
MessageBox.Show("File reading error " + e.Message);
return;
}
// Add statement raising runtime error -2147483648 in the first line to ScriptControl
int hr = 0;
try
{
vbscode = "Err.Raise &H80000000'r'n" + vbscode;
MSScriptControl.ScriptControl sc = new MSScriptControl.ScriptControl();
sc.Language = "VBScript";
sc.AddCode(vbscode);
}
catch (Exception e)
{
hr = Marshal.GetHRForException(e);
// First line of code executed if no syntax errors only
if (hr == -2147483648)
{
// Run time error -2147483648 shows that execution started without syntax errors
MessageBox.Show("Syntax OK");
}
else
{
// Otherwise there are syntax errors
MessageBox.Show("Syntax error");
}
}
}
}
在回答您的问题时,不,恐怕您无法在C#的调试上下文中调试VBScript。尝试使用以下内容直接调试脚本http://www.vbsedit.com.通过首先在C#中启动脚本,您将使事情变得复杂。