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 /stop
和iisreset /start
。成功执行后,我需要在iisrest
邮件--> case 1
中发送成功,否则
case 2
。
但是当我编辑.bat
文件并添加一些随机单词以便批处理文件失败时,但仍然如此
它发送case 1
邮件意味着iisreset
成功。
我在这里使用Process.ExitCode检查批处理文件的状态是错误的吗?
如果批处理文件失败,我需要发送case 2
失败的iisreset
。
答案 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