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?

Debugging a vbscript from C#

调试器是处理运行时错误的工具。因此,它不能用于检查编译时的错误。

不幸的是,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#中启动脚本,您将使事情变得复杂。