Newsgroup: it.comp.lang.delphi
Titolo: GetExitCodeProcess

Una mia applicazione lancia un eseguibile con una CreateProcess che su
alcuni pc sembra non funzionare. Dopo un pň di debug ho visto che la
GetExitCodeProcess mi restuisce il valore 128 (80h =
STATUS_ABANDONED_WAIT_0). 
Ho cercato con google ma ottengo solo un risultato in tedesco e altri in
russo, e nell'help non trovo nulla. C'č qualcuno che possa darmi una mano a
capire cosa significa quell'errore?
grazie
-- 
Lis
ICQ@Home #7317603sette     ICQ@Work #16285702tre
Mercatino: 
http://lis77.bravepages.com
 (aggiornato *con foto*: 16/06/03)

 che su alcuni pc sembra non funzionare.
Alcuni? che alcuni?
Con quale OS?
E su quali OS funziona senza problemi?
A



è una mia applicazione scritta in D6 che ne richiama un'altra "nostra"
scritta sempre in D6. Il tutto funziona sulla mia macchina di sviluppo
(win2k) ma non su altri 2 pc (win2k e winxp). Osservando con il task manager
vedo che non viene proprio lanciato l'eseguibile.
Il codice del lancio è questo:
/************
FillChar(StartUpInfo, SizeOf(StartUpInfo), #0);
StartUpInfo.cb          := SizeOf(StartUpInfo);
StartUpInfo.dwFlags     := STARTF_USESHOWWINDOW;
StartUpInfo.wShowWindow := iShowMode;
if not CreateProcess(
  nil,              // Not used - no parameters passed as yet
  PChar(sFileName),  // Command Line - used to allow 16 bit exec. & param
  nil,            // No Process security attributes
  nil,            // No Thread security attributes
  false,            // No handle inheritance
  CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,  // Creation flags
  nil,            // No new environment block
  PChar(sDefaultDir),  // No pointer to the current directory
  StartUpInfo,          // Pointer to the StartUpInfo block
  ProcessInfo          // Pointer to the ProcessInformation block
  ) then
    raise Exception.Create('Unable to run application');
// Wait for ever, or until the process finishes
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
// Get the exit code of the process and create an exception on an
// error - if I knew the types!
GetExitCodeProcess(ProcessInfo.hProcess, iError)
/*************
sFileName contiene la stringa da eseguire che è nel formato:
c:\path\path\path\file.exe /par1 /par2 "nome lungo di file come parametro"
ps. comunque non mi sembrava necessario specificare il tutto perchè la
domanda mi sembrava piuttosto precisa (cosa significa l'errore
STATUS_ABANDONED_WAIT_0?)


 STATUS_ABANDONED_WAIT_0?)
Giusto.
Ma dal momento che di questa costante non si trova niente su msdn ho
ritenuto opportuno chiederti delle info in +.
Bye
A

 Services pack?
In tutti i casi l'utente è amministratore, sui 2 xp su cui non va in uno c'è
il SP e nell'altro no.
Ho fatto una prova e ho forzato il programma a lanciare il notepad e
funziona. Ho provato a lanciare da "Esegui..." il comando che lancia la mia
applicazione (lo copio nella clipboard prima che venga eseguito) e fa quel
che dovrebbe fare


> sui 2 xp su cui non va in uno c'è il SP e nell'altro no.
ma perche' non fai comunicare le applicazioni mediante file di testo?
Perche' complicarsi la vita con le API e i pasticci dei sistemi operativi
M$?
Ciao, Sandro

allinea le versioni di sistema operativo installando i service pack e
riprova.
Ricorda: usiamo sistemi di zio billy!
A

 Ricorda: usiamo sistemi di zio billy!
proprio per questo ;)
Ciao, Sandro

 riprova.
Essendo un'applicazione distribuita in giro per il mondo è un vincolo che
non posso mettere. Oltretutto la stessa procedura che uso per la
createprocess è utilizzata anche in altre applicazioni e funziona...ci
dev'essere una vaccatina da qualche parte :-/


 Perche' complicarsi la vita con le API e i pasticci dei sistemi operativi
Uso anche un file di testo per dei parametri, ma non posso fare altrimenti
perchè dalla mia applicazione lancio l'altra e devo attendere che finisca di
fare l'operazione che mi serve, e poi continuare


 fare l'operazione che mi serve, e poi continuare
puoi usare i mutex per verificare lo stato dell'altra applicazione:
all'inizio dell'elaborazione l'applicazione monitorata crea un mutex, e lo
distrugge alla fine dell'elaborazione stessa. L'applicazione "monitorante"
verifichera' periodicamente che il mutex esista, e quando non lo trovera'
piu' sapra' che l'elaborazione e' terminata.
Ciao, Sandro

 ortodosse e radicali.
La mia non era una soluzione finale quanto uno step per capire da cosa
potesse dipendere.
Se allinei i sistemi operativi, magari montando un service pack alla volta e
facendo il test ogni volta, uoi capire se un qualche service pack si porta
dietro qualche fix, che POTREBBE essere documentata fornendo qualche info
anche ul problema riscontrato da Lis.
Bye
A

mi sorge un dubbio.....
Il nome di di file che passi come parametro è + lungo di 8 caratteri?
Se si, fai un test specificando un nome di file + corto sui pc "incriminati"
e vgedi cosa succede.
Bye
A
--
Per rispondere non usare il reply ma scrivere al seguente indirizzo:
alsalvati(at)
supereva.it

 e vgedi cosa succede.
Ho provato e non era nemmeno quello il problema.
Alla fine...ho riscritto la procedura in modo da non dover usare piů quella
CreateProcess, resta perň il punto interrogativo sul valore di ritorno
STATUS_ABANDONED_WAIT_0
grazie a tutti
