将C#应用程序作为计划任务运行

3
我有一个使用C#编写的应用程序,原本是设计为在Windows窗体下运行的,现在需要以计划任务的形式运行。我遇到了一些问题,我认为这是因为它需要"无头(headless)"运行,即不应该有用户环境的概念。该程序已经被编写成可以无人值守运行,具有一个 /AUTO 参数,然后会从一些默认值开始运行,但是窗体仍然显示出来,这导致了问题。
我已经查找过,我认为有一种方法可以在这种情况下禁止窗体出现,但我找不到确切的方法。有人知道如何禁止窗体并允许此应用程序运行吗?

重复的问题?http://stackoverflow.com/questions/7179286/how-to-convert-my-c-sharp-winform-program-to-service-program - Austin Henley
请展示您的Program.cs文件内容(我猜/希望您在其中处理命令行参数)。 - Karl-Johan Sjögren
并不是完全重复的@Austin,将程序作为计划任务运行可能与服务有一些相似之处,但也存在许多区别。 - Karl-Johan Sjögren
5个回答

4

将计划任务所需的逻辑从WinForms应用程序中分离出来,并放入控制台应用程序中。如果可以在两个地方重复使用逻辑,请将其移入共享库。


请纠正我,但这不仅仅是将WinForm窗口替换为控制台窗口吗...? - Jens H
1
是的,但只要应用程序不需要用户输入,控制台窗口就可以了。 - jrummell

2
将应用程序转换为控制台模式,并在任务计划程序的“常规”选项卡中检查“隐藏”复选框,这将有助于你。 enter image description here 如果你仍想使用WinForm应用程序,则将其 ShowOnTaskbar 属性设置为 false。将 WinForm 应用程序转换为控制台很容易,只需转到项目属性并将输出类型更改为 Console。但是你需要在代码中进行一些调整。

0

检查是否设置了 /AUTO 参数,然后根据是否设置了该参数,在 Program.cs 中进行更改:

Application.Run(new Form1());

Application.Run();

这不会显示一个表单,你可以做任何其他你喜欢的事情。

这是我在没有看到你的代码的情况下能给你的最好帮助!


谢谢,这听起来很有帮助。目前来看,隐藏的复选框和 .Run 最有前途。 - onesixtyfourth

0

你可以告诉任务与桌面交互,这样显示的表单就不是问题了。只要你的应用程序自己关闭,任务就会完成。

我制作了一个基于表单的东西,然后想要一个计划任务,所以编写了一个调用基于表单的应用程序的命令行前端,并将这两个exe与ilmerge一起推送,这样它就不会混淆,因为这是一个便宜的hack。

如果你的代码编写正确,你可以做一个exe前端,并使用与你的表单相同的类(或dll)来工作。


我使用VS 2010开发了一个Winform应用程序。在安装exe后,我已经在任务计划程序中安排了它。在预定的时间,任务显示正在运行,但它不会打开我的exe文件。请帮忙。 - dilipkumar1007

0

就我所了解的,您不再需要表单模式,是吗?

如果正确的话,我建议将您的应用程序实现为服务,例如WCF服务。它可以永久运行并在配置的计时器上执行您的业务逻辑。

为了使定时器的配置变得简单和灵活,您可以选择集成NCronTab。这允许您按照模式安排任务,例如45 11 * * Friday(=>“每个星期五上午11:45运行”)


我使用VS 2010开发了一个Winform应用程序。在安装exe后,我将其安排在任务计划程序中。在预定的时间,任务显示正在运行,但它不会打开我的exe。请帮忙。 - dilipkumar1007
@dilipkumar1007:这听起来像是一个完全不同的话题。我建议你最好开一个自己的问题,并提供更多关于你正在尝试做什么的细节。 - Jens H

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接