Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ShellExecute Parameter übergeben??? (https://www.delphipraxis.net/20168-shellexecute-parameter-uebergeben.html)

Christian18 14. Apr 2004 11:14


ShellExecute Parameter übergeben???
 
Guten Tag,

Ich habe mal eine kleine Frage, die "denke ich" auch zu lösen ist!

Ich habe eine Application programmiert womit ich meine Datenbanken sichern kann. Man kann auswählen in welchen Verzeichnis die Datenbanken liegen die gesichert werden sollen. Also der Pfad ist in einer Paradox7 Tabelle gespeichert. Auf einer anderen Form habe ich ein Edit wo auch ein Pfad in meinem Edit Feld drinn steht. (Das muß man vorher auswählen!!!) Aber in diesem Edit Feld wird eingeschrieben wo die Datensicherung hin gepackt werden sollen. Die Komandozeile um Dateien zu packen lautet:

pacomp.exe -a -c2 -r -P -q test.zip

Das ist die Komandozeile womit ich das Externe Programm anspreche. Anschließend packt meine Application auch was. Aber leider nicht das was es soll. Wie bringe ich hier noch unter wo sich die Quelle befindet und das ziel wo es hin soll(die gepackte Datei)

Delphi-Quellcode:
  ShellExecute(0,'open' , 'pacomp.exe','-a -c2 -r -P -q test.zip ', Nil, SW_NORMAL);
PS: Jetzt Packt das Programm test.zip es soll aber das Datum packen. BSP.: 20040414.zip

Luckie 14. Apr 2004 11:19

Re: ShellExecute Parameter übergeben???
 
Dann bau dir vorher in einer Variablen den String für den Parameter zusammen.

THE MATRIX 14. Apr 2004 11:22

Re: ShellExecute Parameter übergeben???
 
Probier das doch mal so

Delphi-Quellcode:
ShellExecute(0,'open' , 'pacomp.exe','-a -c2 -r -P -q ' + DateToStr(Date) + '.zip ', ExtractFileDir(Application.Exename)+'\backup', SW_NORMAL);
dann ruft der die pacomp.exe af mit dem datum und setzt als Arbeitsverzeichnis den Ordner, wo deine Anweundung ist + backup
z.b. C:\MeinProgramm\backup
der Ordner Backup muss natürlich existieren.

Christian18 14. Apr 2004 11:26

Re: ShellExecute Parameter übergeben???
 
Hi, The Matrix

wenn ich deinen lösungsvorschlag nehme, dann kommt bei mir eine Fehlermeldung.

[Fehler] UTagessicherung.pas(62): Inkompatible Typen: 'String' und 'PChar'

was kann ich dagegen machen???

Luckie 14. Apr 2004 11:27

Re: ShellExecute Parameter übergeben???
 
Du musst die Strings nach PChar casten.

Christian18 14. Apr 2004 11:31

Re: ShellExecute Parameter übergeben???
 
wie mache ich das

Markus K. 14. Apr 2004 11:33

Re: ShellExecute Parameter übergeben???
 
Hallo Christian,
so zum Beispiel.
Delphi-Quellcode:
 ShellExecute(0,'open' , 'pacomp.exe',PChar('-a -c2 -r -P -q ' + DateToStr(Date) + '.zip '), PChar(ExtractFileDir(Application.Exename)+'\backup'), SW_NORMAL);
Tschüß Markus

Christian18 14. Apr 2004 11:55

Re: ShellExecute Parameter übergeben???
 
ich weiß nicht warum, aber wenn ich auf den button klicke, dann passiert gar nichts! es kommt aber auch kein fehler!
weiß jemand warum???

Luckie 14. Apr 2004 11:59

Re: ShellExecute Parameter übergeben???
 
Existiert das verzeichnis backup? Und was gibt dir Shellexecute für eine Zahl zurück?

Christian18 14. Apr 2004 12:15

Re: ShellExecute Parameter übergeben???
 
ja das verzeichnis ist da, aber shellexecute gibt auch keine zahl zurück

Luckie 14. Apr 2004 12:21

Re: ShellExecute Parameter übergeben???
 
Zitat:

Zitat von Christian18
aber shellexecute gibt auch keine zahl zurück

Glaube ich nicht.
Delphi-Quellcode:
ShowMessage(IntToStr(Shellexecute(..)));
Und danach noch ein
Delphi-Quellcode:
RaiseLastOSError;
wäre auch nicht verkehrt.

Desweiteren kuck mal hier: MSDN-Library durchsuchenShellexecute

Christian18 14. Apr 2004 12:27

Re: ShellExecute Parameter übergeben???
 
ok jetzt kommt eine fehler meldung die 2

und dann kommt noch einer

systemfehler. code 1447
das fenster hat keine laufleisten

Christian18 14. Apr 2004 12:49

Re: ShellExecute Parameter übergeben???
 
was bedeutet dieser Fehler??? und was kann ich dagegen machen???

xineohp 14. Apr 2004 13:26

Re: ShellExecute Parameter übergeben???
 
moin,

in der Quelle auf die Luckie verwiesen hat steht:

Zitat:

Return Value

Returns a value greater than 32 if successful, or an error value that is less than or equal to 32 otherwise. The following table lists the error values. The return value is cast as an HINSTANCE for backward compatibility with 16-bit Windows applications. It is not a true HINSTANCE, however. The only thing that can be done with the returned HINSTANCE is to cast it to an int and compare it with the value 32 or one of the error codes below.

0 The operating system is out of memory or resources.
ERROR_FILE_NOT_FOUND The specified file was not found.
ERROR_PATH_NOT_FOUND The specified path was not found.
ERROR_BAD_FORMAT The .exe file is invalid (non-Microsoft Win32® .exe or error in .exe image).
SE_ERR_ACCESSDENIED The operating system denied access to the specified file.
SE_ERR_ASSOCINCOMPLETE The file name association is incomplete or invalid.
SE_ERR_DDEBUSY The Dynamic Data Exchange (DDE) transaction could not be completed because other DDE transactions were being processed.
SE_ERR_DDEFAIL The DDE transaction failed.
SE_ERR_DDETIMEOUT The DDE transaction could not be completed because the request timed out.
SE_ERR_DLLNOTFOUND The specified dynamic-link library (DLL) was not found.
SE_ERR_FNF The specified file was not found.
SE_ERR_NOASSOC There is no application associated with the given file name extension. This error will also be returned if you attempt to print a file that is not printable.
SE_ERR_OOM There was not enough memory to complete the operation.
SE_ERR_PNF The specified path was not found.
SE_ERR_SHARE A sharing violation occurred.
Wenn 0 der erste Eintrag ist würde ich mal tippen, dass 2 der 3. sein müsste.
Einfach mal mit
Delphi-Quellcode:
If Shellexecute(..)=ERROR_PATH_NOT_FOUND then showmessage('das isses') else showmessage('das wars nicht');
überprüfen.

PS: Wenn mich nicht alles täuscht erwartet Shellexecute als 3. Parameter die auszuführende Datei INKLUSIVE Pfad!


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz