Мне записали консольное приложение в C#, который, как планируют, будет работать каждые 15 минут или таким образом с помощью встроенного Windows Task Scheduler.
Каждый раз, когда это работает, черное консольное поле открывается на время его выполнения и затем закрывается. Я ничего не пишу в консоль. Существует ли способ сделать это выполнение в фоновом режиме?
Легко!
В это трудно поверить, но это действует как амулет. Я использовал это для некоторых проектов установки, когда вы хотите выполнять пользовательские задачи без каких-либо признаков этого.
Никогда не звоните в любую форму. Просто продолжайте так же, как в консольном приложении
class Program
{
static void Main (string [] args)
{
// Просто наденьте 'не вызываем Application.Run (new frmMain (args));
// ... ваш код
}
}
Это связано с тем, что проекты приложений Windows ничем не отличаются от консольных, за исключением первой формы и ссылок. Это полностью скрытое выполнение. Попытайся!
Грязно, как все, но ( отсюда ):
Процесс занимает 3 файла.
launch.bat
,invis.vbs
и (ваша программа). В launch.bat (этот файл автоматически запускает вашу программу) вставьтеwscript.exe "C: \ yourpath \ invis.vbs" "your file.bat"
. Вinvis.vbs
поместите в
CreateObject ("Wscript.Shell"). Запустите "" "" & WScript.Arguments (0) & "" "", 0, False
И, наконец, в вашем файле,
launch.bat
, поместите все, что вы хотите ...
echo off erase c: \ junk.txt
. Что ж, вы сделали. Просто откройтеlaunch.bat
.
Но это работает как амулет. Он запускает первую летучую мышь (launch.bat), которая, в свою очередь, незаметно запускает вашу службу / исполняемый файл. Итак, это быстрое сообщение для первоначального запуска, которое затем исчезло.
Вы можете использовать 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».
Больше нет окна консоли.
Если он ничего не пишет в консоль, вы можете сделать это службой. http://msdn.microsoft .com / en-us / library / 9k985bc9% 28VS.80% 29.aspx
Как насчет внедрения приложения в службу Windows? Вы можете установить интервал на 15 минут и запустить операцию в timer_tick.
Это просто. Установите задачу для запуска под учетной записью, которая не является вашей учетной записью для входа.
Он будет отображаться только в том случае, если он запланирован для запуска от имени того же пользователя, который в данный момент вошел в систему. Создайте на машине другого пользователя со смехотворно длинным паролем, сделайте его администратором (только при необходимости) и запланируйте запуск задачи от имени этого пользователя.