Kontroll går til neste uttalelse umiddelbart etter å ha kjørt en kommando ved hjelp Run metode

stemmer
0

Jeg har skript for å avinstallere en pakke si pkg_1 bruke det UninstallString (dvs. setup.exe -Fjern). Etter at den prøver å fjerne en annen pakke si pkg_2. Avinstalleringen av pkg_1 tar ca 1 til 2 minutter. skriptet ser ut som nedenfor

rc = shellobj.Run(cmd /C  & uninstall_string_1 &  /silent,0, true)
rc1 = shellobj.Run(cmd /C  & uninstall_string_2 &  /silent,0, true)

Her hva som er mitt problem er, hvis du plasserer WScript.sleep (120000) mellom over to uttalelser, er begge pakkene bli fjernet. Ellers er uninstaaltion av pkg_1 stanset og avinstallering av pkg_2 begynner umiddelbart. Som et resultat bare pkg_2 er å få fjernet (uten søvn).

Hvordan kan jeg gjøre avinstalleringen av to pakker uten å bruke søvn metoden?

FYI Hvis du kjører uninstall_string_1 fra ledeteksten, vil ny melding bli opned etter 0-5 sekunder og avinstallasjon fortsetter i bakgrunnen

Publisert på 10/04/2013 klokken 03:49
kilden bruker
På andre språk...                            


2 svar

stemmer
0

Arjun, jeg leste dette i et annet forum:

Når vi bruker skript for å installere eller avinstallere pakker, det avhenger veldig mye på gjennomføringen av pakken. La oss si setup.exe selv kjøre som prosess A. Prosess En spiller noen nominell verifisering gyter deretter et prosess B, den virkelige installasjon motor, deretter lukke seg ut. I dette tilfellet har bWaitOnReturn (som du har satt til å true i koden) gjort sitt arbeid og kontroll vil overlevere til neste setning. Imidlertid er prosessen B fortsatt kjører. Som er ute av kontroll av bWaitOnReturn. Så din andre pakken vil starte før 1rst pakken er faktisk ferdig. Kanskje 1rst pakken ikke er faktisk stoppet, kan det ta tid og gjennomføring i bakgrunnen. Det er bare en gjetning anyways.

Hvis det ikke er tilfelle, kan du også prøve dette:

Set obj0 = CreateObject("WScript.Shell")
Set objExec = obj0.Exec("your package../../")
'  We will set a loop until finished
Do While objExec.Status <> 1
WScript.Sleep 100
Loop

Så hver 100ms, vil skriptet sjekke om pakken har fullført gjennomføring. Og hvis den har, vil den flytte til neste setning.

Svarte 10/04/2013 kl. 05:31
kilden bruker

stemmer
0

Prøv denne:

strCmd = uninstall_string_1 & " & " & uninstall_string_2
rc = shellObj.Run("cmd /C " & strCmd, 0, True)
Svarte 10/04/2013 kl. 15:04
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more