Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Как Джош Эйнштейн предложил вам использовать 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
    }
}

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

Ответ 3

Вы пробовали: Project Properties > Application > output Type: to "Windows Application"?

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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