2009-09-08 28 views
5

¿Cómo puedo saber si una aplicación C# se ha iniciado desde el escritorio o el shell cmd?¿Cómo puedo saber si una aplicación de C# se inició desde el escritorio o desde el shell de cmd?

La documentación de msdn es un poco confusa en esta parte. Tal vez alguien me puede ayudar aquí :)

¡Muchas gracias!

+0

Perdónenme por preguntar, pero ¿por qué marcaría la diferencia? ¿Que estás tratando de hacer? –

+0

Si comienzo la aplicación pequeña sobre el shell cmd, la salida debe ir a la ventana del shell. Si lo inicio sobre el escritorio, abriré un msgbox, mostraré el resultado y lo copiaré en el portapapeles, si presiono el botón correcto. No es nada especial. – MrMarco

Respuesta

5

Esto parece funcionar:

string[] args = System.Environment.GetCommandLineArgs(); 

if(args[0] == "you exe name"){ ...} 

Si hace doble clic en él, args [0] contiene la carpeta completa.

Nota, debe llamar realmente .GetCommandLineArgs(), el parámetro args[] que tiene en un típico static void Main(string[] args) tiene este elemento eliminado.

- Editar

Esto sólo detectará si se ejecuta desde el mismo camino que el .exe sí. Si lo ejecuta desde una subcarpeta (foo\hello.exe), no funcionará.

+0

Tampoco funcionará si realmente especifica la ruta completa en la línea de comandos. –

+0

Sí Tal: Eso es lo que expliqué; el primer parámetro es lo que escribe para ejecutarlo. –

+0

Thx. Funciona. ¡Muchos gracias por la ayuda! – MrMarco

1

Estoy bastante seguro de que no hay una manera de saber esto, y esa sería la razón por la cual la documentación es "borrosa".

3

intentar conseguir que el proceso padre:

  var pc = new PerformanceCounter("Process", "Creating Process Id", 
      Process.GetCurrentProcess().ProcessName); 
     var p = Process.GetProcessById((int)pc.RawValue); 

No estoy seguro si esto funciona cuando hay varias instancias de un mismo proceso, sin embargo. En tal caso, será mejor utilizar este enfoque: http://www.codeproject.com/KB/threads/ParentPID.aspx

+0

No importa esto :) –

Cuestiones relacionadas