.NET アプリケーションからシェル コマンドを実行する必要があります。これは、 Luaos.execute
の (そのページの少し下にある)とは異なります。しかし、大雑把な検索では何も見つかりませんでした。どうすればいいのですか?
9354 次
3 に答える
9
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "blah.lua arg1 arg2 arg3";
p.StartInfo.UseShellExecute = true;
p.Start();
別の方法は、P/Invokeを使用し、ShellExecute を直接使用することです。
[DllImport("shell32.dll")]
static extern IntPtr ShellExecute(
IntPtr hwnd,
string lpOperation,
string lpFile,
string lpParameters,
string lpDirectory,
ShowCommands nShowCmd);
于 2009-11-30T02:15:15.157 に答える
6
スクリプトに時間がかかる場合は、非同期アプローチを検討することをお勧めします。
これに加えて、標準出力をフォーム ( WPF、Windows Formsなど)に表示するためにキャプチャするようにリダイレクトするコードを次に示します。ユーザー入力は必要ないと仮定しているため、コンソール ウィンドウが作成されないことに注意してください。
BackgroundWorker worker = new BackgroundWorker();
...
// Wire up event in the constructor or wherever is appropriate
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
...
// Then to execute your script
worker.RunWorkerAsync("somearg anotherarg thirdarg");
void worker_DoWork(object sender, DoWorkEventArgs e)
{
StringBuilder result = new StringBuilder();
Process process = new Process();
process.StartInfo.FileName = "blah.lua";
process.StartInfo.Arguments = (string)e.Argument;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.CreateNoWindow = true;
process.Start();
result.Append(process.StandardOutput.ReadToEnd());
process.WaitForExit();
e.Result = result.AppendLine().ToString();
}
void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Result != null) console.Text = e.Result.ToString();
else if (e.Error != null) console.Text = e.Error.ToString();
else if (e.Cancelled) console.Text = "User cancelled process";
}
于 2009-11-30T02:57:00.927 に答える
2
C# でこれを処理する簡単な方法があります。System.Diagnostics 名前空間を使用すると、生成プロセスを処理するクラスがあります。
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = "App.exe";
process.StartInfo.Arguments = "arg1 arg2 arg3";
process.Start();
Console.WriteLine(process.StandardOutput.ReadToEnd();
コンソール ウィンドウを作成しない、入力または出力をリダイレクトするなど、必要なほとんどすべてを処理するための追加のパラメーターがあります。
于 2009-11-30T02:33:44.860 に答える