11
votes

Processus.exitée pas toujours tirer

Si j'exécute le code suivant:

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
}


0 commentaires

5 Réponses :


0
votes

L'événement incendie pour moi avec le visualiseur de Photo Microsoft Photo comme Viewer. Utilisez-vous éventuellement un spectateur qui ne ferme pas réellement?


7 commentaires

C'est bizarre. J'ai testé le code sur Windows 7 et Vista et l'événement n'est jamais tiré. Le processus démarre la visionneuse de photos Windows par défaut


Votre programme est-il sorti avant que l'événement soit viré.


Non. Si une modification de mon code pour un fichier Filpath à un document Word, l'événement est viré. C'est vraiment un problème avec le spectateur Windows Photo Viewer. Sur quel système d'exploitation avez-vous essayé?


Maintenant, j'ai testé sur Windows 7 avec Picasa en tant que spectateur et ça fonctionne très bien. Essayez de placer une console.writeln ("test") dans le processus_onexit et mettez un point de pause là-bas mais pas nulle part ailleurs.


Je l'ai également testé sur Windows XP et cela fonctionne. C'est la visionneuse de photos Windows de Vista et 7 qui ne tire pas l'événement excepté. Vraiment étrange...


Même ici, pour pousser ce sujet. Évidemment, vous êtes condamné avec la visionneuse de photos Windows Vista / 7/8 par défaut. Il ne lève pas non plus l'événement excepté ici.


Je peux également reproduire le problème avec Windows 7 - le visualiseur de photos par défaut ne soumet pas d'événement excepté.



1
votes

Vous utilisez la visionneuse d'image par défaut dans Windows depuis un fichier image n'est pas exécutable. J'ai changé le code pour utiliser la valeur par défaut de XP et il a bien fonctionné.

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 commentaires

Malheureusement, j'ai besoin d'une méthode générique. Ce n'est peut-être pas toujours une image. Cela peut être un PDF, un document Word, etc. J'ai mis à jour ma question.



7
votes

J'utiliserais un fichier temp. Il y a des fonctions pour créer un fichier temporaire ...

Votre événement ne tire pas en raison du manque de processus lui-même, je suppose. Vous pouvez essayer d'utiliser la coquille pour "commencer" le document en question mais rien ne garantit qu'il y aura un gestionnaire pour tous les types de fichiers.


1 commentaires

Oui, je pense qu'il est un problème avec le processus. Thx pour l'aide



5
votes

pour Windows Media Player Essayez le code suivant

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


0 commentaires

18
votes

Vous devez activer la collecte d'événements pour le processus.

process_name.EnableRaisingEvents = true;


1 commentaires

Pendant que je l'ai oublié dans mon code et cette réponse m'a aidé;)