根据批处理文件状态退出进程

本文关键字:退出 进程 状态 批处理文件 | 更新日期: 2023-09-27 18:11:23

static void Main(string[] args) 
{
    Process process=Process.Start(@"C:'Users'dalvi'Desktop'iisresetdaily.bat");
    if(process.ExitCode==0)
        SendMail("Sucesss in iisreset..", "bye"); // --> case 1
    else
        SendMail("Failed iisreset..", "bye"); // --> case 2
}

编辑:我的SendMail方法工作良好。

我已经写了iisresetdaily.bat文件,它正在做iisreset /stopiisreset /start。当它执行成功时,我需要在iisrest邮件--> case 1中发送成功,否则case 2

但是当我编辑.bat文件并放入一些随机单词时,批处理文件失败,但仍然它发送case 1邮件意味着在iisreset中成功。

我是否错误地使用Process检查批处理文件的状态。ExitCode吗?

如果批处理文件失败,我需要发送case 2失败的iisreset

根据批处理文件状态退出进程

这是因为你的"批处理文件"可能无法重置IIS或其他任何东西,但它确实完成了正确的执行并成功退出[ie statusCode=0]。

试着让你的批处理像:

@echo Started
--Some code that works
--Some code that surely fails [But not break the batch, as in calling external program]
@echo Finished

您会注意到,虽然"有些代码肯定会失败",但您仍然可以看到"Finish"。

我认为问题是。bat脚本没有提供任何有用的错误代码/退出代码供您检查。这个问题可能会给你一些关于如何正确设置它的有用信息。

另外,关于在遇到错误时终止批处理的信息,请参阅这个问题。

您需要等待进程退出,然后才能使用ExitCode:

using(var process=Process.Start(@"iisresetdaily.bat")) {
    process.WaitForExit();
    var message=
        0!=process.ExitCode
            ?"Failed iisreset .."
            :"Sucesss in iisreset ..";
    SendMail(message, "bye"); 
}

如果你能提供批处理文件的内容会更好,我们可以帮助找出原因。

您是否在批处理脚本中检查isreset退出代码并传播它们?

根据http://support.microsoft.com/kb/202013they有一个例子,显示它将返回一个错误代码1,如果它失败。

@echo off
IISRESET /STOP /NOFORCE
if errorlevel == 1 goto EXIT
copy %systemroot%'system32'LogFiles'W3SVC1 d:'backup'W3SVC1
IISRESET /START
:EXIT