我有 1 个 c# 控制台 appln,它使用 Process.Start() 方法执行任何脚本文件。我提供脚本文件路径。Process1.StartInfo.FileName
我的脚本文件可以是任何类型(.vbs,ps1 等)。我还使用指令将字符串传递给脚本p.StartInfo.Arguments
。当脚本文件执行时,它应该将字符串返回给 c# 应用程序。这个返回的字符串可以通过设置读取Process1.StartInfo.RedirectStandardOutput = true
,但是使用这个指令我需要设置Process1.StartInfo.UseShellExecute = false
。当我运行这个我得到错误为“指定的可执行文件不是有效的 Win32 应用程序”。我认为这可能是因为,当我设置时Process1.StartInfo.UseShellExecute = false
,我的 appln 不知道要使用哪个 .exe 来执行脚本文件。
另一方面,如果我提供 exe 路径StartInfo.FileName
和脚本文件路径,StartInfo.Argument
那么我不会出错。例如:我想执行 powershell 脚本并将以下属性设置为P1.StartInfo.FileName = "location of powershell.exe"
and p1.startInfo.Argument =".ps1 script file path"
,在这种情况下我没有收到错误。
问题是我事先不知道,我要执行哪种类型的脚本。也无法找到 .exe 文件的位置,以便在不同的不同 m/c 上执行脚本文件。那么是否可以从相同的常见 c# appln 执行不同类型的脚本文件并读取脚本返回的输出?
这是我的代码
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Collections;
namespace process_csharp
{
class Program
{
static void Main(string[] args)
{
String path = null;
//this will read script file path
path = Console.ReadLine();
//this string is passed as argument to script
string s = "xyz";
Process p = new Process();
p.StartInfo.FileName= path;
p.StartInfo.Arguments = s;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.Start();
p.BeginOutputReadLine();
Console.WriteLine(p.StandardOutput.ReadToEnd());
}
}
}