2010-12-21 3 views
1

이 명령을 내 명령 프롬프트에서 실행하면 정상적으로 작동합니다.서버에 원격으로 psexec 실행 및 응용 프로그램 풀 재활용

psexec에 \ 서버 이름 cscript.exe를 iisapp.vbs가/프로그램 응용 I는 C#을 콘솔 응용 프로그램과 같은 일을 할 노력하고있어

/R. 아래 코드를 사용하고 있지만 대부분의 경우 응용 프로그램이 멈추고 완료되지 않으며 오류 코드가 몇 번 나옵니다. 내가 잘못 했니? 누구든지 오류 또는 오류 코드를 찾을 수있는 위치를 알고 있습니까? 이

이 일

편집

"cscript.exe를가 -2147024664 오류 코드로 종료"와 같은

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); 
     } 

가 오류와 함께 완료 ... 보이는

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); 
} 
+0

RedirectStandardInput 및 UseShellExecute를 주석 처리하면 정상적으로 작동하지만 프로세스의 별도 창을 시작합니다. 가능하다면 모든 것을 하나의 창 (콘솔)에 보관하고 싶습니다. – James

답변

0

VS2003/8/10 : 도구 -> 오류 조회. 16 진수로 오류 코드를 붙여 넣습니다. 800700E8. "파이프가 닫혔습니다." 별로 도움이되지 않습니다 - 리디렉션과 관련된 몇 가지 문제가 있습니다.

ProcessStartInfo 매개 변수에 실제로 포함되어 있습니까? 아니면 실제 응용 프로그램 이름을 대체하는 데 사용하고 있습니까?

+0

앱 이름을 바꿔야했습니다. – James

+0

"RedirectStandardInput"을 지정하지 않고 "UseShellExecute = false"를 유지하면 어떻게됩니까? "psexec.exe"대신 "cmd.exe"를 프로세스로 사용하면 어떻게됩니까? 정확히 어디에서 "cscript.exe가 오류 코드 -2147024664로 종료되었습니다"라는 메시지가 응용 프로그램에서 캡처 한 출력에 나타 납니까? 그렇다면 어떻게 캡처합니까? 리디렉션 된 출력을 처리하는 방법에 문제가있을 수 있습니다. – martona

+0

RedirectStandardInput을 지정하지 않고 UseShellExecute = false로 유지하면 원하는대로 작동합니다. 또한 p.Argument로 문자열 인수를 이동했지만 어떤 차이가 있는지 확신하지 못했습니다. 위의 작업 코드를 내 메인 포스트의 편집본에 넣었습니다. 감사 – James

0

iisapp.vbs 대신 appcmd을 사용하여 재활용을 시도 했습니까?

그리고이 thread에서 WMI를 사용하여 원격 응용 프로그램 풀을 재활용했습니다.

0

는 IIS7을의 경우, 당신은 당신의 C#에서 웹 관리 네임 스페이스 수

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 here에 대해 자세히 알아볼 수 있습니다. 지금까지 우리를 위해 아주 잘 작동했습니다. 그러나 클라이언트와 원격 시스템에 설치해야합니다.

관련 문제