Laaeris - So 12.12.10 14:24
Titel: ShellExecuteEx - Aufruf von winzip schmeisst Execution
Hallo zusammen,
ich habe keinen Systemwechsel durchgeführt und plötzlich zwei Probleme, obwohl ich nichts geändert habe:
- weder am System
- noch am Code der Applikation
- noch am Winzip oder am Mediaplayer.
Problem 1:
Ich erhalte eine External Exception beim Aufruf von winzip.
Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| Optionsstring := '-min -a ' +CHR(34) +Pfad +DataModul.Macht.FieldValues['DATENPFAD'] +'_DB_' +inttostr(Datamodul.Stamm.FieldValues['MONATE']) +'_' +inttostr(Datamodul.Stamm.FieldValues['JAHRE']) +CHR(34) +' ' +CHR(34) +Pfad +'Datenbank\'+Hauptserver+'\ComStar\*.*' +CHR(34); try Success := False; if WarteBox.Checked then begin Zippen.Enabled := False; Success := ExecAppWait('winzip',Optionsstring); end else begin InstanceID := ShellExecute(Handle, 'open', PChar('winzip'), PChar(Optionsstring), nil, SW_SHOW); Success := InstanceID >= 32; end; finally Zippen.Enabled := True; end; if not Success then ShowMessage('Application failed: ' + 'winzip' + ' ' + Optionsstring); |
Die zugehörige Funktion. Der Fehler wird bei Result:=ShellExecuteEx(@ShellExInfo) geworfen und ist auch nicht mit try...except abzufangen (ausserdem will ich ja zippen) :-):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| function ExecAppWait(AppName, Params: string): Boolean; var ShellExInfo: TShellExecuteInfo; begin FillChar(ShellExInfo, SizeOf(ShellExInfo), 0); with ShellExInfo do begin cbSize := SizeOf(ShellExInfo); fMask := see_Mask_NoCloseProcess; Wnd := Application.Handle; lpFile := PChar(AppName); lpParameters := PChar(Params); nShow := sw_ShowNormal; end; Result := ShellExecuteEx(@ShellExInfo); if Result then while WaitForSingleObject(ShellExInfo.HProcess, 100) = WAIT_TIMEOUT do begin Application.ProcessMessages; if Application.Terminated then Break; end; end; |
Problem 2:
Das schildere ich nur deswegen, weil es evtl. zusammenhängt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| with Player do begin FileName :=pfad+'Sounds\Explosion'+a+'.wav'; Open; wait:=true; Play; Close; end; |
...führt ebenfalls plötzlich zu dem Fehler, dass mir die EXE sagt: Windows hat keinen Player installiert, der WAV-Files abspielen kann (natürlich hat er, natürlich kann er).
Ich habe zwar einige Hinweise gegoogelt und auch in diesem Forum wieder ein paar Dinge gesehen, aber so richtig komme ich mit meinem Problem nicht weiter.
HILFE! :-)
Viele Grüße
David
jaenicke - So 12.12.10 14:37
Laaeris hat folgendes geschrieben : |
Ich erhalte eine External Exception beim Aufruf von winzip.
[..]
Der Fehler wird bei Result:=ShellExecuteEx(@ShellExInfo) geworfen und ist auch nicht mit try...except abzufangen (ausserdem will ich ja zippen) :-): |
Funktioniert es denn ohne warten? Und warum ignorierst du denn dann den Fehlerwert von ShellExecute, schließlich steht da ja ggf. drin,
was für ein Fehler aufgetreten ist, nicht nur dass einer passiert ist.
Und bei ShellExecuteEx:
Was sagt denn GetLastError (wie in der Doku dazu steht)?
Und zu der externen Exception: Steht da noch mehr drin? Kommt die in deinem Programm oder in Winzip?
Was mir generell auffällt: Du setzt kein Arbeitsverzeichnis. Das ist in der Regel keine gute Idee.
Ja, und dann noch:
Warum muss es denn WinZip sein? Warum baust du nicht einfach die Zipfähigkeit direkt in dein Programm ein? :gruebel: