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