web-dev-qa-db-ja.com

IISExpressサーバーを起動/停止するにはどうすればよいですか?

Iisexpressを含むMS Visual Web Developer 2010をインストールしました。

この前に、PHPアプリケーション用にxamppサーバーをインストールしていました。

Xamppを起動できるようにiisを停止するにはどうすればよいですか?同じポートを使用しているようです。これらは変更される可能性があると思いますが、他のプログラムに干渉したくはありません。それ以上に、これはよりシンプルにすべきだと思います。

ありがとう!

43
Michael

閉会IIS Express

既定では、Visual Studioは、画面の右下にあるシステムトレイの時計にIISExpressアイコンを配置します。右クリックして、終了を選択できます。アイコンが表示されない場合は、小さな矢印をクリックして、システムトレイにアイコンの完全なリストを表示してみてください。

IIS Express icon

次に、右クリックして[終了]を選択します。

enter image description here


ポートを変更する

別のオプションは、プロジェクトのプロパティを変更してポートを変更することです。ソリューションのWebプロジェクトごとにこれを行う必要があります。

  1. Visual Studio>ソリューションエクスプローラー
  2. Webプロジェクトを右クリックし、[プロパティ]を選択します
  3. [Web]タブに移動します
  4. [サーバー]セクションで、[プロジェクトURL]ボックスのポートを変更します
  5. ソリューション内のWebプロジェクトごとに繰り返します

Changing the IIS Express port


他のすべてが失敗した場合

それでもうまくいかない場合は、タスクマネージャーを起動してIIS Express System Tray(32ビット)プロセスとIIS Express Worker Process (32ビット)。

Terminating the IIS Express Worker Thread process

それでも機能しない場合は、ni5ni6が指摘したように、ポート80で「Web Deployment Agent Service」が実行されています。この記事を使用して、どのプロセスがそれを使用しているかを追跡し、オフにします。

https://sites.google.com/site/anashkb/port-80-in-use

76
msigman

Msigmanによる優れた回答。 windows 10に追加したいのは、_Visual Studio_プロセスの下にIIS Express System Tray (32 bit)プロセスがあります:

enter image description here

5
AlbertK

私は同じ問題に出くわしました。私の目的は、Windows 7 HomeでOracleを使用してPHPスクリプトをテストすることです。IIS7Expressをインストールしたとは思わず、Apacheをより単純なアプローチと見なしました。 IIS expressの機能を個別に検討します。

課題は、IIS7 Expressをインストールした後、ApacheインストールがIIS expressの2番目のフィドルを演奏し、Microsoftホームページを表示することでした。

ポート80の問題を次の方法で解決しました。

  1. Microsoft WedMatrixの停止:-net stop was/y
  2. Apacheサーバーを再起動しました
  3. Apacheがポートでリッスンしていたことを確認します:-netstat -anop
  4. ブラウザのキャッシュをクリアする-FirefoxおよびIE
  5. ローカルホストの実行
1
James

これは、IISExpressのStart()、Stop()、およびIsStarted()を実装する静的クラスです。ハードコードされた静的プロパティによってパラメータ化され、コマンドライン引数を介してIISExpressに呼び出し情報を渡します。 NugetパッケージMissingLinq.Linq2Managementを使用します。これは、System.Diagnostics.Processから欠落している情報、具体的には、IISExpressプロセスの複数のインスタンスを明確にするために使用できるコマンドライン引数を提供します。プロセスID。 System.Diagnostics.Processだけで同じことを達成する方法があると思いますが、寿命は短いです。楽しい。

using System.Diagnostics;
using System.IO;
using System.Threading;
using MissingLinq.Linq2Management.Context;
using MissingLinq.Linq2Management.Model.CIMv2;

public static class IisExpress
{
  #region Parameters
  public static string SiteFolder = @"C:\temp\UE_Soln_7\Spc.Frm.Imp";
  public static uint Port = 3001;
  public static int ProcessStateChangeDelay = 10 * 1000;
  public static string IisExpressExe = @"C:\Program Files (x86)\IIS Express\iisexpress.exe";
  #endregion

  public static void Start()
  {
    Process.Start(InvocationInfo);
    Thread.Sleep(ProcessStateChangeDelay);
  }
  public static void Stop()
  {
    var p = GetWin32Process();
    if (p == null) return;

    var pp = Process.GetProcessById((int)p.ProcessId);
    if (pp == null) return;

    pp.Kill();
    Thread.Sleep(ProcessStateChangeDelay);
  }
  public static bool IsStarted()
  {
    var p = GetWin32Process();
    return p != null;
  }

  static readonly string ProcessName = Path.GetFileName(IisExpressExe);
  static string Quote(string value) { return "\"" + value.Trim() + "\""; }
  static string CmdLine =
    string.Format(
      @"/path:{0} /port:{1}",
      Quote(SiteFolder),
      Port
      );
  static readonly ProcessStartInfo InvocationInfo =
    new ProcessStartInfo()
      {
        FileName = IisExpressExe,
        Arguments = CmdLine,
        WorkingDirectory = SiteFolder,
        CreateNoWindow = false,
        UseShellExecute = true,
        WindowStyle = ProcessWindowStyle.Minimized
      };
  static Win32Process GetWin32Process()
  {
    //the linq over ManagementObjectContext implementation is simplistic so we do foreach instead
    using (var mo = new ManagementObjectContext())
      foreach (var p in mo.CIMv2.Win32Processes)
        if (p.Name == ProcessName && p.CommandLine.Contains(CmdLine))
          return p;
    return null;
  }
}
0
George