Czy istnieje sposób na ukrycie okna konsoli podczas wykonywania aplikacji konsolowej?
Obecnie używam aplikacji Windows Forms do uruchamiania procesu konsoli, ale nie chcę, aby okno konsoli było wyświetlane, gdy zadanie jest uruchomione.
c#
console-application
Aaron Thomas
źródło
źródło
Odpowiedzi:
Jeśli korzystasz z
ProcessStartInfo
klasy, możesz ustawić styl okna na ukryty - w przypadku aplikacji konsolowych (nie GUI) musisz ustawić CreateNoWindow natrue
:źródło
Jeśli napisałeś aplikację konsoli, możesz ją domyślnie ukryć.
Utwórz nową aplikację konsolową, a następnie zmień typ „Typ wyjścia” na „Aplikacja systemu Windows” (można to zrobić we właściwościach projektu)
źródło
Jeśli używasz klasy Process, możesz pisać
przed
yourprocess.start();
i proces zostanie ukrytyźródło
Prosta odpowiedź jest taka: przejdź do właściwości aplikacji konsoli (właściwości projektu). Na karcie „Aplikacja” po prostu zmień „Typ wyniku” na „Aplikacja Windows”. To wszystko.
źródło
Możesz użyć FreeConsole API, aby odłączyć konsolę od procesu:
(oczywiście dotyczy to tylko sytuacji, gdy masz dostęp do kodu źródłowego aplikacji konsolowej)
źródło
FreeConsole
robi to, co mówi jego nazwa, nie zapobiega wyświetlaniu konsoli przez system Windows przed jej wywołaniem.[DllImport("kernel32.dll")] static extern bool AllocConsole();
umożliwia łatwe uruchamianie z konsolą ze standardowej aplikacji Win32Jeśli jesteś zainteresowany wyjściem, możesz skorzystać z tej funkcji:
Uruchamia podany program wiersza poleceń, czeka na jego zakończenie i zwraca wynik w postaci łańcucha.
źródło
Jeśli tworzysz program, który nie wymaga wprowadzania danych przez użytkownika, zawsze możesz go po prostu utworzyć jako usługę. Usługa nie wyświetla żadnego interfejsu użytkownika.
źródło
Dodaj to do swojej klasy, aby zaimportować plik DLL:
A jeśli chcesz to ukryć, użyj tego polecenia:
A jeśli chcesz pokazać konsolę:
źródło
Wiem, że nie odpowiadam dokładnie na to, czego chcesz, ale zastanawiam się, czy zadajesz właściwe pytanie.
Dlaczego nie użyjesz albo:
Brzmi to jak lepsze opcje, jeśli chcesz tylko uruchomić proces.
źródło
Chociaż, jak powiedziały inne odpowiedzi tutaj, możesz zmienić „Typ wyjścia” na „Aplikacja Windows”, pamiętaj, że oznacza to, że nie możesz używać,
Console.In
ponieważ stanie się NullStreamReader.Console.Out
iConsole.Error
wydaje się, że nadal działa dobrze.źródło
Console.In
gdy nie ma konsoli do wprowadzania czegoś? Skąd powinno pochodzić coś, do czego można uzyskać dostęp przezConsole.In
? To w ogóle nie ma sensu. Innymi słowy: jest to całkowicie oczywiste i logiczne, że takConsole.In
jestNullStreamReader
w tym przypadku.W oparciu o powyższą odpowiedź Adama Markowitza, zadziałały dla mnie:
źródło
Mam ogólne rozwiązanie do udostępnienia:
Po prostu włącz tę klasę do swojego projektu i zadzwoń
Magician.DisappearConsole();
.Konsola będzie migać po uruchomieniu programu poprzez jej kliknięcie. Podczas wykonywania z wiersza polecenia wiersz polecenia znika bardzo szybko po wykonaniu.
Robię to dla Discord Bota, który działa wiecznie w tle mojego komputera jako niewidoczny proces. To było łatwiejsze niż sprawienie, żeby TopShelf pracował dla mnie. Kilka samouczków TopShelf zawiodło mnie, zanim napisałem to z pomocą kodu, który znalazłem gdzie indziej. ; P
Próbowałem też po prostu zmienić ustawienia w Visual Studio> Projekt> Właściwości> Aplikacja, aby uruchomić jako aplikację systemu Windows zamiast aplikacji konsolowej, a coś w moim projekcie zapobiegło ukryciu mojej konsoli - być może dlatego, że DSharpPlus wymaga uruchomienia konsoli przy starcie . Nie wiem Bez względu na powód, ta klasa pozwala mi łatwo zabić konsolę po jej pojawieniu się.
Mam nadzieję, że ten Mag komuś pomoże. ;)
źródło
Tylko napisz
źródło