C#处理批处理文件状态退出?

时间:2013-04-30 06:37:02

标签: c# visual-studio-2010 visual-studio process

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

4 个答案:

答案 0 :(得分:0)

这是因为您的“批处理文件”可能无法重置IIS或其他任何内容,但它会正确执行并成功退出[即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

您会注意到虽然“某些代码肯定会失败”,但您仍然会看到“完成”。

答案 1 :(得分:0)

我认为问题是.bat脚本没有提供任何有用的错误代码/退出代码供您检查。 This question可能会为您提供有关如何正确设置的有用信息。

此外,遇到错误时请参阅this question for info on terminating a batch

答案 2 :(得分:0)

您需要等待退出流程才能使用ExitCode

using(var process=Process.Start(@"iisresetdaily.bat")) {
    process.WaitForExit();

    var message=
        0!=process.ExitCode
            ?"Failed iisreset .."
            :"Sucesss in iisreset ..";

    SendMail(message, "bye"); 
}

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

答案 3 :(得分:0)

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

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

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