it » comp » lang » visual-basic
Problmea con lancio sincrono di un batch su Win98
di (Andrea_)
il Tue, 10 Jul 2007 10:38:51 +0200
newsgroups it.comp.lang.visual-basic
message-id <f6vgir$mmc$1@news.newsland.it>
Ciao a tutti, ho un problema:
devo creare un .BAT con all'interno una serie di istruzioni, salvarlo su
una directory e successivamente lanciarlo dall'applicazione in modo
sincrono (in finestra nascosta).
Non posso, per motivi che non sto a spiegare, lanciare ogni singola
operazione: il tutto deve invece essere racchiuso nel bat che viene creato
al volo, salvato e lanciato.
Il tutto funziona su sistemi NT based (2000 e XP in particolare) mentre su
98 il rocesso mi rimane appeso perchè la finestra non si chiude.. il
tipico messaggio "il comando è stato eseguito adesso è possibile chiudere
la finestra" (o roba del genere, non ho sottomano il pc con Win98 adesso).
Se il bat, una volta salvato, lo lancio "a mano" ha lo stesso effetto.
Se creo un PIF legato al bat in cui specifico di chiudere la finestra alla
fine dell'esecuzione allora tutto ok.
Il problema maggiore sta nel fatto che non posso portare l'ambiente di
sviluppo su win 98. Come posso ovviare a tale problema?
Preferirei risolvere il tutto da codice e non obbligare gli utenti con win
98 a smanettare (se mai fosse possibili) con le impostazioni del computer.
Potrei anche creare il .PIF legato al BAT, impostare in quaklche modo il
"chiudi finestra a fine esecuzione" e lanciare quello, ma:
1) non so come si crea un PIF da codice
2) poichè deve essere lanciato in maniera sincrona, non vorrei che il
"pif" si chiuda prima del bat associato.. non so se mi spiego: lancio il
pif, questo klancia il bat e si chiude magari prima del termine
dell'esecuzione del .bat, tornando il controllo al VB quando invece il
batch deve ancora finire la sua esecuzione.
in ogni caso esiste un punto in win98 dove impostare la chiusura delle
finestre dos a fine esecuzione di default?
qui di seguito la (conosciuta) funzione che utilizzo per lanciare il BAT
in modo sincrono
Option Explicit
Option Private Module
Public Const INFINITETIMEOUT = -1& ' Infinite timeout
Private Const WAIT_TIMEOUT = 258&
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 Byte
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type
Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long
End Type
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
Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As
Long, ByVal dwMilliseconds As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Const NORMAL_PRIORITY_CLASS = &H20&
Public Sub ShellSync(ToRun As String, Optional CommandLine As Variant)
Dim cmdLine$
If Not IsMissing(CommandLine) Then
cmdLine$ = ToRun & " " & CommandLine
Else
cmdLine$ = ToRun
End If
Dim proc As PROCESS_INFORMATION
Dim Start As STARTUPINFO
Dim Ret&
Start.cb = Len(Start)
Start.wShowWindow = 0 '6 - minimizzato
Start.dwFlags = 1
Ret& = CreateProcessA(0&, cmdLine$, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS,
0&, 0&, Start, proc)
Ret& = WaitForSingleObject(proc.hProcess, INFINITETIMEOUT)
Ret& = CloseHandle(proc.hProcess)
End Sub
ciao
Andrea
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad abuse@newsland.it
Risposte
Re: Problmea con lancio sincrono di un batch su Win98 di (Andrea_) il Wed, 11 Jul 2007 13:12:11 +0200
Tutti i messaggi della discussione
Re: Problmea con lancio sincrono di un batch su Win98 di (Andrea_) il Wed, 11 Jul 2007 13:12:11 +0200
