C # - Lancer le processus invisible (CreateNoWindow & WindowStyle ne fonctionne pas?)
J'ai 2 programmes (.exe) que j'ai créé .NET. Nous allons appeler le Maître et l'Ouvrier. Le Maître commence 1 ou plusieurs Travailleurs. Le Travailleur pas être en interaction avec par l'utilisateur, mais c'est une application WinForms qui reçoit les commandes et s'exécute WinForms composants basé sur les commandes qu'il reçoit du Maître.
Je veux le Travailleur application de exécuter complètement caché (à l'exception d'apparaître dans le Gestionnaire des Tâches de cours). J'ai pensé que je pourrais accomplir cela avec le StartInfo.CreateNoWindow et StartInfo.WindowStyle propriétés, mais je vois encore la Client.exe fenêtre et les composants dans la forme. Toutefois, il n'apparaît pas dans la barre des tâches.
Process process = new Process
{
EnableRaisingEvents = true,
StartInfo =
{
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden
FileName = "Client.exe",
UseShellExecute = false,
ErrorDialog = false,
}
};
Que dois-je faire pour laisser Client.exe exécuter, mais ne pas se montrer?
source d'informationauteur Chad
Vous devez vous connecter pour publier un commentaire.
Votre utilisation de
CreateNoWindow
/WindowStyle
fonctionne très bien sur mon système avec notepad.exe (par exemple, il est caché mais en cours d'exécution en arrière-plan), donc c'est probablement quelque chose que l'application WinForms est en train de faire. Quelques idées:Option 1: Si vous contrôlez les WinForms processus de travail, vous pouvez remplacer
de Contrôle.SetVisibleCore
de toujours masquer le formulaire. Si vous ne voulez pas toujours le cacher, vous pouvez passer d'un argument de ligne de commande, par exemple/hide
qui va l'amener à être caché. Exemple (en supposant qu'il est déjà le code-behind pour la forme):Avec cette, running
MyForm.exe
résultats dans un processus avec une forme visible. L'exécution deMyForm.exe /hide
résultats dans un processus avec une forme cachée. Vous pouvez passer le/hide
argument de votre processus maître, alors que les utilisateurs normaux de l'exécution de l'application sera toujours la voir.Option 2: Vous pouvez masquer l'application après il commence par faire un P/Invoke pour
ShowWindow
. Plus d'info sur ce ici. Cela a l'inconvénient que l'on peut parfois voir le travailleur de la fenêtre de scintillement dans l'existence avant d'être caché. Exemple:Le problème est avec
UseShellExecute = false
définissez cettetrue
et le processus sera lancé comme caché. L'utilisation du shell pour démarrer le processus comprend la façon de faire de l'application de caché, d'où que le démarrage du processus directement avecUseShellExecute = false
commence le processus directement, et comme Chris Schmich mentionné, vous aurez à gérer le masquage de la fenêtre de l'intérieur de l'application client. Ce serait peut-être préférable si vous souhaitez que l'option de l'exécution de l'application manuellement pour le débogage ou à des fins de test.Vous devez ajouter
base.Visibility = Visibility.Hidden;
de Gagner le Formulaire de demande de constructeur.