none
Como abrir programas de terceiros pelo vb apenas sabendo o nome dele! RRS feed

  • Pergunta

  • Boa noite pessoal!

    Estou desenvolvendo um programa em que ele pode abrir um programa do computador do usuário apenas pelo nome fornecido pelo usuário.

    Por exemplo, tenho um textbox e um button. Na textbox o usuário fornece apenas os nome do aplicativo que ele quer que seja aberto. Por exemplo: Google Chrome ou Microsoft Word. (Não o caminho)

    Quando ele clicar no botão, o programa tem que ver se o aplicativo existe ou não. Se ele existe dai o meu programa abre, senão mostra uma mensagem de erro.

    Tem como fazer isso? Agradeço desde já!

    domingo, 8 de junho de 2014 23:42

Respostas

  • Edison, bom dia.

    Utilize o método Process.Start como nesse link de referência:

    C# Process

    Ex:

    System.Diagnostics.Process.Start(@"notepad.exe");

    Teste e poste seus resultados.

    Abraços !


    Diego Murakami View Diego Murakami's LinkedIn profile - MCP, MS, MCSD
    * Por favor "Marcar como Resposta" caso esta for útil para sua dúvida.

    segunda-feira, 9 de junho de 2014 13:37
  • Olá,

    Só será possível acessar programas sem passar o caminho se este estiver em um caminho comum/conhecido pelo windows, na mesma pasta da aplicação ou se tiver uma variável de ambiente apontando para a(s) pasta(s) deste executável (é possível criar suas próprias se necessário).

    Caso algum dos casos acima resolva, você pode usar o código que o Diego passou.

    Caso nenhum destes casos se apliquem, só seria possível varrendo o disco inteiro para descobrir o local do executável, o que seria extremamente lento.


    Diego Cotini do Couto - MCTS .NET Framework 3.5, ASP.NET Applications


    • Editado Diego Cotini terça-feira, 10 de junho de 2014 00:51 erro portugues
    • Sugerido como Resposta Diego Murakami terça-feira, 10 de junho de 2014 13:59
    • Marcado como Resposta Ricardo Barbosa Cortes terça-feira, 10 de junho de 2014 20:13
    segunda-feira, 9 de junho de 2014 23:52

Todas as Respostas

  • Edison, bom dia.

    Utilize o método Process.Start como nesse link de referência:

    C# Process

    Ex:

    System.Diagnostics.Process.Start(@"notepad.exe");

    Teste e poste seus resultados.

    Abraços !


    Diego Murakami View Diego Murakami's LinkedIn profile - MCP, MS, MCSD
    * Por favor "Marcar como Resposta" caso esta for útil para sua dúvida.

    segunda-feira, 9 de junho de 2014 13:37
  • Olá,

    Só será possível acessar programas sem passar o caminho se este estiver em um caminho comum/conhecido pelo windows, na mesma pasta da aplicação ou se tiver uma variável de ambiente apontando para a(s) pasta(s) deste executável (é possível criar suas próprias se necessário).

    Caso algum dos casos acima resolva, você pode usar o código que o Diego passou.

    Caso nenhum destes casos se apliquem, só seria possível varrendo o disco inteiro para descobrir o local do executável, o que seria extremamente lento.


    Diego Cotini do Couto - MCTS .NET Framework 3.5, ASP.NET Applications


    • Editado Diego Cotini terça-feira, 10 de junho de 2014 00:51 erro portugues
    • Sugerido como Resposta Diego Murakami terça-feira, 10 de junho de 2014 13:59
    • Marcado como Resposta Ricardo Barbosa Cortes terça-feira, 10 de junho de 2014 20:13
    segunda-feira, 9 de junho de 2014 23:52
  • Olá Diego Murakami, o código até funciona mas não atende todas as minhas necessidades! Aqui no meu computador ele consegue abrir só os programas padrões do Windows (ex: calculadora, notepad) e programas cujo seus nomes possuem uma única palavra (ex: evernote), não consegui abrir outros programas com nomes com mais de uma palavra (ex: google chrome). Mas obrigado mesmo assim! Desculpe-me pela demora em responder!
    sábado, 14 de junho de 2014 23:31
  • Olá Diego Couto!

    Bom a minha ideia é abrir qualquer programa instalado no computador apenas fornecendo o nome do aplicativo em uma TextBox! Preciso que esse processo não demore muito, e iria demorar muito mesmo se o programa posse verificar no computador todo, será que é possível verificar de forma rápida apenas na pasta "C:\Program Files" se o programa existe?

    sábado, 14 de junho de 2014 23:38
  • Olá,

    A sua necessidade é realmente complicada de achar uma solução. Existem várias maneiras que o pessoal usa para tentar achar aplicativos instalados, mas nenhuma é 100%. Existem maneiras utilizando WMI (que não é recomendada para este caso e utilizando o registro, que possui algumas falhas também).

    Se pretende varrer o diretório "Program Files", seguem abaixo duas formas:

    string programa = string.Concat(valor_do_textbox, ".exe"); string caminhoCompletoPrograma = System.IO.Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), programa, System.IO.SearchOption.AllDirectories).FirstOrDefault();

    if (!string.IsNullOrEmpty(caminhoCompletoPrograma))
    {
        System.Diagnostics.Process.Start(caminhoCompletoPrograma);
    }
    * Problema= se o método GetFiles encontrar algum arquivo protegido antes de encontrar o arquivo pretendido e sua aplicação não tiver privilégios suficientes, irá estourar uma exception.

    public string ProcuraCaminhoCompletoArquivo(string diretorio, string arquivo)
    {
    	string retorno = null;
    
    	try
    	{
    		if (Directory.GetFiles(diretorio, arquivo).Any())
    		{
    			retorno = Directory.GetFiles(diretorio, arquivo).FirstOrDefault();
    		}
    		else
    		{
    			foreach (string dir in Directory.GetDirectories(diretorio))
    			{
    				retorno = ProcuraCaminhoCompletoArquivo(dir, arquivo);
    				if (retorno != null) { break; }
    			}
    		}
    	}
    	catch { }
    
    	return retorno;
    }
    
    
    //Método do seu evento
    string programa = string.Concat(valor_do_textbox, ".exe");
    
    string caminhoCompletoPrograma = ProcuraCaminhoCompletoArquivo(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), programa);
    
    if (!string.IsNullOrEmpty(caminhoCompletoPrograma))
    {
    	System.Diagnostics.Process.Start(caminhoCompletoPrograma);
    }

    * Esta função recursiva se difere da primeira, pois foi feita manualmente e consegue contornar o problema de arquivos protegidos.

    Em termos de performance, esta é uma pasta que pode conter muita informação, portanto, provavelmente irá demorar um pouco. Outro ponto a ser observado é que em Windows 64 bits, podem haver duas pastar de "Program Files", sendo: "Program Files" e "Program Files X86", portanto, a sua aplicação terá que verificar as duas pastas (a outra seria Environment.SpecialFolder.ProgramFilesX86) e ficará mais lento ainda a procura.

    Faça um teste com os códigos que passei e verifique se atende sua necessidade.


    Diego Cotini do Couto - MCTS .NET Framework 3.5, ASP.NET Applications


    • Editado Diego Cotini segunda-feira, 16 de junho de 2014 07:02 falta de informação
    segunda-feira, 16 de junho de 2014 06:47