• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

w00t!

[VB6] Executar comandos DOS

15 mensagens neste tópico

Pessoal, sabem como é que posso executar comandos em DOS em vb?

Por exemplo, executar o comando echo olá. Abrir uma janela do cmd, a dizer Olá.

Agradecia ajuda.. thx.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Boas e bem vindo antes de mais.

http://www.portugal-a-programar.hugosoft.net/viewtopic.php?t=51 aqui nesse pequeninos programas tens la isso algures, ve lá se encontras. Se não deres com isso ou logo á noite com mais tempo logo vejo e logo te digo

Agradecia que desses uma vista de olhos, e depois me dissesses.. thx. :)

para fazeres ixo e so fazeres.... o comando shell ("")

Não dá, porque os comandos "Echo"; "Start" são comandos internos do Dos, (isto no Windows XP) se fosse no 98 provavelmente dava..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Exprimenta a chamar o CMD.exe e enviares os comandos com SendKey.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao tinha tido tempo de explicar bem ... a usar akele shell tens k xamar um programa um exe neste caso do msdos k no xp e o cmd.exe e dpx pode la atribuir argumentos dentro... desse shell ... so te dei mssm um comando nada mais ...

entao e como e k fizeste ja agora para o ppl focar a saber

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
nao tinha tido tempo de explicar bem ... a usar akele shell tens k xamar um programa um exe neste caso do msdos k no xp e o cmd.exe e dpx pode la atribuir argumentos dentro... desse shell ... so te dei mssm um comando nada mais ...

entao e como e k fizeste ja agora para o ppl focar a saber

Pois, é como é que metes os atributos? Pela lógica usa-se

shell("cmd echo Olá")

Mas assim só abre o cmd.. Ou o comando echo ou start, tem-se que meter entre qualquer caracter?

Eu queria usar o ms-dos por causa do comando /wait que ele possui, mas acabei por concluir que dá para fazer isso em vb.

Estou a fazer um programa com actualizações do WinXP, saquei um script de um site "shellandwait", que executa o 2º shell apenas quando o 1º acabar, era isso que queria fazer..

Mas estou com mais problemas.. aqui está o código.

Function ShellAndWait(FileName As String)
   Dim objScript
   On Error GoTo ERR_OpenForEdit
   Set objScript = CreateObject("WScript.Shell")
       ShellApp = objScript.Run(FileName, 1, True)
       ShellAndWait = True
EXIT_OpenForEdit:
       Exit Function
ERR_OpenForEdit:
       MsgBox Err.Description
       GoTo EXIT_OpenForEdit
   End Function

Private Sub Timer1_Timer()
ShellAndWait App.Path & ("\WindowsXP-KB873333-x86-PTG.exe /M /Q")
ShellAndWait App.Path & ("\WindowsXP-KB873339-x86-PTG.exe /M /Q")
ShellAndWait App.Path & ("\WindowsXP-KB883939-x86-PTG.exe /M /Q")
End Sub

Até aqui tudo bem.. mas se meto mais 'exe's' a abrir, dá-me um erro no Windows "A estação de trabalho vai ser encerrada", e fecha-me os programas todos que tenho aberto, inclusive o .exe das actualizações, mas se for ao taskmanager dá para ver o processo do exe aberto, e das actualizações ou seja, ele continua a instalar as actualizações mas com o programa fechado (ou pelo menos não está visivel).. Sabem alguma alternativa de fazer isto, ou alguma ideia de onde vem o erro?

Cumprimentos. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pelo que percebi o que queres fazer é executar uma aplicação apartir de uma aplicação de VB.NET e aguadares que esta termine para executar outra e assim sucessivamente.

Aconselho-te a usares o Shell, uma vez que este pode aguardar que a aplicação seja encerrada, assim como definir um timeout e o tipo de focus.

Shell ( Pathname, EstiloDaJanela, Wait, Timeout)

Se for necessário podes colocar parametros pra instalação silenciosa no pathname.

Em relação ao erro há que ter em conta que as actualizações por vezes necessitam que todos os programas estejam encerrados. Se a actualização necessitar de reiniciar então tens outros problemas. Nesse caso aconselho-te a guardar a informação das actualizações já instaladas e a colocares a aplicação no arranque para que esta corra a actualização seguinte no próximo arranque.

Com os melhores cumprimentos,

Sérgio Matias

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

que vb usas?

Se for o ultimo podes usar:

Console.WriteLine("olá")

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Pelo que percebi o que queres fazer é executar uma aplicação apartir de uma aplicação de VB.NET e aguadares que esta termine para executar outra e assim sucessivamente.

Aconselho-te a usares o Shell, uma vez que este pode aguardar que a aplicação seja encerrada, assim como definir um timeout e o tipo de focus.

Shell ( Pathname, EstiloDaJanela, Wait, Timeout)

Se for necessário podes colocar parametros pra instalação silenciosa no pathname.

Em relação ao erro há que ter em conta que as actualizações por vezes necessitam que todos os programas estejam encerrados. Se a actualização necessitar de reiniciar então tens outros problemas. Nesse caso aconselho-te a guardar a informação das actualizações já instaladas e a colocares a aplicação no arranque para que esta corra a actualização seguinte no próximo arranque.

Com os melhores cumprimentos,

Sérgio Matias

Hey, desde já obrigado pela ajuda.

Também dá pra aplicar esse comando "wait" no shell atravez do vb6? É o que uso..

Edited:

Ok, exprimentei assim:

Shell App.Path & ("\WindowsXP-KB873339-x86-PTG.exe /M /Q"), vbMinimizedNoFocus, wait

Mas deu erro.. :cry:

Em relação ao erro há que ter em conta que as actualizações por vezes necessitam que todos os programas estejam encerrados. Se a actualização necessitar de reiniciar então tens outros problemas. Nesse caso aconselho-te a guardar a informação das actualizações já instaladas e a colocares a aplicação no arranque para que esta corra a actualização seguinte no próximo arranque.

Eu já testei as actualizações todas num .bat, e actualizava na boa..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O código que te indiquei é de VB.NET pelo que no VB6 não funciona, uma vez que o comando shell foi melhorado VB.NET.

Estive a pesquisar e quase todas as soluções passam por monitorizar os processos, o que é um método complexo.

Vou tentar obter algumas informações sobre uma forma mais simplificada, mas por agora não sou grande ajuda.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora