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 }
5 Réponses :
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? P>
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é.
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(); } }
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.
J'utiliserais un fichier temp. Il y a des fonctions pour créer un fichier temporaire ... p>
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. p>
Oui, je pense qu'il est un problème avec le processus. Thx pour l'aide
pour Windows Media Player Essayez le code suivant
myProcess.StartInfo.FileName = @"rundll32.exe"; myProcess.StartInfo.Arguments = @"C:\Windows\System32\shimgvw.dll,ImageView_Fullscreen " + yourfilepath;
Vous devez activer la collecte d'événements pour le processus.
process_name.EnableRaisingEvents = true;
Pendant que je l'ai oublié dans mon code et cette réponse m'a aidé;)