Jump to content

[VB6] Executar comandos DOS


w00t!

Recommended Posts

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..

Link to comment
Share on other 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. ;)

Link to comment
Share on other 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

ser.gifsartim.gif

Link to comment
Share on other 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..

Link to comment
Share on other 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.

ser.gifsartim.gif

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.