Как бежать 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. Итак, это быстро метка для первоначального запуска, а потом ушел.


Это легко. Установите задачу для запуска под учетной записью, которая не является учетной записью входа.