2010-05-04 16 views
25

Tengo una aplicación de consola en C# y deseo que el usuario no pueda verla.Cómo ocultar una aplicación de consola en C#

¿Cómo puedo hacer eso?

+3

¿Es un servicio que desea ejecutar en segundo plano? –

+0

Sí, pero no quiero ejecutarlo como servicio, quiero ejecutarlo como .exe – menacheb

+0

¿Cómo comenzaría la aplicación? – noocyte

Respuesta

51

compilarlo como una aplicación de Windows Forms. Entonces no mostrará ninguna interfaz de usuario, si no abre explícitamente Windows.

+0

Buena idea, lo intentaré ... – menacheb

+0

Esta es probablemente la forma más común y fácil de lograr esto. –

+0

No realmente. ¿Por qué cambiar toda la línea de base simplemente para no mostrar una ventana de consola? No es la mejor idea – Nayan

1

Puede PInvoke una llamada a FindWindow() para obtener un identificador para la ventana y luego llamar a ShowWindow() para ocultar la ventana O Comience su aplicación desde otra usando ProcessStartInfo.CreateNoWindow

+0

No tengo idea de si eso funciona, pero seguro que es gracioso. :) Llame a ShowWindow() para ocultarlo ...;) – noocyte

+0

Aunque funciona. –

+0

En lugar de la solución hacky 'FindWindow()', preferiría mucho [recuperar el identificador de la consola correctamente] (http://stackoverflow.com/questions/3571627) ... – Timwi

5

Parece que no desea una aplicación de consola, sino una aplicación de GUI de Windows que no abre una ventana (visible).

4

Crear una aplicación de consola "MyAppProxy" con el siguiente código, y poner MyAppProxy en la puesta en marcha 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(); 
} 

Es posible que necesite para fijar ciertos artículos aquí como yo no comprobar la corrección del código, puede que no compila porque algunos nombres de propiedad pueden ser diferentes, pero espero que entiendas la idea.

+0

Esta es la manera de hacerlo. El secreto es la propiedad CreateNoWindow. –

-3

Crea un servicio wcf y hospédelo según tu necesidad.

+1

Creo que esto es engañoso y está completamente en la dirección incorrecta. Los usos para una aplicación oculta podrían ser completamente diferentes a un servicio wcf. – ericosg

15

En ProjectProperties establecidos Tipo de salida como de aplicaciones de Windows.

2

para ocultar una Applicatin consola en C# cuando nada funciona usan este código:

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

Lugar FreeConsole() en cualquier parte del código, lo coloqué en el Init(), y la línea de comandos es oculto.

+0

Esto parece ser un poco más complicado que solo hacer eso. Cuando separa el proceso de su consola utilizando FreeConsole(), la consola finaliza. Debe recordar terminar el proceso cuando el trabajo esté terminado, ya que no hay una consola que lo haga por usted, a menos que me falta algo (déjeme saber si lo hago). Aún así, un método muy limpio. –

Cuestiones relacionadas