2010-05-04 9 views
25

J'ai une application console en C#, et je veux que l'utilisateur ne puisse pas la voir.Comment masquer une application console en C#

Comment puis-je faire cela?

+3

Est-ce un service que vous voulez exécuter en arrière-plan? –

+0

Oui, mais je ne veux pas l'exécuter en tant que service, je veux l'exécuter en tant que. Exe – menacheb

+0

Comment l'application commencerait-elle? – noocyte

Répondre

51

Compile comme une application Windows Forms. Ensuite, il n'affichera aucune interface utilisateur si vous n'ouvrez pas explicitement Windows.

+0

Bonne idée, je vais essayer ... – menacheb

+0

C'est probablement le moyen le plus commun et le plus facile d'accomplir ceci. –

+0

Pas vraiment. Pourquoi changer la ligne de base entière juste pour ne pas montrer une fenêtre de console? Pas la meilleure idée. – Nayan

1

Vous pouvez Pinvoke un appel à FindWindow() pour obtenir une poignée de fenêtre, puis appelez ShowWindow() pour masquer la fenêtre OU Commencez votre application à partir d'un autre en utilisant ProcessStartInfo.CreateNoWindow

+0

Je n'ai aucune idée si cela fonctionne, mais il est sûr de lire drôle! :) Appelez ShowWindow() pour le cacher ...;) – noocyte

+0

Cela fonctionne quand même. –

+0

Au lieu de la solution hacky 'FindWindow()', je préfère de loin [récupérer la poignée de la console correctement] (http://stackoverflow.com/questions/3571627) ... – Timwi

5

Cela ne ressemble pas à une application console, mais à une application graphique Windows qui n'ouvre pas une fenêtre (visible).

4

Créer une application console « MyAppProxy » avec le code suivant et mettre MyAppProxy en démarrage dir,

public static void main(string[] args) 
{ 
    Process p = new Process("MyApp"); 
    ProcessStartUpInfo pinfo = new ProcessStartUpInfo(); 
    p.StartupInfo = pinfo; 
    pinfo.CreateNoWindow = true; 
    pinfo.ShellExecute = false; 

    p.RaiseEvents = true; 

    AutoResetEvent wait = new AutoResetEvent(false); 
    p.ProcessExit += (s,e)=>{ wait.Set(); }; 

    p.Start(); 
    wait.WaitOne(); 
} 

Vous devrez peut-être corriger certains éléments ici que je ne ai pas Verifiez du code, il ne peut pas compilez parce que certains noms de propriété peuvent être différents, mais espérons que vous aurez l'idée.

+0

C'est la façon de le faire. Le secret est la propriété CreateNoWindow. –

-3

Créez un service wcf et hébergez-le en fonction de vos besoins.

+1

Je pense que c'est trompeur et complètement dans la mauvaise direction. Les utilisations d'une application cachée peuvent être complètement différentes d'un service wcf. – ericosg

2

La meilleure façon est de démarrer le processus sans fenêtre.

 Process p = new Process(); 
     p.StartInfo.FileName = "cmd.exe"; 
     p.StartInfo.Arguments = "echo Hello!"; 
     //either.. 
     p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
     //or.. 
     p.StartInfo.CreateNoWindow = true; 
     p.Start(); 

Voir d'autres solutions probables -

Toggle Process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden at runtime

et,

Bring another processes Window to foreground when it has ShowInTaskbar = false

15

Sur ProjectProperties définir le type de sortie comme application Windows.

2

Pour masquer une applicatin console en C# quand rien ne fonctionne utilisent ce code:

[DllImport("kernel32.dll")] 
public static extern bool FreeConsole(); 

Lieu FreeConsole() partout dans le code, je l'ai placé dans le Init(), et la ligne de commande est caché.

+0

Cela semble être un peu plus simple que de le faire. Lorsque vous détachez le processus de sa console en utilisant FreeConsole(), la console est terminée. Vous devez vous rappeler de terminer le processus lorsque le travail est terminé, car il n'y a pas de console pour le faire pour vous, à moins que je ne manque quelque chose (je me dis si je le fais). Toujours, une méthode très soignée. –

Questions connexes