2013-04-30 49 views
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方法工作正常。C#进程批处理文件状态退出?

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

但是,当我编辑.bat文件,并把一些随机的话让批处理文件失败,但仍然 它发送邮件case 1iisreset意义的成功。

我在使用Process.ExitCode检查批处理文件的状态吗?

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

+0

这个任务*威力*通过[Windows任务计划程序]被accpmplished容易(http://en.wikipedia.org/wiki/Windows_Task_Scheduler) – 2013-04-30 06:44:19

+0

@JensKloster我试过,但没有选项来发送邮件当任务失败:) – 2013-04-30 06:47:48

回答

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 

你会发现,尽管“一些代码,肯定失败”,你仍然看到“完成”。

0

您将需要等待的过程出境您可以使用ExitCode前:

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

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

    SendMail(message, "bye"); 
} 

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

+0

我如何检查失败iisrest条件的任何情况? – 2013-04-30 08:09:25

+0

@VishwanathDalvi:可以使用'ExitCode'。该问题可能在批处理文件中,或者它不会返回'0',而'iisreset'不会。 – 2013-04-30 08:13:08

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