psexec通过Process给出的退出代码与psexec通过cmd给出的退出代码不同

本文关键字:psexec 退出 代码 通过 Process cmd | 更新日期: 2023-09-27 17:51:03

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

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

我也想使用这个行为,所以我不需要做输出重定向。我只关心这个APP是否存在。PsExec使用它调用的命令的退出码作为它自己的退出码。我用命令行尝试了这个,并检查了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(应该?)给出的退出码。它总是返回0。所以现在我不能使用我之前发现的技巧来检查应用是否存在。

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

psexec通过Process给出的退出代码与psexec通过cmd给出的退出代码不同

这不是解决问题的办法。但是由于IIS中的web应用程序必须具有唯一的名称,因此创建已经存在的应用程序将导致错误,但不会改变任何内容。

这意味着如果我总是尝试创建一个新的应用程序,它会工作得很好。如果它不存在,它将被制作,如果它已经存在,什么也不会发生。