【发布时间】:2017-08-30 08:59:14
【问题描述】:
我有一个运行良好的 .net C# Winforms 项目。
我想做的是创建一个执行 VB 脚本的进程。我已经使用以下代码实现了这一点:
string ScriptName = "myScript.vbs";
Process ScriptProcess = new Process();
ScriptProcess.StartInfo.FileName = @ScriptName;
ScriptProcess.StartInfo.WorkingDirectory = @"C:\scripts\";
ScriptProcess.StartInfo.Arguments = string.Format("\"{0}\" \"{1}\"","Arg1","Arg2");
ScriptProcess.Start();
ScriptProcess.WaitForExit();
ScriptProcess.Close();
参数被传递给“myScript.vbs”并进行处理。但是我想操纵例如我的 c# Winform 中的一个标签,用于使用此 vbs 脚本显示结果。因此,我需要以某种方式将控制权传递给它。
我该怎么做?
我还没有找到解决方案,希望您能给我提示。
【问题讨论】:
-
您不能将引用传递给控件,但您可以使 vb 脚本返回一个值并将其分配给调用应用程序中的控件。或使用任何其他的进程间通信方式,甚至是临时文件、命名管道等,简单的方法见重复。
-
这意味着我必须在 C# 代码中处理返回值。这意味着我必须涵盖所有可能返回的情况。这可能是一个非常大的数字。我不想交换 ascii 文件。我计划传递控件/或其句柄,以便 VB 脚本可以自己操作它。在返回值方面,使用 WScript 和 CScript 也有区别。
-
您不必在 C# 中涵盖任何情况或进行任何“计算”。无论您计划在 从 VBScript 控件上显示什么,只需将其写入标准输出,然后从 C# 读取输出并将其显示在控件上。 您是否检查了@Smartis 发布的链接中的答案?
-
是的,我阅读了 Smartis 提供的链接。我已经添加了 outputWriter 和 errorWriter。我创建了一个测试vbs,现在看起来像这样:
Dim Arg, var1, var2Set Arg = WScript.Argumentsvar1 = Arg(0)var2 = Arg(1)if var2 = 2 thenDO STUFFWScript.StdOut.Write "RETURNVAL"set Arg = Nothing使用建议的WScript.StdOut(见提到链接)我收到一条错误消息,说“无效句柄”,因为只有 cscript.exe 支持此命令。 WScript 没有。我还尝试使用 csript.exe 来执行 vbs。没有出现错误但没有输出 (std,error)。 -
@SUM - 这是一个不同的问题。使用程序外部的 CScript.exe 调试 VBScript 并首先使其正常工作。让你打算执行的命令行完全确定,然后将 taht 添加回你的 C# 程序中。
标签: c# winforms vbscript controls