Como posso obter uma lista de todos os canais nomeados abertos no Windows?


86

Existe uma maneira fácil de testar se o pipe nomeado está funcionando corretamente? Quero ter certeza de que os dados que estou enviando do meu aplicativo estão realmente sendo enviados. Existe uma maneira rápida e fácil de obter uma lista de todos os tubos nomeados?

Respostas:


95

Você pode visualizá-los com o Process Explorer em sysinternals. Use a opção "Find -> Find Handle ou DLL ..." e insira o padrão "\ Device \ NamedPipe \". Ele mostrará quais processos têm quais canais abertos.


Verifique qual versão do Process Explorer você possui antes de tentar isso. Não funciona na v15.23, mas funciona na v16.02. (não tentei outras versões)
Carl

2
Para evitar possíveis exceções - como é mencionado em outras respostas - você pode usar minha solução, que é de nível mais baixo, mas funciona perfeitamente mesmo se o nome do pipe nomeado contiver caracteres inválidos no nome do arquivo. Consulte stackoverflow.com/questions/25109491/…
user2126375

2
Usar pipelist.exedo SysInternals é ainda mais simples, mas é apenas linha de comando.
Chris Charabaruk

79

No console do Windows Powershell, digite

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

Se a versão do seu sistema operacional for superior ao Windows 7, você também pode digitar
get-childitem \\.\pipe\

Isso retorna uma lista de objetos. Se você quiser apenas o nome:

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

3
Você pode querer considerar a abertura do Powershell como um administrador
dotNetE

2
Você também pode usar get-childitem \\. \ Pipe \
Chris Gillum

@ChrisGillum Tentei isso e recebi um erro "Não é possível encontrar o caminho '\\. \ Pipe \' porque ele não existe"
Andrew Shepherd

1
@AndrewShepherd Interessante. Qual sistema operacional você está usando? Ele funciona para mim no Windows Server 2012 e no Windows 10 (PowerShell v3 e v5 respectivamente).
Chris Gillum

1
@ChrisGillum Mas acabei de experimentar no meu dispositivo Windows Surface RT. Funciona lá. (PowerShell v4). Vou incorporar seu comentário na resposta.
Andrew Shepherd

57

Tente o seguinte:

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

6
está faltando uma barra. string [] listOfPipes = System.IO.Directory.GetFiles (@ "\\. \ pipe \");
dmex

Passei a noite toda procurando uma função para pesquisar ou listar tubos. Isso é exatamente o que eu precisava. Obrigado!!
swax

Qual é esse caminho especial? \\. \ parece ser usado para acesso bruto a uma unidade, mas de onde pipevem?
Kevin Doyon

2
@Kevin "\\. \" Significa "esta máquina" conforme msdn.microsoft.com/en-US/en-en/library/windows/desktop/…
Eugene Ryabtsev

5
Tivemos problemas com esse método no Windows 10 - obtendo o erro "O segundo fragmento de caminho não deve ser uma unidade ou nome UNC. Nome do parâmetro: caminho2"
Dai Bok

44

Use pipelist.exe da Sysinternals.


1
Consulte também handle.exe de sysinternals, que mostra quase todas as coisas que têm um identificador aberto.
JimR

19

Eu me deparei com um recurso no Chrome que lista todos os canais nomeados abertos navegando até "file: //.//pipe//"

Como não consigo encontrar nenhuma referência a isso e isso tem sido muito útil para mim, pensei em compartilhar.


Você pode explicar um pouco mais?
Dieter Meemken

Isso lista meus cachimbos. Surpreendente! (note que isso funcionará porque funciona como um diretório, como mostra a resposta de Andrew Shepherd)
Martín Coll

Eu acho que isso é para depuração / diagnóstico, já que percebi que o Chrome usa muitos pipes nomeados - encontrei 125 pipes "cromados" mesmo quando o Chrome não estava funcionando!
Cocowalla

16

C #:

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


7

O segundo tubo foi interpretado por este site quando enviado ... Você precisa de duas barras invertidas no início. Portanto, certifique-se de usar System.IO.Directory.GetFiles (@ "\\. \ Pipe \").

Observe que eu vi essa chamada de função lançar um 'caractere ilegal no caminho'. exceção quando um dos tubos em minha máquina tinha caracteres inválidos. PipleList.exe funcionou bem, então parece um bug no código .net da MS.


1
A observação sobre 'caracteres ilegais no caminho' é um ponto importante, porque é muito comum que os programas abram nomes de pipe que acionam isso. Qualquer programa que abra um pipe nomeado como C:\myLocation\someFile.xcausará esse erro.
DS539
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.