Как бежать a.NET консольное приложение в фоновом режиме
У меня есть консольное приложение, написанное на C#, который по расписанию каждые 15 минут или около того с помощью встроенного планировщика задач Windows.
каждый раз, когда он запускается, черный ящик консоли появляется на время его выполнения, а затем закрывается. Я ничего не пишу на консоль. Есть ли способ сделать это в фоновом режиме?
9 ответов
легко!
Кажется, трудно поверить, но это работает как шарм. Я использовал это для некоторых проектов установки, когда вы хотите выполнить пользовательские задачи без каких-либо признаков его.
- создайте проект как проект приложения Windows (это сложная часть).
-
никогда не звоните в любую форму. Просто продолжайте точно так же, как в консольном приложении
class Program { static void Main(string[] args) { // Just don't call Application.Run(new frmMain(args)); // ... your code } }
это потому, что проекты приложений windows не являются действительно отличается от консоли, за исключением первой формы и ссылок. Это полностью скрытое исполнение. Попробуй!
проект > свойства> вкладка приложение > изменить тип вывода на "приложение Windows".
больше нет окна консоли.
Как насчет реализации приложения в службу windows? Вы можете установить интервал в 15 минут и выполнить операцию в timer_tick.
вы можете использовать Windows API для минимизации окна консоли. В противном случае вы можете сделать его EXE-файлом Windows, который фактически не загружает форму и не вызывает System.Windows.Forms.Application.Run()
.
код для минимизации консоли:
[DllImport( "user32.dll" )]
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
public const int SW_SHOWMINIMIZED = 2;
IntPtr winHandle = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle;
ShowWindow(winHandle, SW_SHOWMINIMIZED);
Если у вас уже создано консольное приложение Windows, вы можете просто изменить тип вывода вашего приложения на приложение Windows.
в рамках вашего проекта: Выберите Свойства > приложение Выберите" приложение Windows " в качестве типа вывода.
Это будет наименьшее влияние, и Вы можете сохранить планировщик задач Windows, выполняющий ту же задачу.
Если он ничего не пишет на консоль, вы можете сделать это услугой. http://msdn.microsoft.com/en-us/library/9k985bc9%28VS.80%29.aspx
Он будет отображаться только в том случае, если он планируется запустить как тот же пользователь, который вошел в систему. Создайте на компьютере другого пользователя с нелепо длинным паролем, назначьте его администратором (только при необходимости) и запланируйте выполнение задачи от имени этого пользователя.
грязный, как все там, но (отсюда):
процесс занимает 3 файла.
launch.bat
,invis.vbs
и (по вашему программа.) В запуске.bat (этот файл запускается ваша программа молча), положить вwscript.exe "C:\yourpath\invis.vbs" "your file.bat"
. Вinvis.vbs
, поместить в
CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, False
и, наконец, в вашем файле
launch.bat
, положите все, что вы хотеть...
echo off erase c:\junk.txt
. Ну ты сделанный. Просто откройтеlaunch.bat
.
это работает как шарм, хотя. Он запускает первую летучую мышь (запуск.bat), который, в свою очередь, запускает ваш сервис/исполняемый файл в stealth. Итак, это быстро метка для первоначального запуска, а потом ушел.
Это легко. Установите задачу для запуска под учетной записью, которая не является учетной записью входа.