1

コマンドプロンプトからこれを実行すると、正常に動作します。

psexec \ServerName cscript.exe iisapp.vbs /a AppName /r

C# コンソール アプリで同じことをしようとしています。私は以下のコードを使用していますが、ほとんどの場合、アプリケーションがハングして完了しません。数回はエラー コードがスローされます。私はこれを間違っていますか?エラーまたはエラーコードを検索できる場所を知っている人はいますか?

static void RecycleAppPool(string sServer)
{
    Console.Clear();
    ProcessStartInfo p = new ProcessStartInfo("psexec.exe", "\\\\" + sServer + " cscript.exe iisapp.vbs /a <AppName> /r");
    p.RedirectStandardInput = true;
    p.UseShellExecute = false;
    Process.Start(p);
}

エラーで完了すると、このようになります

「cscript.exe はエラー コード -2147024664 で終了しました」

編集

以下のコードはうまく機能します

static void RecycleAppPool(string sServer)
{
    Console.Clear();
    ProcessStartInfo p = new ProcessStartInfo("psexec.exe");
    p.Arguments = @"\\" + sServer + @" cscript.exe iisapp.vbs /a AppName /r";
    p.UseShellExecute = false;
    Process.Start(p);
}
4

4 に答える 4

0

VS2003 / 8/10:[ツール]->[エラールックアップ]。エラーコードを16進数で貼り付けます。800700E8。「パイプが閉まっている」です。あまり役に立ちません-リダイレクトに関するいくつかの問題だと思います。

あなたは本当にProcessStartInfoパラメーターを持っていますか、それとも実際のアプリ名を置き換えるために使用されていますか?

于 2010-12-21T22:50:34.983 に答える
0

iisapp.vbs の代わりにappcmdを使用してリサイクルを試みましたか?

そして、このスレッドでは、WMI を使用してリモート アプリケーション プールをリサイクルしました。

于 2010-12-21T23:22:33.317 に答える
0

IIS7 の場合は、C# から Web 管理名前空間を使用できます。

using System;
using System.Xml.Serialization;
using Microsoft.Web.Administration;
using System.Linq;
using System.Runtime.InteropServices;

///...

var serverManager = ServerManager.OpenRemote(@"\\myiisserver");
var appPool = serverManager.ApplicationPools["my app pool name"];
appPool.Recycle();

Web Admin Namespaceの詳細については、こちらをご覧ください。これまでのところ、私たちにとって非常にうまく機能しています。ただし、クライアントとリモート マシンにインストールする必要があります。

于 2010-12-21T23:45:53.227 に答える