Luaのos.execute
(ちょっと下にある)と違い、.NETアプリケーションからシェルコマンドを実行する必要があります。しかし、大雑把な検索では何も見つかりませんでした。どうすればいいのですか?.NETアプリケーションからシェルコマンドを実行
5
A
答えて
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);
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();
コンソールウィンドウの作成や入力や出力のリダイレクトなど、必要なものを処理するための追加パラメータがあります。
6
スクリプトにしばらく時間がかかる場合は、非同期のアプローチを検討してください。
これは、標準出力をフォームに表示するためにキャプチャするようにリダイレクトするコードです(WPF、Windows Formsなど)。
私はLuaのスクリプトをステートメする必要が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";
}
+0
+1バックグラウンドワーカーを適切に使用し、スレッド全体をブロックしない場合は+1。はるかに優れたユーザーエクスペリエンス! – ppumkin
関連する問題
- 1. Foxxアプリケーションからシェルコマンドを実行する
- 2. Mac/MacRubyアプリケーションからシェルコマンドを実行するには?
- 3. UEFIアプリケーション内部からUEFIシェルコマンドを実行します。
- 4. .NETアプリケーションからログインスクリプトを実行する
- 5. VxWorks 6.9 RTPアプリケーションでシェルコマンドを実行
- 6. pythonスクリプト(RaspberryPi)からシェルコマンドを実行
- 7. Javaからシェルコマンドを実行する
- 8. Scalaからシェルコマンドを実行するREPL
- 9. MySQLストアドプロシージャからシェルコマンドを実行
- 10. コマンドラインからDjangoシェルコマンドを実行する
- 11. 実行中の.NETアプリケーションC++から
- 12. アプリからのシェルコマンドの実行[ルーテッド]
- 13. 実行シェルコマンド
- 14. RealBasic:シェルコマンドを実行
- 15. .NET 2アプリケーション内で.NET 4アプリケーションを実行できますか?
- 16. VBA実行のシェルコマンド
- 17. makefile.am内でシェルコマンドを実行
- 18. 変数でシェルコマンドを実行
- 19. シェルコマンドを実行する(c)
- 20. Jenkins - ワイルドカードでシェルコマンドを実行
- 21. 共有から.Net 4.0 Winformアプリケーションを実行する(UNCパス)
- 22. .netフレームワーク4.0アプリケーションをUSBドライブから実行する
- 23. .netコアコンソールアプリケーションからASP.NETコアWebアプリケーションを実行する
- 24. .NETアプリケーションから "sudo su tomcat"を実行する方法
- 25. コードシグナルなしでファイル共有から.NETアプリケーションを実行する
- 26. MySQLクライアントからシェルコマンドを実行しますか?
- 27. .netクライアントプロファイルをインストールせずに.netアプリケーションを実行しますか?
- 28. 出力をバッファリングせずにNode.jsからシェルコマンドを実行する
- 29. perlからシェルコマンドを実行して対話を許可する
- 30. 異なるプラットフォーム上のJavaコードからadbシェルコマンドを実行
... – RCIX
@RCIX:私はそれが良いに見えるコンソールウィンドウを作成しないように、あなたは、ユーザー入力を必要としないと仮定していることに注意してくださいどのようにあなたは今それをやりましたか?手動で私が意味する方法。 –
、つまりコンソールコマンドに 'blah.lua somearg anotherarg thirdarg'を置くことです。 – RCIX