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

Dotnet Discussion :

[C#][VB.NET]Trouver un processus


Sujet :

Dotnet

  1. #1
    Membre confirmé Avatar de FraktaL
    Profil pro
    Inscrit en
    Août 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 110
    Par défaut [C#][VB.NET]Trouver un processus
    Bonjour à tous,

    J'ai un petit problème; je souhaite copier un fichier utilisé par un processus au travers de mon application (File.Copy()). Bien entendu une exception est générée.

    Je souhaiterais alors suspendre le processus qui utilise ce fichier. Pour ce faire je dois localiser le processus et trouver son ID.

    Quelqu'un a-t-il une idée?

    Merci d'avance pour toute aide.

    PS: si quelqu'un a une autre solution pour copier un fichier utilisé je suis preneur aussi...

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Tu récupères le contenu ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
    Puis après tu crées un nouveau fichier à partir de là

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par FraktaL
    Je souhaiterais alors suspendre le processus qui utilise ce fichier
    Le fait de suspendre l'autre process ne fermera pas le handle du fichier, tu ne pourras pas y accéder

    Citation Envoyé par lutecefalco Voir le message
    Tu récupères le contenu ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
    Puis après tu crées un nouveau fichier à partir de là
    Ca ne marchera que si l'autre process a aussi ouvert le fichier en autorisant le partage.


    Par contre tu peux tester si le fichier est ouvert par un autre process, et copier le fichier quand il est libéré. Voir ce post

  4. #4
    Membre confirmé Avatar de FraktaL
    Profil pro
    Inscrit en
    Août 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 110
    Par défaut
    Merci pour ta réponse.

    Si je ne peux fermer le handle, comment ferais-je alors si je voulais fermer le processus?

    J'ai vraiment besoin d'accéder à ces fichiers. Sous windows, je peux faire une copie d'un fichier utilisé; il doit bien y avoir un moyen d'y arriver via mon application. Est-ce qu'une copie en utilisant les APIs serait possible?

    Et sinon, comment localiser le processus qui utilise le fichier?

    Je rencontre le problème nottement en essayant de copier des fichiers de bases de données SQL Server (.MDF et .LBF) lesquels sont utilisés en permanence.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par FraktaL Voir le message
    Si je ne peux fermer le handle, comment ferais-je alors si je voulais fermer le processus?
    Process.Kill
    Mais c'est pas forcément une bonne idée, tu risques de te retrouver avec des fichiers corrompus

    Citation Envoyé par FraktaL Voir le message
    Et sinon, comment localiser le processus qui utilise le fichier?
    Ben ça doit être possible, vu que des programmes comme Process Explorer le font, mais je sais pas trop comment...

    Citation Envoyé par FraktaL Voir le message
    Je rencontre le problème nottement en essayant de copier des fichiers de bases de données SQL Server (.MDF et .LBF) lesquels sont utilisés en permanence.
    Ah ben si c'est pour copier des fichiers de base de données, il faut arrêter la base... mais proprement, pas par un kill . Tu peux par exemple arrêter le service SQL Server avec "net stop"

  6. #6
    Membre confirmé Avatar de FraktaL
    Profil pro
    Inscrit en
    Août 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 110
    Par défaut
    Le problème est que je ne connais pas à l'avance tous les fichiers. J'ai donc cité un exemple que j'ai rencontré avec les fichiers sql server mais il y en a d'autres...

    Je suis vraiment coincé...

  7. #7
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Tu pourrai tenter la copie manuelle. Pour celà tu peut utiliser
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    FileStream fichier_source = new FileStream("Nom",FileMode.Open,FileAccess.Read);
    déjà là tu pourrai lire les fichiers utilisés par les applications qui autorisent la lecture (ça ne marchera pas toujours, certaines demandent un accès exclusif).

Discussions similaires

  1. Script permettant de trouver les processus root et de les tuer
    Par biglittlekiss dans le forum Administration système
    Réponses: 3
    Dernier message: 18/11/2006, 11h40
  2. [VB.NET] Trouver noeud dans un TreeView
    Par PM_calou dans le forum Windows Forms
    Réponses: 7
    Dernier message: 04/10/2006, 18h42
  3. [VB.NET] Trouver un handle, simuler clic sur bouton
    Par 6su7 dans le forum Windows Forms
    Réponses: 33
    Dernier message: 21/08/2006, 10h38
  4. [VB.NET] Gestion de processus
    Par Lahouari dans le forum Windows Forms
    Réponses: 2
    Dernier message: 17/03/2005, 10h17
  5. [VB.NET] Killer un processus
    Par spikelille dans le forum ASP.NET
    Réponses: 3
    Dernier message: 25/07/2004, 20h23

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