私は1つのc#コンソールapplnを持っています、それはProcess.Start()メソッドを使用して任意のスクリプトファイルを実行します。スクリプトファイルのパスを指定しProcess1.StartInfo.FileName
ます。スクリプトファイルは任意のタイプ(.vbs、ps1など)にすることができます。また、命令を使用して文字列をスクリプトに渡しますp.StartInfo.Arguments
。スクリプトファイルが実行されると、文字列をc#アプリケーションに再実行する必要があります。この返された文字列は、を設定することで読み取ることができますがProcess1.StartInfo.RedirectStandardOutput = true
、この命令を使用するには、を設定する必要がありますProcess1.StartInfo.UseShellExecute = false
。このimを実行すると、「指定された実行可能ファイルは有効なWin32アプリケーションではありません」というエラーが発生します。Process1.StartInfo.UseShellExecute = false
これは、設定したときに、スクリプトファイルの実行に使用する.exeがアプリにわからないことが原因である可能性があります。
一方、exeパスStartInfo.FileName
とスクリプトファイルパスを指定するとStartInfo.Argument
、エラーが発生しません。例:PowerShellスクリプトを実行したいのですが、次のプロパティをP1.StartInfo.FileName = "location of powershell.exe"
ととして設定p1.startInfo.Argument =".ps1 script file path"
しました。この場合、エラーは発生しません。
問題は、どのタイプのスクリプトを実行するのかを事前に知らないことです。また、異なる異なるm/cでスクリプトファイルを実行するための.exeファイルの場所を見つけることができません。それで、同じ共通の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());
}
}
}