wake-up-neo.com

So führen Sie eine .NET-Konsolenanwendung im Hintergrund aus

Ich habe eine in C # geschriebene Konsolenanwendung, die voraussichtlich alle 15 Minuten mit dem integrierten Windows-Taskplaner ausgeführt wird.

Bei jeder Ausführung wird die schwarze Konsolenbox für die Dauer der Ausführung angezeigt und anschließend geschlossen. Ich schreibe nichts an die Konsole. Gibt es eine Möglichkeit, diesen Hintergrund im Hintergrund auszuführen?

48
etoisarobot

Einfach!

Es scheint schwer zu glauben, aber es wirkt wie ein Zauber. Ich habe dies für einige Setup-Projekte verwendet, wenn Sie benutzerdefinierte Aufgaben ohne Anzeichen ausführen möchten.

  • Erstellen Sie das Projekt als Windows-Anwendungsprojekt (dies ist der schwierige Teil).
  • Rufen Sie niemals Formulare an. Bleiben Sie einfach genauso wie in Ihrer Konsolenanwendung

    class Program
    {
        static void Main(string[] args)
        {
            // Just don't call Application.Run(new frmMain(args));
    
            // ... your code
        }
     }
    

Dies liegt daran, dass Windows-Anwendungsprojekte sich nicht wirklich von Konsole unterscheiden, außer aufgrund des ersten Formulars und der Referenzen .. _. Versuch es!

50
Daniel Dolz

Projekt> Eigenschaften> Registerkarte "Anwendung"> ändern Sie den Ausgabetyp in "Windows-Anwendung". 

Kein Konsolenfenster mehr.

151
Hans Passant

Wie sieht es mit der Implementierung der App in einem Windows-Dienst aus? Sie können das Intervall auf 15 Minuten einstellen und die Operation in timer_tick ausführen.

9
Erup

Sie können die Windows-API verwenden, um die Konsolenbox zu minimieren. Andernfalls können Sie eine Windows-EXE-Datei erstellen, die ein Formular nicht tatsächlich lädt, und System.Windows.Forms.Application.Run() aufrufen.

Code zum Minimieren der Konsole:

[DllImport( "user32.dll" )]
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

public const int SW_SHOWMINIMIZED = 2;

IntPtr winHandle = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle;
ShowWindow(winHandle, SW_SHOWMINIMIZED);
9
JDMX

Wenn Sie bereits eine Windows-Konsolen-App erstellt haben, können Sie einfach den Ausgabetyp Ihrer App in Windows-Anwendung ändern.

Unter Ihrem Projekt: Gehen Sie zu Eigenschaften> Anwendung Wählen Sie als Ausgabetyp "Windows-Anwendung" aus.

Dies wäre die geringste Auswirkung, und Sie können dafür sorgen, dass Ihr Windows-Taskplaner dieselbe Task ausführt.

5
Chanrith

Wenn der Konsole nichts geschrieben wird, können Sie ihn zu einem Dienst machen . http://msdn.Microsoft.com/en-us/library/9k985bc9%28VS.80%29.aspx

3
nportelli

Es wird nur angezeigt, wenn es als derselbe Benutzer ausgeführt wird, der gerade angemeldet ist. Erstellen Sie einen anderen Benutzer auf dem Computer mit einem lächerlich langen Kennwort, legen Sie ihn als Administrator fest (nur wenn erforderlich) und planen Sie die Ausführung der Aufgabe Nutzer.

2
John Sheehan

Dreckig wie alles da draußen aber ( von hier ):

Der Vorgang dauert 3 Dateien. launch.bat, invis.vbs und (Ihr Programm). Geben Sie in launch.bat (diese Datei führt Ihr Programm unbeaufsichtigt aus) wscript.exe "C:\yourpath\invis.vbs" "your file.bat" ein. In invis.vbs eingeben

CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, False

Und schließlich, in Ihre Akte, launch.bat, setzen Sie, was Sie wollen ...

echo off erase c:\junk.txt. Nun bist du fertig. Öffne einfach launch.bat.

Es funktioniert aber wie ein Zauber. Es startet die erste Fledermaus (launch.bat), die wiederum Ihren Dienst/Ihre ausführbare Datei in Stealth startet. Es ist also ein kurzer Sprung für den ursprünglichen Start, dann weg.

1
Kyle Rozendo

Das ist einfach. Legen Sie fest, dass die Aufgabe unter einem Konto ausgeführt wird, das nicht Ihrem Anmeldekonto entspricht.

0
37Stars