如何通过C#动态执行格式化VBScript字符串

时间:2017-03-06 17:42:42

标签: c# vbscript

来自this question的代码可以正常工作,如下所示:

var scriptType = Type.GetTypeFromCLSID(Guid.Parse("0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC"));

dynamic obj = Activator.CreateInstance(scriptType, false);
obj.Language = "vbscript";
var vbscript = @"MsgBox(""Hello"");
obj.Eval(vbscript);

但是,一旦我尝试在脚本中添加另一行,例如:

var vbscript = @"MsgBox(""Hello"")
                 MsgBox(""World"")";

调用obj.Eval(vbsbcript)时出现语法错误:

  

未处理的类型' System.Runtime.InteropServices.COMException'发生在System.Dynamic.dll

中      

其他信息:语法错误

我可以看到vbscript的值包含新行的\r\n次加载:

"MsgBox(\"Hello\")\r\nMsgBox(\"World\")"

我尝试用

声明它
vbscript = "MsgBox(\"Hello\")" +
            Environment.NewLine +
            "MsgBox(\"World\")";

但结果相同。

是否可以运行一些存储在C#中包含多行的字符串的vbscript?如果是这样,怎么能实现呢?

我知道可以通过调用带有.vbs的{​​{1}}文件,但可以直接从progam中的字符串完成,而不必依赖于另一个文件吗?

1 个答案:

答案 0 :(得分:1)

之后

var vbscript = @"MsgBox(""Hello"")
                 MsgBox(""World"")";

尝试添加此

vbscript = vbscript.Replace("\r\n", " & VbCrLf & ");

应该这样做。

来自docs

  

表示与换行符结合的回车符   打印和显示功能的字符。