我需要從我的.NET應用程序執行一個shell命令,與Lua中的os.execute
(該頁面上的一點點)沒有什麼不同。但是,通過粗略搜索,我找不到任何東西。我該怎麼做?從.NET應用程序執行一個shell命令
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,無論如何)。請注意,我假設你並不需要用戶輸入,所以它不創建控制檯窗口,它看起來更好:
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
正確使用後臺工作人員並且不會阻塞整個線程。更好的用戶體驗! – ppumkin 2013-02-10 16:06:42
相關問題
- 1. 從C程序執行shell命令
- 2. 從Perl腳本執行.net命令行應用程序
- 3. 如何從應用程序執行shell命令
- 4. 從Foxx應用程序執行shell命令
- 5. 從Django應用程序/項目執行shell命令
- 6. 從命令行執行Django Shell命令
- 7. 從python執行shell命令
- 8. 從Java執行shell命令
- 9. 從ruby執行shell命令
- 10. 執行應用程序後運行shell腳本命令
- 11. 執行命令shell從PHP遠程
- 12. 從java執行多個命令shell
- 13. 執行命令行應用程序
- 14. 在我的Android應用程序中執行adb shell命令
- 15. 在VxWorks 6.9 RTP應用程序中執行shell命令
- 16. 命令執行shell
- 17. 執行shell命令
- 18. Shell命令執行
- 19. Groovy執行一個git shell命令
- 20. m4 - 執行一個shell命令
- 21. 從用戶輸入獲取shell命令並執行C程序
- 22. 使用線程執行shell命令C++
- 23. 執行我執行shell命令的程序後,Shell沒有響應第一個輸入字符
- 24. 從popen執行命令shell並設置其他命令shell
- 25. 從命令行開發運行.net核心應用程序
- 26. 運行程序多次使用一個行shell命令
- 27. 從應用程序運行shell命令[Rooted]
- 28. 從UEFI應用程序內運行UEFI shell命令
- 29. 如何從Mac/MacRuby應用程序運行shell命令?
- 30. 運行shell命令從Android應用程序複製文件
我需要一個EXECUT LUA腳本... – RCIX 2009-11-30 02:15:54
@RCIX:如何你現在做了嗎?我的意思是手動方式。 – 2009-11-30 02:17:01
即在控制檯命令中放置'blah.lua somearg anotherarg thirdarg'。 – RCIX 2009-11-30 02:17:03