我需要从我的.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