Newsgroup: it.comp.lang.visual-basic
Titolo: Esecuzione Comando DOS strano!

Ho una routine che prende in ingresso una riga di comando che porta ad
un file BAT di dos.
Questo codice funziona alla perfezione fino a quando, improvvisamente
e senza toccare nulla, comincia a non funzionare più aprendomi e
chiudendomi immediatamente il prompt di dos (quando prima restava
aperto aspettando che finisse l'esecuzione della finestra DOS.
Se sposto tutta la cartella del progetto sul desktop e lo eseguo da li
rifunziona tutto, anche se lo ricopio nella posizione originale.
Non riesco proprio a capire di cosa si possa trattare, ci sto perdendo
la testa.
La routine che richiama un comando dos è la seguente:
Public Sub ExecCmd(cmdline$)
Dim proc As PROCESS_INFORMATION
Dim start As STARTUPINFO
start.cb = Len(start)
' Esegue il comando
ret& = CreateProcessA(0&, cmdline$, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS,
0&, 0&, start, proc)
' Attende il termine del comando
ret& = WaitForSingleObject(proc.hProcess, INFINITE)
ret& = CloseHandle(proc.hProcess)
End Sub
dove cmdline$ è c:\..........\Esegui.bat
Mi date una mano?
Grazie

 Mi date una mano?
Serve proprio il .bat?
-- 
ciao, hal

Serve proprio il .bat?
Eh si, devo lanciare un comando, ma non credo che il problema sia lui
proprio perchè se faccio partire il bat manualmente funge benissimo.
Che posso fare?

Serve proprio il .bat?
Ho una notizia in piů, allora, ho visto che se chiudo il visual basic
co ntutte le finestre vavie che ho aperto tipo blocco note, word
etc... e poi faccio ripartire il progetto non mi funziona +.
Devo ripristinare la cartella del progetto per farlo funzionare di
nuovo.
Avete idea di cosa potrebbe essere?

Serve proprio il .bat?
Per maggiori dettagli posto tutto il modulo:
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 Integer
    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
Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Const INFINITE = -1&


 proprio perchè se faccio partire il bat manualmente funge benissimo.
Verifica la dir corrente predefinita per i .bat e quella che il .bat 
pensa che sia. Inoltre fai il test non solo da ambiente di sviluppo,
(in cui il processo chiamante e' vb6.exe e *non* il tuo programma),
ma anche con l'eseguibile finale.
Su quale sistema operativo si verifica il problema? Considera che
quando andra' sulle macchine degli utenti finali potranno verificarsi
anche problemi dovuti ai permessi di esecuzione e/o accessi ad essi
assegnati.
-- 
ciao, hal


wrote:

Credo che hai centrato il problema.
Con l'eseguibile creato funziona tutto bene anche chiudendo e
riaprendo le finestre.
Cosa potrebbe essere quindi e, soprattutto, come posso risolvere il
problema anche con vb6.exe? Te lo chiedo perchè mi serve anche in
progettazione questa funzionalità.
Il sistema operativo dove gira l'applicazione è Windows XP Pro.
Grazie

 Il sistema operativo dove gira l'applicazione è Windows XP Pro.
Quindi in produzione devi tener conto di eventuali permessi,
che, ovviamente, hai sulla macchina di sviluppo.
-- 
ciao, hal