使用IIS Express后,站点在几秒钟后停止工作

本文关键字:几秒 停止工作 Express IIS 站点 使用 | 更新日期: 2023-09-27 18:05:39

我必须从WPF应用程序启动IIS Express。我可以启动IISExpress,在网站上浏览几秒钟。然后当我点击任何链接时,它都不会加载。然后,如果我关闭WPF应用程序,网页立即响应。我的代码:

private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
   StartSite();
}
public void StartSite()
{
    string path = @"C:'Program Files'IIS Express'iisexpress.exe";
    string args = @"/path:C:'Sites /port:9090 /systray:true";
   if (!File.Exists(path))
      throw new FileNotFoundException();
   var process = Process.Start(new ProcessStartInfo()
   {
     FileName = path,
     Arguments = args,
     RedirectStandardOutput = true,
     UseShellExecute = false,
     CreateNoWindow = true
   });
}

有没有人猜测为什么网站只工作了几秒钟,然后在关闭启动iisexpress的应用程序后又会工作?

编辑

我注意到,当我在"调试"中构建时,它发生了,但当我在"发布"中构建时,问题没有发生。

使用IIS Express后,站点在几秒钟后停止工作

我通过创建IIS启动器(控制台应用程序)解决了这个问题。我给这个应用程序传递一些参数,它启动IISExpress然后停止。现在,在我的WPF应用程序中,我不是为IISExpress创建进程,而是为我的启动器创建进程。这个控制台应用程序还通过退出代码将进程id返回给WPF。

class Program
{
    static void Main(string[] args)
    {
        if (args == null)
            Environment.Exit(-1);
        string exeIIS = args[0];
        string websitePath = args[1];
        string port = args[2];
        string argsIIS = MakeIISExpressArgs(websitePath, port);
        int processID = LaunchIISExpress(argsIIS, exeIIS);
        Environment.Exit(processID);
    }
    private static int LaunchIISExpress(string argsIIS, string pathExeIIS)
    {
        var process = Process.Start(new ProcessStartInfo()
        {
            FileName = pathExeIIS,
            Arguments = argsIIS,
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = true
        });
        return process.Id;
    }
    private static string MakeIISExpressArgs(string websitePath, string port)
    {
        var argsIIS = new StringBuilder();
        argsIIS.Append(@"/path:" + websitePath);
        argsIIS.Append(@" /Port:" + port);
        return argsIIS.ToString();
    }
}