2010-01-29 10 views
10

Si funciono el siguiente código:Process.Exited no siempre disparar

Process myProcess = new System.Diagnostics.Process(); 
myProcess.StartInfo.FileName = "notepad.exe"; 
myProcess.EnableRaisingEvents = true; 
myProcess.Exited += new System.EventHandler(Process_OnExit); 
myProcess.Start(); 

public static void Process_OnExit(object sender, EventArgs e) 
{ 
    // Delete the file on exit 
} 

El evento se genera cuando salgo de la libreta. Si intento el mismo código, pero empiezo una imagen en su lugar:

Process myProcess = new System.Diagnostics.Process(); 
myProcess.StartInfo.FileName = @"C:\Users\Public\Pictures\Sample Pictures\Desert.jpg"; 
myProcess.EnableRaisingEvents = true; 
myProcess.Exited += new System.EventHandler(Process_OnExit); 
myProcess.Start(); 

public static void Process_OnExit(object sender, EventArgs e) 
{ 
    // Delete the file on exit 
} 

El evento nunca se dispara. ¿Es porque el proceso que carga la imagen nunca se cierra?

ACTUALIZACIÓN: El proceso de inicio no es siempre una imagen. Puede ser cualquier cosa (pdf, documento de Word, etc.). Tal vez mi enfoque no es correcto. ¿Hay alguna otra forma de eliminar el archivo después de que el usuario salió del proceso?

Gracias

Respuesta

7

Utilizaría un archivo temporal. Hay funciones para crear un archivo temporal ...

Su evento no se activa debido a la falta del proceso en sí, supongo. Puede intentar usar el intérprete de comandos para "iniciar" el documento en cuestión, pero nada garantiza que haya un controlador para todos los tipos de archivos.

+0

Sí, creo que es un problema con el proceso.Thx por la ayuda –

0

Se desencadena el evento para mí con la foto de Microsoft como visor. ¿Posiblemente está usando un visor que no se está cerrando realmente?

+2

Eso es raro. Probé el código en Windows 7 y Vista y el evento nunca se dispara. El proceso inicia el Visor de fotos de Windows predeterminado –

+0

¿Está saliendo su programa antes de que se dispare el evento? – rerun

+0

No. Si cambio mi código para un archivo a un documento de Word, se desencadena el evento. Es realmente un problema con el Windows Photo Viewer. ¿En qué sistema operativo ha intentado? –

1

Está utilizando el visor de imágenes predeterminado en Windows, ya que un archivo de imagen no es ejecutable. Cambié el código para usar el valor predeterminado de XP y funcionó bien.

class Program 
{ 
    static void Main(string[] args) 
    { 
     Process myProcess = new System.Diagnostics.Process(); 
     myProcess.StartInfo.FileName = @"rundll32.exe"; 
     myProcess.EnableRaisingEvents = true; 
     myProcess.StartInfo.Arguments = @"C:\winnt\System32\shimgvw.dll,ImageView_Fullscreen c:\leaf.jpg"; 
     myProcess.Exited += new System.EventHandler(Process_OnExit); 
     myProcess.Start(); 
     Console.Read(); 



    } 
    public static void Process_OnExit(object sender, EventArgs e) 
    { 
     Console.WriteLine("called"); 
     Console.Read(); 
    } 


} 
+1

Lamentablemente, necesito un método genérico. Puede que no sea siempre una imagen. Puede ser un PDF, un documento de Word, etc. He actualizado mi pregunta. –

4

Para Windows Media Player tratar el siguiente código

myProcess.StartInfo.FileName = "wmplayer"; 
myProcess.StartInfo.Arguments = "yourfilename"; 

Para ventanas visor de imágenes probar este

myProcess.StartInfo.FileName = @"rundll32.exe"; 
myProcess.StartInfo.Arguments = @"C:\Windows\System32\shimgvw.dll,ImageView_Fullscreen " + yourfilepath; 

Ahora ambos den su evento salido en Windows 7

15

debe activar el aumento eventos para el proceso.

process_name.EnableRaisingEvents = true; 
+3

Lo hizo en su código aunque –

+3

Mientras lo olvidé en mi código y esta respuesta me ayudó;) – ensisNoctis

Cuestiones relacionadas