Сделать невидимым консольное приложение
Я разрабатываю консольное приложение для своей публичной библиотеки в качестве школьного проекта. Консольное приложение будет запускаться сразу после входа пользователя в систему и выполнения некоторых фоновых работ.
Дело в том, что я не хочу, чтобы консольное приложение действительно отображалось. Мне нужно, чтобы оно было невидимым. Последнее, что мне нужно, это жалобы, потому что некоторые люди испугались, что окно CMD открылось и закрылось, кроме того, библиотека хочет, чтобы он был невидимым насколько возможно.
Я пробовал выполнить код в этом потоке:
http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/ea8b0fd5-a660-46f9-9dcb-d525cc22dcbd
но безрезультатно, я все еще вижу, как консольное приложение открывается и закрывается после того, как оно выполнило всю свою работу.
Есть ли лучший способ остановить появление консоли? Спасибо.
Ответы
Ответ 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, но я не могу этого сделать еще:)