1
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 2failed iisreset

4

4 回答 4

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

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

于 2013-04-30T06:42:01.540 回答
0

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

此外,有关遇到错误时终止批处理的信息,请参阅此问题。

于 2013-04-30T07:02:28.210 回答
0

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

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

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

    SendMail(message, "bye"); 
}

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

于 2013-04-30T07:07:26.537 回答
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
于 2013-04-30T07:21:51.273 回答