2016-09-02 5 views
1

WPFアプリケーションからIIS Expressを起動する必要があります。私はIISExpressとブラウザをWebサイトで数秒間起動することができます。それから私はリンクをクリックしてもロードされません。 WPFアプリケーションを閉じると、Webページがすぐに応答します。私のコード:IIS Expressで数秒でサイトが機能しなくなる

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を起動したアプリケーションを閉じた後、再び動作しますなぜ任意の推測?

編集

私は、「デバッグ」で構築したときにそれが起こることがわかり、私は「リリース」で構築する際に問題が発生しません。

+0

最初にIIS Expressは、あなたのアプリケーションにバンドルするためのものではありません。次に、WinDbgなどのデバッガをプロセスにアタッチすると、プロセスが終了する理由を簡単に確認できます。トレースを有効にして起動して、それ以上の情報を取得することもできます。 –

答えて

0

IIS Launcher(コンソールアプリケーション)を作成して問題を解決しました。私はこのアプリケーションにいくつかの引数を渡し、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(); 
    } 

} 
関連する問題