【发布时间】:2011-03-09 16:21:15
【问题描述】:
我有一个生成 Process 的 asp.net mvc 应用程序,如下所示:
Process p = new Process();
p.EnableRaisingEvents = true;
p.Exited += new EventHandler(p_Exited);
p.StartInfo.Arguments = "-interaction=nonstopmode " + inputpath;
p.StartInfo.WorkingDirectory = dir;
p.StartInfo.UseShellExecute = false;
p.StartInfo.FileName = "pdflatex.exe";
p.StartInfo.LoadUserProfile = true;
p.Start();
p.WaitForExit();
在继续之前,我需要知道pdflatex.exe 是托管代码还是本机代码?
编辑 1
我需要考虑这一点,因为:(希望我没有错……)
- 每个 Asp.net 应用程序都在单独/隔离的 AppDomain 中运行,而不是在单独/隔离的进程中。
- 本机可执行文件不能存在于 AppDomain 中。
待续……
简而言之,我希望我的网站不会为每个请求生成一个新进程。因为进程比应用程序域更昂贵。
编辑 2
我的 asp.net mvc 应用程序允许用户提交 LaTeX 输入命令,例如 $ax^2+bx+c=0$ 以转换为呈现二次方程的 pdf 文件。在幕后,这个 Web 应用程序将生成一个执行 pdflatex.exe 的进程。 pdflatex.exe 的工作是将 LaTeX 输入命令转换为 pdf 文档。
【问题讨论】:
-
如果非托管程序承载 .NET Framework 会怎样?您认为这是托管的还是非托管的?
-
@bdonlan、@wj32、@Sanjeevakumar、@Felice:请看我的更新。
-
如果你使用
Process.Start(),猜猜是否启动了一个新进程?您不能在 asp.net AppDomain 中运行另一个可执行文件。 -
@Recycle Bin,你需要告诉你的实际问题——你想通过启动 exe 来做什么?它的简单数学 - 您显示的代码将始终在每次调用时启动新进程。如果每个请求调用它 3 次,则每个请求将启动三个进程。是否可以跨请求使用相同的进程取决于该进程应该执行的任务、它是如何实现的、它是否支持任何 IPC 机制等。