Сделать мое консольное приложение невидимым - PullRequest
19 голосов
/ 17 августа 2010

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

Дело в том, что я не хочу, чтобы консольное приложение действительно появлялось. Мне нужно это невидимым. Последнее, что мне нужно, это жалобы, потому что некоторые люди были взволнованы тем, что окно CMD открывается и закрывается, кроме того, что библиотека хочет, чтобы оно было как можно более невидимым.

Я пытался следовать коду в этой теме: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/ea8b0fd5-a660-46f9-9dcb-d525cc22dcbd

но безрезультатно, я все еще вижу, как консольное приложение открывается и закрывается после того, как оно выполнит всю свою работу.

Есть ли лучший способ остановить появление консоли? Благодаря.

Ответы [ 6 ]

37 голосов
/ 17 августа 2010

Лучше всего просто не скомпилировать его как консольное приложение!Скомпилируйте его как Windows EXE-файл и консоль не отобразится.Тогда вы можете просто делать все, что вам нужно сделать в методе Main, без отображения пользовательского интерфейса.

Но в любом случае, если вам нужно скрыть / показать окно консоли, я бы избежал использования FindWindow для этой задачи,для этого есть гораздо более надежный API: GetConsoleWindow .Это даст вам HWND окна консоли, и вы можете попробовать передать его в ShowWindow.

16 голосов
/ 17 августа 2010

Как сказал Джош Эйнштейн , вы можете использовать ShowWindow Api, чтобы скрыть свое окно.

Вот пример:

using System.Runtime.InteropServices

class CommandLine
{

    [DllImport("user32.dll")]
    static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

    [DllImport("Kernel32")]
    private static extern IntPtr GetConsoleWindow();

    const int SW_HIDE=0;
    const int SW_SHOW=5;

    static void Main(string[] args)
    {
         IntPtr hwnd;
         hwnd=GetConsoleWindow();
         ShowWindow(hwnd,SW_HIDE);

         //Your logic goes here
    }
}

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

9 голосов
/ 17 августа 2010

Вы пробовали: Свойства проекта> Приложение> Тип вывода: «Приложение Windows»?

2 голосов
/ 04 ноября 2013

Здравствуйте. Я создавал консольное приложение для вызова планировщиком задач.Я не хотел, чтобы консольное приложение отображалось, поэтому я изменил свойства проекта, чтобы вывод на приложение Windows.

Измените тип вывода на приложение Windows. Выберите: Проект -> Свойства проекта и измените вывод.введите в приложение Windows

2 голосов
/ 17 августа 2010

Это немного сложнее, чем консольное приложение ... но если вы хотите, чтобы что-то действительно работало в фоновом режиме, когда кто-то входит в систему, вы можете создать приложение службы Windows.

Но для настройки и установки службы Windows требуется немного дополнительной работы, но в Интернете имеется множество примеров кода:

http://msdn.microsoft.com/en-us/library/9k985bc9(v=VS.80).aspx

http://msdn.microsoft.com/en-us/library/sd8zc8ha(v=VS.80).aspx

http://www.c -sharpcorner.com / uploadfile / Махеш / window_service11262005045007am / window_service.aspx

http://www.developer.com/net/net/article.php/2173801/Creating-a-Windows-Service-in-NET.htm

http://www.codeproject.com/KB/dotnet/simplewindowsservice.aspx

0 голосов
/ 17 мая 2016

Я испробовал оба метода 2) Searock, а затем 1) Джош - с помощью решения Searock окно консольного приложения все еще появлялось, хотя и в течение очень короткого момента - однако с помощью решения Джоша консоль не появлялась, как и моя программа есть какие-то проблемы - конечно, мне пришлось заменить все вызовы console.writeline вызовом, который записывал информацию в файл журнала

Примечание: я бы только прокомментировал решение Джоша, но пока не могу этого сделать:)

...