psexec via process通过cmd提供与psexec不同的exitcode

时间:2013-01-09 13:56:06

标签: c# cmd psexec

我目前正在开发一个应用程序,用于检查IIS服务器上是否存在具有特定名称的APP。我使用PsExec来执行此命令。

当我通过命令行对此进行测试时,我注意到当APP不存在时,appcmd以ExitCode 1退出。同样,当APP存在时,它以0退出。

我也想使用这种行为,所以我不需要做输出重定向。我只关心APP是否存在。 PsExec使用它调用的命令的exitcode作为自己的exitcode。我用命令行尝试了这个并用echo %errorlevel%检查了结果,它运行得很好。

但是我遇到了以下代码的问题。

  Process process = new Process();
  process.StartInfo.FileName = @"psexec";

  string appcmd = @"C:\windows\system32\inetsrv\appcmd";
  process.StartInfo.Arguments = String.Format(@"{0} -u {1} -p {2} -S {3} LIST APP ""{4}""",
                                              ip, username, password, appcmd, appname);

  process.Start();
  process.WaitForExit();
  Console.WriteLine(process.ExitCode);

执行得很好。但它没有返回PsExec(应该?)给出的exitcode。它总是返回0.所以现在我不能使用我之前发现的技巧来检查APP是否存在。

我有一个已知的解决方案吗?有类似的解决方案吗?或者我应该使用输出重定向?

1 个答案:

答案 0 :(得分:0)

不是解决问题的方法。但是,由于IIS中的Web应用程序必须具有唯一名称,因此创建已存在的应用程序将导致错误,但不会发生任何更改。

这意味着如果我总是尝试创建一个新APP,它的工作完全正常。如果它不存在,它将被制作,如果已经存在则不会发生任何事情。