3

我有一个 C# 应用程序,它设计为使用 Windows 窗体运行,但现在需要作为计划任务运行。我遇到了这个问题,我认为这是因为它需要“无头”,因为它不应该有用户环境的概念。该程序已编写为无人值守运行,因为它有一个 /AUTO 参数,然后将从一些默认值运行,但仍显示导致问题的表单。

我环顾四周,我认为在这种情况下有一种方法可以抑制形式,但我找不到确切的方法。有谁知道我如何抑制表单并允许此应用程序运行?

4

5 回答 5

4

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

于 2012-07-19T12:55:21.337 回答
2

将您的应用程序转换为控制台模式,并选中任务计划程序的“常规”选项卡中的“隐藏”复选框。

这将帮助你

在此处输入图像描述

如果您仍想使用 WinForm 应用程序,请将其 ShowOnTaskbar 属性设置为 false。

并且很容易将您的 winform 应用程序转换为 winform one。只需转到项目属性并将输出类型更改为控制台。但是您需要对代码进行一些调整。

于 2012-07-19T12:58:58.683 回答
0

As far as I understood you, you do not need the Forms mode anymore, right?

If this is correct, I suggest implementing your application as service, e.g. a WCF service. It can permanently run and execute your business logic on a configured timer.

To make configuration of the timer easy and flexible, you could optionally imncorporate NCronTab. This allows you to schedule the task in a pattern as easy as 45 11 * * Friday (=> "Run every Friday at 11:45 am")

于 2012-07-19T13:07:24.607 回答
0

您可以告诉任务与桌面交互,在这种情况下,显示的表单不是问题。只要您的应用程序会自行关闭,工作就会完成..

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

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

于 2012-07-19T12:57:32.207 回答
0

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

Application.Run(new Form1());

Application.Run();

这不会显示表格,您可以做任何其他您喜欢的事情。

这是我可以在没有看到你代码的情况下给你的最好的。跳它有帮助!

于 2012-07-19T12:56:02.733 回答