2010-08-16 14 views
18

Ich entwickle eine Konsolenanwendung für meine öffentliche Bibliothek als Schulprojekt. Die Konsolenanwendung wird ausgeführt, sobald sich der Benutzer anmeldet und einige Hintergrundarbeiten ausführt.Meine Konsolenanwendung unsichtbar machen

Die Sache ist, ich möchte nicht, dass die Konsolenanwendung tatsächlich erscheint. Ich brauche es unsichtbar. Das Letzte, was ich brauche, sind Beschwerden, weil einige Leute ausgerastet sind, dass ein CMD-Fenster geöffnet und geschlossen wurde, außerdem möchte die Bibliothek es so unsichtbar wie möglich haben.

Ich habe versucht, nach dem Code in diesem Thema: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/ea8b0fd5-a660-46f9-9dcb-d525cc22dcbd

aber ohne Erfolg, ich habe noch die Konsolenanwendung Pop öffnen und schließen, nachdem er alle seine Arbeit getan hat, sehen kann.

Gibt es eine bessere Möglichkeit, die Konsole nicht mehr erscheinen zu lassen? Vielen Dank.

+0

Hast du meinen Code ausprobiert? Stehen Sie immer noch vor Problemen? – Searock

Antwort

36

Die beste Sache zu tun ist, kompilieren Sie es nicht als eine Konsolenanwendung! Kompilieren Sie es als Windows EXE und keine Konsole wird angezeigt. Dann können Sie einfach alles tun, was Sie in der Main-Methode tun müssen, ohne eine Benutzeroberfläche anzuzeigen.

Aber in jedem Fall, wenn Sie verstecken muss/zeigt die Fenster Konsole ich für diese Aufgabe klar der Verwendung von Find lenken würde, da ein sehr viel zuverlässiger API dafür gibt es: GetConsoleWindow. Dies gibt Ihnen die HWND des Konsolenfensters und Sie können versuchen, das an ShowWindow zu übergeben.

+1

Das sollte auch mein Vorschlag sein. +1. – David

+0

+! für intuitive, Microsoft-Stil ... – NinjaCat

+0

Ah, ich verstehe. Was wäre das unter "Neues Projekt" in Visual Studio? "Leeres Projekt"? Weil ich keine Option für eine normale .exe, nur einige Formulare und eine Konsolenanwendung sehe. – Kratz

8

Haben Sie versucht: Projekteigenschaften> Anwendung> Ausgabe Typ: zu "Windows-Anwendung"?

+0

Ich habe gerade das getan und jetzt ist die Anwendung kaputt, es ist beabsichtigt, Verzeichnisse zu machen und Dateien von einer eingebetteten Ressource kopieren und jetzt funktioniert es nicht. :( – Kratz

2

Es ist ein wenig komplizierter als eine Konsolenanwendung ... aber wenn Sie möchten, dass etwas wirklich im Hintergrund läuft, wenn sich jemand anmeldet, dann könnten Sie eine Windows-Dienstanwendung erstellen.

Aber es erfordert eine wenig zusätzliche Arbeit bei der Einrichtung und Installation des Windows Service, aber es gibt eine Fülle von Beispielcode im Web:

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

+1

Ein Problem besteht darin, dass ein Dienst gestartet wird, bevor sich der Benutzer anmeldet und nicht an ein bestimmtes Benutzerkonto gebunden ist. Je nach dem, was Sie tun, kann dies nützlich sein oder Kopfschmerzen verursachen. –

14

Wie Josh Einstein vorgeschlagen hat, können Sie ShowWindow Api verwenden, um Ihr Fenster zu verbergen.

Hier ist ein Beispiel:

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 
    } 
} 

ich diesen Code nicht sicher bin, wie ich es nicht getestet haben. Lassen Sie mich wissen, wenn Sie irgendein Problem haben.

+1

Dies funktioniert, zeigt aber a kurzer Flash eines Konsolenfensters, wenn Sie den Prozess von einem anderen Prozess starten. – Wouter

2

Hallo Ich habe eine Konsole-Anwendung erstellt, die vom Taskplaner aufgerufen werden soll. Ich wollte nicht, dass die Konsolen-App angezeigt wird. Daher habe ich die Projekteigenschaften so geändert, dass sie in Windows-Anwendungen ausgegeben werden.

Ändern Sie den Ausgabetyp Windows-Anwendung Gehe zu: Projekt -> Projekteigenschaften und der Ausgangstyp Windows-Anwendung ändern

0

ich beide Methoden ausprobiert 2) Searock und dann 1) Josh --- mit Searock der Lösung erschien das Konsolen-App-Fenster immer noch, obwohl für einen sehr kurzen Moment --- aber mit Josh's Lösung erschien die Konsole nicht und mein Programm hatte auch keine Probleme - natürlich musste ich alle console.writeline-Aufrufe durch einen ersetzen Anruf, der die Informationen in eine Protokolldatei protokollierte

Hinweis: Ich hätte nur Joshs Lösung kommentiert, aber ich kann nicht tun Hat ja schon :)

Verwandte Themen