---更新---
经过一些小提琴我确认手动调用.Bat文件后,使用调度程序运行它并不起作用,但使用调度程序运行CallUrl.exe程序可以正常工作!所以问题出现在.Bat的Start命令中?是否存在在此设置上调用外部程序的特定方法?我也提升了任务的特权。
---原始信息---
我在服务器上编写了一个必须运行批处理文件然后调用程序的任务。 该程序只是调用作为参数传递的weburl。 它可以工作,但是任务表明进程仍在运行,这会阻止任务在下次正确运行。
这是从任务中调用的.Bat
//Do stuff and then
Start "" "CallUrl.exe" "http://www.UrlPassedAsArgument"
CallUrl是一个简单的控制台程序,它调用一个url,然后必须自动关闭
static void Main(string[] args)
{
string url = args[0];
try
{
Console.WriteLine("Running " + url);
Console.WriteLine("Wait");
using (var client = new NoKeepAlivesWebClient())
{
string value = client.DownloadString(url);
Console.WriteLine("[Complete]");
}
Environment.Exit(0);
return;
}
catch(Exception ex)
{
Console.WriteLine("[Error]");
Console.WriteLine(ex);
Console.ReadLine();
}
}
理论上,这必须强制关闭过程
Environment.Exit(0);
return;
这是调用url并关闭连接的NoKeepAlivesWebClient()类
public class NoKeepAlivesWebClient : WebClient
{
protected override WebRequest GetWebRequest(Uri address)
{
var request = base.GetWebRequest(address);
if (request is HttpWebRequest)
{
((HttpWebRequest)request).KeepAlive = false;
}
return request;
}
}
如果我手动调用.Bat文件,它可以完美地运行,然后关闭控制台窗口,但当它由任务schedueler自动执行时,它会在任务管理器中保留"控制台窗口主机&#34 ;和" Windows命令处理器"过程
任务以" 0x41031"结束。代码。
目前,我已对任务计划程序进行了编程,以便在给定时间后结束处理,但最小值为30分钟,需要更频繁地处理。