Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit ShellExecute... (https://www.delphipraxis.net/131696-problem-mit-shellexecute.html)

Flodding 29. Mär 2009 09:23


Problem mit ShellExecute...
 
Guten Morgen zusammen...

ich habe folgendes Problem:

Delphi-Quellcode:
procedure TfrmMain.btnBackUpClick(Sender: TObject);
var
zipfile: PAnsiChar;
targetdir: PAnsiChar;
begin
zipfile:='C:\test.rar';
targetdir:='D:\test\test';
ShellExecute(Handle, nil, PAnsiChar('.\system\7zip\7za.exe'), PAnsiChar('a') + zipfile + targetdir, nil, SW_SHOW);
end;
dieser Code zum Erstellen einers BackUps funktioniert nicht und ich versteh einfach nicht warum...

dieser code hingegen:

Delphi-Quellcode:
procedure TfrmMain.btnBackUpClick(Sender: TObject);
begin
ShellExecute(Handle, nil, PAnsiChar('.\system\7zip\7za.exe'), 'a C:\test.rar D:\test\test', nil, SW_SHOW);
end;
funktioniert einwandfrei...

sicher ist es nur eine kleinigkeit die ich übersehe, aber ich bekomm meist nur die meldung dass "Operator auf diesen Operantentyp nicht anwendbar ist"...

danke schonmal im voraus :)

Matze 29. Mär 2009 09:31

Re: Problem mit ShellExecute...
 
Hallo,

jupp die Leerzeichen fehlen:

Delphi-Quellcode:
ShellExecute(Handle, nil, PAnsiChar('.\system\7zip\7za.exe'), PAnsiChar('a') + ' ' + zipfile + ' ' + targetdir, nil, SW_SHOW);
Grüße

Flodding 29. Mär 2009 09:35

Re: Problem mit ShellExecute...
 
das hat so nicht funktioniert... wegen string und PAnsiChar... habs dann mal so probiert...

Delphi-Quellcode:
ShellExecute(Handle, nil, PAnsiChar('.\system\7zip\7za.exe'), PAnsiChar('a') + PAnsiChar(' ') + zipfile + PAnsiChar(' ') + targetdir, nil, SW_SHOW);
was wieder die sache mit dem operantentyp mit sich zieht :(

Matze 29. Mär 2009 09:37

Re: Problem mit ShellExecute...
 
Hallo,

du kannst es auch so lösen, denke ich:

Delphi-Quellcode:
procedure TfrmMain.btnBackUpClick(Sender: TObject);
var
  zipfile: string;
  targetdir: string;
begin
  zipfile := 'C:\test.rar';
  targetdir := 'D:\test\test';

  ShellExecute(Handle, nil, PAnsiChar('.\system\7zip\7za.exe'), PAnsiChar('a ' + zipfile + ' ' + targetdir), nil, SW_SHOW);
end;
Ist aber ungetestet.

Grüße, Matze

Flodding 29. Mär 2009 09:41

Re: Problem mit ShellExecute...
 
Delphi-Quellcode:
procedure TfrmMain.btnBackUpClick(Sender: TObject);
var
zipfile: PAnsiChar;
targetdir: PAnsiChar;
begin
zipfile:='C:\test.rar';
targetdir:='D:\test\test';
ShellExecute(Handle, nil, PAnsiChar('.\system\7zip\7za.exe'), PAnsiChar('a ' + zipfile + ' ' + targetdir), nil, SW_SHOW);
end;
So funktionierts...

Neues Problem welches ich vorher nicht bemerkt habe...

Delphi-Quellcode:
procedure TfrmMain.btnBackUpClick(Sender: TObject);
var
zipfile: PAnsiChar;
targetdir: PAnsiChar;
begin
zipfile:='C:\test.rar';
targetdir:='D:\Neuer Ordner\test';
ShellExecute(Handle, nil, PAnsiChar('.\system\7zip\7za.exe'), PAnsiChar('a ' + zipfile + ' ' + targetdir), nil, SW_SHOW);
end;
Hiermit führt er zwar die 7za.exe aus aber er erstellt keine rar-Datei...

EDIT:::

Lag daran dass ich PAnsiChar nutzte...

mit PChar gehts :)

EDIT::::::

UPS doch nicht... zu früh gefreut -.-*

Matze 29. Mär 2009 09:52

Re: Problem mit ShellExecute...
 
Hallo,

geht es denn über die Konsole (cmd)?

Die Datei "7za.exe" kenne ich nicht. Bei mir ist es die "7z.exe", mit der es klappen sollte.

Ich weiß nicht, ob dir das nun hilft, aber du kannst es ja mal mit der "7z.exe" probieren, falls du die nicht einfach in "7za.exe" umbenannt hast.

Grüße, Matze

Flodding 29. Mär 2009 09:57

Re: Problem mit ShellExecute...
 
Liste der Anhänge anzeigen (Anzahl: 1)
7za.exe ist ein kommandozeilenprogramm... ist sone Standalone version ich kannse ja mal anhängen...

Matze 29. Mär 2009 10:06

Re: Problem mit ShellExecute...
 
Hi,

ich vermute der Rückgabewert von ShellExecute ist <= 32:

Zitat:

If the function succeeds, it returns a value greater than 32.
Quelle: MSDN

Teste es doch mal manuell in der Windows-Konsole. Da siehst du dann gleich, was dir die "7za.exe" zurückgibt. Bei meinem Test beispielsweise:

Zitat:

7-Zip (A) 4.65 Copyright (c) 1999-2009 Igor Pavlov 2009-02-03

Error: C:\Dokumente und Einstellungen\Eingeschraenkt\Desktop\test.rar is not
supported archive

System error:
Unzulässige Funktion.
Wobei ich das auch bei der "7z.exe" erhalte. Keine Ahnung, was da los ist, denn die Parameter müssten stimmen.
Vielleicht wirst du daraus schlauer.

Grüße

Flodding 29. Mär 2009 10:12

Re: Problem mit ShellExecute...
 
hab die lösung gefunden... wäre ich NIEMALS drauf gekommen... eigentlich supersimpel, aber das ist es ja meistens :D

also hier gefunden:

KLICK

und hier der funktionierende Code:

Delphi-Quellcode:
procedure TfrmMain.btnBackUpClick(Sender: TObject);
var
zipfile: PAnsiChar;
targetdir: PAnsiChar;
begin
zipfile:='C:\test.rar';
targetdir:='"D:\Neuer Ordner\test"';
ShellExecute(Handle, nil, PAnsiChar('.\system\7zip\7za.exe'), PAnsiChar('a ' + zipfile + ' ' + targetdir), nil, SW_SHOW);
end;
Leider konnte ich die gänsefüße nicht fett machen, deshalb erwähne ich es extra nochmal... direkt hinter dem oberstrich (') kommen gänsefüße oben ('").. genauso am ende nur umgekehrt... ("')
:D

Flodding 29. Mär 2009 11:19

Re: Problem mit ShellExecute...
 
sorry fürs doppelpost aber ich dachte ich frags lieber hier als dass ich wieder n neues thema eröffne... passt auch irgendwie hier rein :P

also im oberen teil wird ja eine exe, bzw. jetzt eine cmd aufgerufen die mir dann das backup erstellt...

ich hab mir gedacht dass es vielleicht schöner wäre wenn ich die cmd auf meiner form laufen lasse oder noch schöner in einem memo das ganze ablaufen lasse... ist das irgendwie möglich?

BTW... das cmd fenster hat einen festen namen via title erhalten... vielleicht erleichtert es das ja einwenig...


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:21 Uhr.

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