07. januar 2004 - 13:28Der er
10 kommentarer og 2 løsninger
Vent på at setup bliver
Er der nogen der kender en funktion som afventer den fortsatte eksekvering af et VB program indtil et andet er færdig.
Jeg har en setupfil som skal køres og afsluttes før mit program arbejde videre.
Jeg har prøvet med forskellige shell funktioner, men da disse eksekvere en dos-kommando som blot starter programmet fra DOS, så virker de ikke da de ser på dos-viduets aktivitet.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Du må kunne bruge noget lignende dette (har ikke lige VB installeret på denne maskine, så det er ikke testet):
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Declare Function WaitForSingleObject Lib "kernel32" Alias "WaitForSingleObject" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Dim hProc as long Dim ret as long hProc = ShellExecute(Me.hwnd,"open","ditprogram.exe","","",1) ret = WaitForSingleObject(ret,480000)
Venter på at programmet lukkes, eller timeout tiden er gået. Timeout har jeg sat til 480000 millisekunder = 8 minutter. Denne tid kan du selvfølgelig ændre.
Når jeg køre : Dim hProc As Long Dim ret As Long hProc = ShellExecute(Me.hwnd, "open", "c:\wtsfarm\setup.exe", "", "", 1) ret = WaitForSingleObject(ret, 480000) MsgBox "TEST"
Så eksekvere den også beskeden "Test" Altså så venter den ikke på at setup bliver færdig. Istedet eksekvere den MSGBOX lige efter de øvrige koder. Er det mig der gør noget galt?
Sorry men jeg kan ikke få det til at virke. Men jeg har fundet en anden løsning på baggrund af dig driis. Derfor får du et par points.
Løsningen er: Option Explicit Dim isRunning As Boolean
Private Type STARTUPINFO cb As Long lpReserved As String lpDesktop As String lpTitle As String dwX As Long dwY As Long dwXSize As Long dwYSize As Long dwXCountChars As Long dwYCountChars As Long dwFillAttribute As Long dwFlags As Long wShowWindow As Integer cbReserved2 As Integer lpReserved2 As Long hStdInput As Long hStdOutput As Long hStdError As Long End Type
Private Type PROCESS_INFORMATION hProcess As Long hThread As Long dwProcessID As Long dwThreadID As Long End Type
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CreateProcessA Lib "kernel32" (ByVal lpApplicationName As Long, ByVal lpCommandLine As String, ByVal lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Ja det kan jeg se nu, men faktisk fungerer hverken mit eget forslag eller driis's. Kun på programmer og ikke på winsheild setupfiler som det faktisk drejer sig om her. Jeg har dog fundet ud af at man kan eksekvere et lille program som efterfølgende eksekvere setupfilen og så virker de begge.
har du prøvet at starte dit dos-program sådan: cmd.exe /c c:\dosprogram.exe
eller
command.com /c c:\dosprogram.exe
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.