Vi o outro tópico e estou tendo outro problema. O processo está iniciando (vi no gerenciador de tarefas), mas a pasta não está abrindo na minha tela. O que há de errado?
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
Vi o outro tópico e estou tendo outro problema. O processo está iniciando (vi no gerenciador de tarefas), mas a pasta não está abrindo na minha tela. O que há de errado?
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
Respostas:
Você se certificou de que a pasta " c:\teste
" exista? Caso contrário, o explorer abrirá mostrando uma pasta padrão (no meu caso " C:\Users\[user name]\Documents
").
Atualizar
Eu tentei as seguintes variações:
// opens the folder in explorer
Process.Start(@"c:\temp");
// opens the folder in explorer
Process.Start("explorer.exe", @"c:\temp");
// throws exception
Process.Start(@"c:\does_not_exist");
// opens explorer, showing some other folder)
Process.Start("explorer.exe", @"c:\does_not_exist");
Se nenhum deles (bem, exceto aquele que gera uma exceção) funcionar no seu computador, não acho que o problema esteja no código, mas no ambiente. Se for esse o caso, eu tentaria um (ou ambos) do seguinte:
Process.Start(path)
ativa a janela (só pode piscar na barra de tarefas, não trazida para a frente); explorer.exe
O parâmetro + abre uma nova janela sempre na frente (mas várias vezes a mesma janela). Então, ambos têm advertências.
Process.Start(@"c:\temp")
deve ser usado com cautela. Se c:\temp.com
existir, a chamada da função será aberta c:\temp.com
. Consulte forums.iis.net/p/1239773/2144186.aspx para obter mais detalhes.
Process.Start(@"c:\temp")
é suscetível a abrir uma pasta diferente, como C:\temp.exe
ou C:\temp.cmd
. Veja esse problema em que o próprio VS exibe comportamento de buggy . Você pode evitar isso usando a explorer.exe
variante ou (melhor, IMO) sempre anexando a Path.DirectorySeparatorChar
. Por exemplo Process.Start(@"C:\temp\")
,.
Apenas para completar, se tudo o que você deseja fazer é abrir uma pasta, use o seguinte:
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() {
FileName = "C:\\teste\\",
UseShellExecute = true,
Verb = "open"
});
Certifique-se de que FileName termine com Path.DirectorySeparatorChar
para que ele aponte inequivocamente para uma pasta. (Obrigado a @binki.)
Esta solução não funcionará para abrir uma pasta e selecionar um item, pois não parece haver um verbo para isso.
C:\teste.exe
ou C:\teste.cmd
existir, o Explorer abrirá para essa outra pasta em vez da que você pretendia. Para evitar isso, você pode anexar Path.DirectorySeparatorChar
a ao caminho. Veja como o próprio VS comete o mesmo erro .
Verb = "select"
, mas infelizmente não pode. Independentemente, ótima resposta!
Verb = "open"
não era necessária. (Testado no Windows, outros do sistema operacional podem ser diferentes.)
.Verbs
propriedade em ProcessStartInfo
( docs.microsoft.com/en-us/dotnet/api/… )
Se você deseja selecionar o arquivo ou a pasta, pode usar o seguinte:
Process.Start("explorer.exe", "/select, c:\\teste");
/select
para/open
Você está usando o símbolo @, o que elimina a necessidade de escapar das barras invertidas.
Remova o @ ou substitua \\ por \
Você não precisa da barra invertida dupla ao usar cadeias sem escape:
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Você deve usar uma das System.Diagnostics.Process.Start()
sobrecargas. É bem simples!
Se você não colocar o nome do arquivo do processo que deseja executar ( explorer.exe
), o sistema o reconhecerá como um caminho de pasta válido e tentará anexá-lo ao processo do Explorer já em execução. Nesse caso, se a pasta já estiver aberta, o Explorer não fará nada.
Se você colocar o nome do arquivo do processo (como você fez), o sistema tentará executar uma nova instância do processo, passando a segunda string como parâmetro. Se a sequência for uma pasta válida, ela será aberta no processo recém-criado; caso contrário, o novo processo não fará nada.
Não sei como os caminhos de pasta inválidos são tratados pelo processo em qualquer caso. Usar System.IO.Directory.Exists()
deve ser suficiente para garantir isso.
Path.DirectorySeparatorChar
. Caso contrário, se uma pasta com o mesmo nome, mas .cmd
ou .exe
possivelmente outros sufixos, também existir, o Explorer será aberto para essa outra pasta - ou, se forem realmente executáveis ou scripts, ele será executado em vez de abrir a pasta como você deseja.
Use uma versão sobrecarregada do método que usa uma instância ProcessStartInfo e defina a propriedade ProcessWindowStyle com um valor que funcione para você.
Você está escapando da barra invertida quando o sinal de arroba faz isso por você.
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Esse código funciona bem no ambiente do VS2010 e abre a pasta local corretamente, mas se você hospedar o mesmo aplicativo no IIS e tentar abrir, ele falhará com certeza.
Acabei de ter esse problema e descobri o porquê. minha razão não está listada aqui; portanto, qualquer pessoa que receba esse problema e nenhum deles o corrija.
Se você executar o Visual Studio como outro usuário e tentar usar Process.Start, ele será executado nesse contexto de usuários e você não o verá na tela.
Estranho.
Se não conseguir encontrar o explorer.exe, você deve receber uma exceção. Se não conseguir encontrar a pasta, ainda deve abrir alguma pasta (por exemplo, meus documentos)
Você diz que outra cópia do Explorer aparece no gerenciador de tarefas, mas não pode vê-la.
É possível que esteja abrindo fora da tela (ou seja, outro monitor)?
Ou, por acaso, você está fazendo isso em um serviço não interativo?
Ele abre corretamente quando você executa o "explorer.exe c: \ teste" no menu Iniciar? Há quanto tempo você está tentando isso? Vejo um comportamento semelhante quando minha máquina possui muitos processos e quando abro um novo processo (os conjuntos dizem o IE). Ele inicia no gerenciador de tarefas, mas não aparece no front end. Você tentou reiniciar?
O código a seguir deve abrir uma nova instância do explorer
class sample{
static void Main()
{
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
}
}
Você tem muitos aplicativos em execução quando está tentando isso? Às vezes, encontro um comportamento estranho no trabalho porque meu sistema fica sem os identificadores GDI, pois tenho muitas janelas abertas (nossos aplicativos usam muito).
Quando isso acontece, as janelas e os menus de contexto não aparecem mais até eu fechar algo para liberar alguns identificadores de GDI.
O limite padrão no XP e no Vista é 10000. Não é incomum que meu DevStudio tenha 1500 identificadores de GDI, portanto, se você tiver algumas cópias do Dev studio abertas, poderá consumi-las rapidamente. Você pode adicionar uma coluna no TaskManager para ver quantas alças estão sendo usadas por cada processo.
Há um ajuste no registro que você pode fazer para aumentar o limite.
Para obter mais informações, consulte http://msdn.microsoft.com/en-us/library/ms724291(VS.85).aspx
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
Apenas mude o caminho ou declare-o em um string