Как запустить консольное приложение.NET в фоновом режиме

Мне записали консольное приложение в C#, который, как планируют, будет работать каждые 15 минут или таким образом с помощью встроенного Windows Task Scheduler.

Каждый раз, когда это работает, черное консольное поле открывается на время его выполнения и затем закрывается. Я ничего не пишу в консоль. Существует ли способ сделать это выполнение в фоновом режиме?

56
задан Peter Mortensen 14 March 2017 в 07:56
поделиться

8 ответов

Легко!

В это трудно поверить, но это действует как амулет. Я использовал это для некоторых проектов установки, когда вы хотите выполнять пользовательские задачи без каких-либо признаков этого.

  • Создайте проект как проект приложения Windows (это сложная часть).
  • Никогда не звоните в любую форму. Просто продолжайте так же, как в консольном приложении

     class Program 
     {
    static void Main (string [] args) 
     {
     // Просто наденьте 'не вызываем Application.Run (new frmMain (args)); 
     
     // ... ваш код 
    } 
    } 
     

Это связано с тем, что проекты приложений Windows ничем не отличаются от консольных, за исключением первой формы и ссылок. Это полностью скрытое выполнение. Попытайся!

50
ответ дан 26 November 2019 в 16:58
поделиться

Грязно, как все, но ( отсюда ):

Процесс занимает 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), которая, в свою очередь, незаметно запускает вашу службу / исполняемый файл. Итак, это быстрое сообщение для первоначального запуска, которое затем исчезло.

2
ответ дан 5 July 2019 в 00:54
поделиться

Вы можете использовать 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);
10
ответ дан 26 November 2019 в 16:58
поделиться

Проект> Свойства> вкладка Приложение> измените Тип вывода на «Приложение Windows».

Больше нет окна консоли.

166
ответ дан 26 November 2019 в 16:58
поделиться

Если он ничего не пишет в консоль, вы можете сделать это службой. http://msdn.microsoft .com / en-us / library / 9k985bc9% 28VS.80% 29.aspx

3
ответ дан 26 November 2019 в 16:58
поделиться

Как насчет внедрения приложения в службу Windows? Вы можете установить интервал на 15 минут и запустить операцию в timer_tick.

9
ответ дан 26 November 2019 в 16:58
поделиться

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

0
ответ дан 26 November 2019 в 16:58
поделиться

Он будет отображаться только в том случае, если он запланирован для запуска от имени того же пользователя, который в данный момент вошел в систему. Создайте на машине другого пользователя со смехотворно длинным паролем, сделайте его администратором (только при необходимости) и запланируйте запуск задачи от имени этого пользователя.

2
ответ дан 26 November 2019 в 16:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: