C#进程批处理文件状态退出?
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 /stop
和iisreset /start
文件。当它成功执行时,我需要在iisrest
邮件--> case 1
发送成功,否则 case 2
。
但是,当我编辑.bat
文件,并把一些随机的话让批处理文件失败,但仍然 它发送邮件case 1
在iisreset
意义的成功。
我在使用Process.ExitCode检查批处理文件的状态吗?
如果批处理文件失败,我需要发送case 2
失败iisreset
。
这是因为您的“批处理文件”可能无法重置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
你会发现,尽管“一些代码,肯定失败”,你仍然看到“完成”。
我相信问题是.bat脚本没有提供任何有用的错误代码/退出代码供您检查。 This question可能会为您提供一些有关如何正确设置它的有用信息。
另外,遇到错误时请参阅this question for info on terminating a batch。
您将需要等待的过程出境您可以使用ExitCode
前:
using(var process=Process.Start(@"iisresetdaily.bat")) {
process.WaitForExit();
var message=
0!=process.ExitCode
?"Failed iisreset .."
:"Sucesss in iisreset ..";
SendMail(message, "bye");
}
这将是更好,如果你可以提供批处理文件的内容,我们可以帮助找出原因。
我如何检查失败iisrest条件的任何情况? – 2013-04-30 08:09:25
@VishwanathDalvi:可以使用'ExitCode'。该问题可能在批处理文件中,或者它不会返回'0',而'iisreset'不会。 – 2013-04-30 08:13:08
您是否在批处理脚本中检查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
这个任务*威力*通过[Windows任务计划程序]被accpmplished容易(http://en.wikipedia.org/wiki/Windows_Task_Scheduler) – 2013-04-30 06:44:19
@JensKloster我试过,但没有选项来发送邮件当任务失败:) – 2013-04-30 06:47:48