【问题标题】:If my asp.net application spawns a process, does the process runs inside the same application domain in which the asp.net application runs?如果我的 asp.net 应用程序生成一个进程,该进程是否在运行 asp.net 应用程序的同一应用程序域内运行?
【发布时间】:2011-03-09 10:24:36
【问题描述】:

根据我的理解:

  1. IIS 为服务器上的整个 asp.net 应用程序调用单个工作进程。
  2. 工作进程包含一组应用程序域。
  3. 工作进程中的每个应用程序域都对应一个 asp.net 应用程序。

如果我的 asp.net 应用程序为每个请求生成一个进程,该进程是否在运行 asp.net 应用程序的同一个应用程序域内运行?

    Process p = new Process();

    p.EnableRaisingEvents = true;
    p.Exited += new EventHandler(p_Exited);

    p.StartInfo.Arguments = "-fmt=pdflatex -interaction=nonstopmode " + inputpath;
    p.StartInfo.WorkingDirectory = dir;

    p.StartInfo.UseShellExecute = false;
    p.StartInfo.FileName = "pdftex.exe";

    p.StartInfo.LoadUserProfile = true;

    p.Start();
    p.WaitForExit();

【问题讨论】:

标签: c# asp.net iis


【解决方案1】:

简单的答案是否定的。当您启动一个新进程时,会创建一个新的进程空间,它独立于您的应用程序域。生成的进程可能是也可能不是托管代码,并作为独立进程运行。如果定义了适当的设置,它可以继承其创建者的安全上下文。

【讨论】:

  • 除了继承其创建者安全上下文之外,生成的进程是否有可能采用高于创建者的安全访问级别?
  • 不是默认的,但是你可以尝试设置ProcessStartInfo的用户名和密码来冒充创建者。另一种选择是尝试打开 UseShellExecute,它将使用 OS shell 启动进程。
【解决方案2】:

没有。 AppDomain 不能超出其所在进程的边界。
此外,AppDomain 是 .NET 世界的一个概念。如果pdftex.exe 是一个.NET 应用程序,它有自己的AppDomain。如果它不是 .NET 应用程序,则根本没有 AppDomain。

【讨论】:

    猜你喜欢
    • 2011-09-04
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多