【问题标题】:psexec via Process gives different exitcode than psexec via cmdpsexec via Process 提供的退出代码与 psexec via cmd 不同
【发布时间】:2013-01-09 13:56:05
【问题描述】:

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

当我通过命令行对此进行测试时,我注意到当应用程序不存在时,appcmd 以 ExitCode 1 退出。同样,当应用程序存在时,它以 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。所以现在我不能使用我之前发现的技巧来检查一个APP是否存在。

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

【问题讨论】:

    标签: c# cmd psexec


    【解决方案1】:

    不是真正解决问题的方法。但是因为 IIS 中的 Web 应用程序必须有一个唯一的名称,所以创建一个已经存在的应用程序会导致错误但不会发生任何变化。

    这意味着如果我总是尝试创建一个新的应用程序,它会很好地工作。如果它不存在,它将被制造,如果它已经存在,则不会发生任何事情。

    【讨论】:

      猜你喜欢
      • 2014-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多