web-dev-qa-db-fra.com

Comment exécuter une application console .NET en arrière-plan

J'ai une application console écrite en C # qui doit être exécutée toutes les 15 minutes environ à l'aide du planificateur de tâches Windows intégré.

Chaque fois qu'il s'exécute, la boîte noire de la console apparaît pour la durée de son exécution, puis se ferme. Je n'écris rien sur la console. Y at-il un moyen de faire cela en arrière-plan?

48
etoisarobot

Facile!

Cela semble difficile à croire, mais cela fonctionne comme un charme. Je l'ai utilisé pour certains projets de configuration, lorsque vous souhaitez effectuer des tâches personnalisées sans aucun signe.

  • Créez le projet en tant que projet d'application Windows (c'est la partie la plus difficile).
  • Ne faites jamais d'appels sous aucune forme. Il suffit de rester dans exactement comme dans votre application console

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

En effet, les projets d’application Windows ne sont pas vraiment différents de la console, à l’exception du premier formulaire et des premières références . C’est une exécution totalement cachée. Essayez le!

50
Daniel Dolz

Projet> Propriétés> onglet Application> définissez le type de sortie sur "Application Windows". 

Pas plus de fenêtre de console.

151
Hans Passant

Qu'en est-il de l'implémentation de l'application dans un service Windows? Vous pouvez définir l'intervalle sur 15 minutes et exécuter l'opération dans timer_tick.

9
Erup

Vous pouvez utiliser l'API Windows pour réduire la zone de la console. Sinon, vous pouvez en faire un fichier EXE Windows qui ne charge pas de formulaire et appelle System.Windows.Forms.Application.Run().

Code pour minimiser la console:

[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

Si vous avez déjà créé une application Windows Console, vous pouvez simplement changer le type de sortie de votre application en application Windows.

Sous votre projet: Allez dans Propriétés> Application Sélectionnez "Application Windows" comme type de sortie.

Cela aurait un impact moindre et vous pouvez laisser votre planificateur de tâches Windows exécuter la même tâche.

5
Chanrith

S'il n'écrit rien dans la console, vous pouvez en faire un service . http://msdn.Microsoft.com/en-us/library/9k985bc9%28VS.80%29.aspx

3
nportelli

Il ne s'affichera que si son exécution est programmée avec le même utilisateur actuellement connecté. Créez un autre utilisateur sur l'ordinateur avec un mot de passe ridiculement long, définissez-le comme administrateur (uniquement si nécessaire) et programmez l'exécution de la tâche de la manière utilisateur.

2
John Sheehan

Sale comme quoi que ce soit dehors mais ( d'ici ):

Le processus prend 3 fichiers. launch.bat, invis.vbs, et (votre programme). Dans launch.bat (ce fichier exécute votre programme en mode silencieux), entrez wscript.exe "C:\yourpath\invis.vbs" "your file.bat". Dans invis.vbs, mettez dans

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

Et enfin dans votre fichier, launch.bat, mettez ce que vous voulez ...

echo off erase c:\junk.txt. Eh bien vous avez terminé. Il suffit d'ouvrir launch.bat.

Cela fonctionne cependant comme un charme. Il lance la première batte (launch.bat), qui à son tour lance votre service/exécutable en mode furtif. Donc, c'est un rapide blip pour le lancement original, puis c'est parti.

1
Kyle Rozendo

C'est facile. Configurez la tâche pour qu'elle s'exécute sous un compte autre que votre compte de connexion.

0
37Stars