Сделать мое консольное приложение невидимым

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

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

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

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

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

6 ответов

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

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

Как предложил Josh, вы можете использовать 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
    }
}

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

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

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

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

Это немного сложнее, чем консольное приложение... но если вы хотите, чтобы что-то действительно работало в фоновом режиме, когда кто-то входит в систему, вы можете создать приложение службы 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/mahesh/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

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

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

Другие вопросы по тегам