Comment puis-je obtenir une liste de tous les canaux nommés ouverts dans Windows?


86

Existe-t-il un moyen simple de tester si votre tube nommé fonctionne correctement? Je veux m'assurer que les données que j'envoie depuis mon application sont effectivement envoyées. Existe-t-il un moyen rapide et facile d'obtenir une liste de tous les tubes nommés?

Réponses:


95

Vous pouvez les afficher avec Process Explorer à partir de sysinternals. Utilisez l'option "Rechercher -> Rechercher un descripteur ou une DLL ..." et entrez le modèle "\ Device \ NamedPipe \". Il vous montrera quels processus ont quels tuyaux ouverts.


Vérifiez la version de Process Explorer dont vous disposez avant d'essayer cela. Cela ne fonctionne pas sur la v15.23, mais sur la v16.02. (Je n'ai pas essayé d'autres versions)
Carl

2
Pour éviter d'éventuelles exceptions - comme cela est mentionné dans d'autres réponses - vous pouvez utiliser ma solution qui est plus bas niveau mais fonctionne comme un charme même si le nom du tube nommé contient des caractères invalides en guise de nom de fichier. Veuillez consulter stackoverflow.com/questions/25109491/…
user2126375

2
L'utilisation pipelist.exede SysInternals est encore plus simple, mais c'est uniquement en ligne de commande.
Chris Charabaruk

79

Dans la console Windows Powershell, saisissez

[System.IO.Directory]::GetFiles("\\.\\pipe\\")

Si la version de votre système d'exploitation est supérieure à Windows 7, vous pouvez également taper
get-childitem \\.\pipe\

Cela renvoie une liste d'objets. Si vous voulez uniquement le nom:

(get-childitem \\.\pipe\).FullName

3
Vous voudrez peut-être envisager d'ouvrir Powershell en tant qu'administrateur
dotNetE

2
Vous pouvez également utiliser get-childitem \\. \ Pipe \
Chris Gillum

@ChrisGillum J'ai essayé cela, et j'ai obtenu une erreur "Impossible de trouver le chemin '\\. \ Pipe \' car il n'existe pas"
Andrew Shepherd

1
@AndrewShepherd Intéressant. Sur quel OS utilisez-vous? Cela fonctionne pour moi sur Windows Server 2012 et Windows 10 (PowerShell v3 et v5 respectivement).
Chris Gillum

1
@ChrisGillum Mais je viens de l'essayer sur mon appareil Windows Surface RT. Cela fonctionne là-bas. (Powershell v4). Je vais intégrer votre commentaire dans la réponse.
Andrew Shepherd

57

Essayez plutôt ce qui suit:

String[] listOfPipes = System.IO.Directory.GetFiles(@"\\.\pipe\");

6
votre manque une barre oblique. string [] listOfPipes = System.IO.Directory.GetFiles (@ "\\. \ pipe \");
dmex

J'ai passé toute la nuit à chercher une fonction pour rechercher ou lister les tubes. C'est exactement ce dont j'avais besoin. Merci!!
swax

Quel est ce chemin spécial? \\. \ semble être utilisé pour l'accès brut à un lecteur, mais d'où pipevient-il?
Kevin Doyon

2
@Kevin "\\. \" Signifie "cette machine" selon msdn.microsoft.com/en-US/en-en/library/windows/desktop/…
Eugene Ryabtsev

5
Nous avons eu des problèmes avec cette méthode fonctionnant sous Windows 10 - obtenant l'erreur "Le deuxième fragment de chemin ne doit pas être un lecteur ou un nom UNC. Nom du paramètre: chemin2"
Dai Bok

44

Utilisez pipelist.exe de Sysinternals.


1
Voir aussi handle.exe de sysinternals qui affichera presque toutes les choses qui ont un handle ouvert.
JimR

19

Je suis tombé sur une fonctionnalité de Chrome qui répertorie tous les tubes nommés ouverts en accédant à "file: //.//pipe//"

Comme je n'arrive pas à trouver de référence à cela et que cela m'a été très utile, j'ai pensé que je pourrais partager.


Pouvez-vous expliquer un peu plus?
Dieter Meemken

Cela répertorie mes tuyaux. Incroyable! (notez que cela fonctionnera car il fonctionne comme un répertoire, comme le montre la réponse d'Andrew Shepherd)
Martín Coll

Je suppose que c'est pour le débogage / diagnostic, car j'ai remarqué que Chrome utilise beaucoup de tuyaux nommés - j'ai trouvé 125 tuyaux "chrome" même lorsque Chrome ne fonctionne pas!
Cocowalla le



7

Le deuxième tube a été interprété par ce site Web lors de sa soumission ... Vous avez besoin de deux barres obliques inverses au début. Assurez-vous donc d'utiliser System.IO.Directory.GetFiles (@ "\\. \ Pipe \").

Notez que j'ai vu cet appel de fonction lancer un «caractères illégaux dans le chemin». exception lorsque l'un des tuyaux de ma machine avait des caractères non valides. PipleList.exe fonctionnait bien, donc cela semble être un bogue dans le code .net de MS.


1
La note sur les «caractères illégaux dans le chemin» est un point important, car il est très courant que les programmes ouvrent des noms de canaux qui déclenchent cela. Tout programme qui ouvre un tube nommé comme C:\myLocation\someFile.xprovoquera cette erreur.
dss539
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.