根据批处理文件状态退出进程
本文关键字:退出 进程 状态 批处理文件 | 更新日期: 2023-09-27 18:11:23
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
。
这是因为你的"批处理文件"可能无法重置IIS或其他任何东西,但它确实完成了正确的执行并成功退出[ie 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
您会注意到,虽然"有些代码肯定会失败",但您仍然可以看到"Finish"。
我认为问题是。bat脚本没有提供任何有用的错误代码/退出代码供您检查。这个问题可能会给你一些关于如何正确设置它的有用信息。
另外,关于在遇到错误时终止批处理的信息,请参阅这个问题。
您需要等待进程退出,然后才能使用ExitCode
:
using(var process=Process.Start(@"iisresetdaily.bat")) {
process.WaitForExit();
var message=
0!=process.ExitCode
?"Failed iisreset .."
:"Sucesss in iisreset ..";
SendMail(message, "bye");
}
如果你能提供批处理文件的内容会更好,我们可以帮助找出原因。
您是否在批处理脚本中检查isreset退出代码并传播它们?
根据http://support.microsoft.com/kb/202013they有一个例子,显示它将返回一个错误代码1,如果它失败。
@echo off
IISRESET /STOP /NOFORCE
if errorlevel == 1 goto EXIT
copy %systemroot%'system32'LogFiles'W3SVC1 d:'backup'W3SVC1
IISRESET /START
:EXIT