IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows XP Discussion :

Savoir quel processus utilise un fichier en C#


Sujet :

Windows XP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 19
    Points : 23
    Points
    23
    Par défaut Savoir quel processus utilise un fichier en C#
    Bonjour,

    Je développe un application en c# qui fait le lien entre plusieurs autre d'un eco-système.

    Il arrive que je doive détruire un fichier après un traitement. Hors ce fichier est utilisé et j'obtiens une erreur.

    Ne possédant pas le code source des autres application, je ne peut pas avoir quel applicatif utilise encore le fichier.

    Mon but est de modifier un bout de code pour logger quel processus utilise encore le fichier et d'éventuellement le killer. (J'ai de bonne raison de croire que ce processus plante un peu aléatoirement).

    Je ne peut pas utiliser Process Explorer car ce bug se produit la nuit quand je ne suis plus là et le matin le fichier est accessible. Pour le moment j'ai un boucle de retry mais elle me fait perdre parfois 30 minutes avant de pouvoir virer le fichier. Et 30 minutes dans al nuit c'est pas rien.

    J'ai trouver un truc sur ntdll.dll. Mais pas d'exemple sur la manière d'interfacer ce bout de code en C#.

    Normalement une fois l'appli coupable découvertes j'effacerai ses lignes pour ne pas ralentir l'application.
    Donc ce n'est pas grave si l'appel à la fonction est couteux.
    Merci d'avance.

  2. #2
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 806
    Points
    5 806
    Par défaut
    Il faudrait poser la question dans le forum C#
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 19
    Points : 23
    Points
    23
    Par défaut
    C'est surtout que le problème me semble spécifique à l'OS va que la ntdll a peut-être changé.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 19
    Points : 23
    Points
    23
    Par défaut
    Bonjour

    Excusez moi, je n'avais pas penser à poser la question en anglais dans Google .

    Alors la solution est d'utiliser handle.exe

    http://technet.microsoft.com/en-us/s.../bb896655.aspx

    On utilise un appel au shell, mais comme ici c'est dans un but de debug, pas de problème. Et de toute façon en WIN32 c'est un cauchemar à utiliser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    string fileName = @"c:\aaa.doc";//Path to locked file
    
    Process tool = new Process();
    tool.StartInfo.FileName = "handle.exe";
    tool.StartInfo.Arguments = fileName;
    tool.StartInfo.UseShellExecute = false;
    tool.StartInfo.RedirectStandardOutput = true;
    tool.Start();                   
    tool.WaitForExit();
    string outputTool = tool.StandardOutput.ReadToEnd();
    
    string matchPattern = @"(?<=\s+pid:\s+)\b(\d+)\b(?=\s+)";
    foreach(Match match in Regex.Matches(outputTool, matchPattern))
    {
                Process.GetProcessById(int.Parse(match.Value)).Kill();
    }
    Source : http://stackoverflow.com/questions/3...file-using-net

    Pour moi le sujet est résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Savoir quel processus utilise un fichier donné
    Par boisdin dans le forum Windows
    Réponses: 2
    Dernier message: 25/03/2010, 09h47
  2. Liste de processus utilisant un fichier
    Par ZIED dans le forum Delphi
    Réponses: 1
    Dernier message: 25/07/2006, 18h20
  3. Comment savoir quel programme utilise toute la RAM ?
    Par Gloup dans le forum Administration système
    Réponses: 4
    Dernier message: 26/05/2006, 18h22
  4. Savoir quel process utilise le disque dur
    Par GregPeck dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 29/12/2005, 13h53
  5. Comment faire pour savoir quel processus utilise un DLL
    Par Furius dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 02/11/2005, 18h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo