none
Comando Shell

    Question

  •  

    Olá preciso de ajuda

    Não estou conseguindo executar um arquivo .bat, que fica em outro diretório, fora do diretório da aplicação.

    Recebo a mensagem de que o arquivo não existe e quando vou checar , ele esta tentando executar o arquivo .bat

    no diretório da aplicação.

    Alguém pode me ajudar?

     

    obs: linha de código que estou tentando executar :

    Call Shell("C:\Arquivos de programas\WebEDIMercadorClient_V3.5\STARTCLIENT.BAT", AppWinStyle.MaximizedFocus, True)

    Friday, January 23, 2009 10:40 AM

Answers

  • Olá Edson,

     

    Por padrão, o diretório de trabalho da aplicação (Working Directory) é o diretório onde está o seu executável, portanto o seu arquivo BAT está sendo executado em outro diretório, mas utilizando o diretório da sua aplicação como diretório de trabalho.

     

    O que eu sugiro, é que em primeiro lugar você esqueça a função Shell (já que ela é uma herança do VB6 apenas para manter a compatibilidade com aplicações que foram desenvolvidas nessa linguagem), e utilize a classe Process do .NET, que te permite maior controle sobre a execução do processo, inclusive permitindo definir o diretório de trabalho que você quer.

     

    Aproveitando o seu exemplo, ficaria mais ou menos assim:

     

    Code Snippet

     

     'Cria uma instância da classe Process

     Dim processo As New Process()

     

     'Define o diretório de trabalho desse processo.

     'É como se você utilizasse o comando "CD NomeDaPasta" do DOS :)

     processo.StartInfo.WorkingDirectory = "C:\Arquivos de programas\WebEDIMercadorClient_V3.5\"

     

     'Define o arquivo que ser  executado

     processo.StartInfo.FileName = "STARTCLIENT.BAT"

     

     'Define que a janela iniciará maximizada

     processo.StartInfo.WindowStyle = ProcessWindowStyle.Maximized

     

     'Inicia o processo

     processo.Start()

     

     'Aguarda que ele termine de executar

     processo.WaitForExit()

     

     

    Vale lembrar que a classe Process está no namespace System.Diagnostics.

     

    Abraços,

    Caio Proiete

     

    PS: Por curiosidade, esse WebEDIMercatorClient é o mesmo "Mercator" da Azertia / Indra?




    Caio Proiete
    http://www.caioproiete.com
    Friday, January 23, 2009 11:11 AM

All replies

  • Olá Edson,

     

    Por padrão, o diretório de trabalho da aplicação (Working Directory) é o diretório onde está o seu executável, portanto o seu arquivo BAT está sendo executado em outro diretório, mas utilizando o diretório da sua aplicação como diretório de trabalho.

     

    O que eu sugiro, é que em primeiro lugar você esqueça a função Shell (já que ela é uma herança do VB6 apenas para manter a compatibilidade com aplicações que foram desenvolvidas nessa linguagem), e utilize a classe Process do .NET, que te permite maior controle sobre a execução do processo, inclusive permitindo definir o diretório de trabalho que você quer.

     

    Aproveitando o seu exemplo, ficaria mais ou menos assim:

     

    Code Snippet

     

     'Cria uma instância da classe Process

     Dim processo As New Process()

     

     'Define o diretório de trabalho desse processo.

     'É como se você utilizasse o comando "CD NomeDaPasta" do DOS :)

     processo.StartInfo.WorkingDirectory = "C:\Arquivos de programas\WebEDIMercadorClient_V3.5\"

     

     'Define o arquivo que ser  executado

     processo.StartInfo.FileName = "STARTCLIENT.BAT"

     

     'Define que a janela iniciará maximizada

     processo.StartInfo.WindowStyle = ProcessWindowStyle.Maximized

     

     'Inicia o processo

     processo.Start()

     

     'Aguarda que ele termine de executar

     processo.WaitForExit()

     

     

    Vale lembrar que a classe Process está no namespace System.Diagnostics.

     

    Abraços,

    Caio Proiete

     

    PS: Por curiosidade, esse WebEDIMercatorClient é o mesmo "Mercator" da Azertia / Indra?




    Caio Proiete
    http://www.caioproiete.com
    Friday, January 23, 2009 11:11 AM
  • Olá Caio

    Obrigado por ajudar, consegui resolver com o código abaixo.

    Obrigado

     

    Dim ShellProcess As New Process

    'ShellProcess.StartInfo.FileName = "C:\Arquivos de programas\WebEDIMercadorClient_V3.5\STARTCLIENT.BAT"

    ShellProcess.StartInfo.FileName = "teste.bat"

    ShellProcess.StartInfo.UseShellExecute = True

    ShellProcess.StartInfo.WindowStyle = ProcessWindowStyle.Maximized

    ShellProcess.StartInfo.WorkingDirectory = "C:\Mercador\"

    ShellProcess.Start()

    ShellProcess.WaitForExit()

    Friday, January 23, 2009 11:35 AM