AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Selbst entpackendes Archiv auspacken
Thema durchsuchen
Ansicht
Themen-Optionen

Selbst entpackendes Archiv auspacken

Ein Thema von zeras · begonnen am 16. Dez 2013 · letzter Beitrag vom 17. Dez 2013
Antwort Antwort
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#1

Selbst entpackendes Archiv auspacken

  Alt 16. Dez 2013, 19:09
Hallo,

ich habe ein selbstentpackendes Archiv (programm.exe), welches ich mit Delphi/Windows Mitteln auspacken will. Das scheint aber weder mit ShellExecuteAndWait, noch mit WaitForSingleObject zu klappen.
Kennt jemand eine Lösung?
Miniaturansicht angehängter Grafiken
fehlermeldung.jpg  
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.151 Beiträge
 
Delphi 12 Athens
 
#2

AW: Selbst entpackendes Archiv auspacken

  Alt 16. Dez 2013, 19:15
Das scheint aber weder mit ShellExecuteAndWait, noch mit WaitForSingleObject zu klappen.
Und wie versuchst du es?


Mit normalem ShellExecute oder auch erstmal billig direkt im Explorer funktioniert es aber?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#3

AW: Selbst entpackendes Archiv auspacken

  Alt 16. Dez 2013, 19:19
Und wie versuchst du es?
ShellExecuteAndWait(Application.Handle, 'open', PChar(fName), NIL, Nil, SW_SHOW, True); bzw.


Delphi-Quellcode:
Function ExecAndWait(Filename, Params: String;
                     WindowState: Word = SW_SHOWNORMAL): boolean;

var
  {$IFDEF UNICODE} ShExecInfoW: SHELLEXECUTEINFOW; {$ENDIF}
  ShExecInfoA: SHELLEXECUTEINFOA;
// MSDN: ShellExecuteEx, ShellExecuteInfo
  Win32IsUnicode : Boolean;

begin
  Result := false;

  Win32IsUnicode := False;

  if (Filename = '') {or not FileExists(FileName)} then
    exit;
  {$IFDEF UNICODE}
  if Win32IsUnicode then
  begin
    ShExecInfoW.Wnd := GetForegroundWindow;
    ShExecInfoW.cbSize := SizeOf(SHELLEXECUTEINFOW);
    ShExecInfoW.fMask := SEE_MASK_NOCLOSEPROCESS;
    ShExecInfoW.lpVerb := 'open';
    ShExecInfoW.lpFile := PWideChar(WideString(Filename));
    ShExecInfoW.lpParameters := PWideChar(WideString(Params));
    ShExecInfoW.lpDirectory := PWideChar(WideString(ExtractFileDir(Filename)));
    ShExecInfoW.nShow := WindowState;
    Result := ShellExecuteExW(@ShExecInfoW);
    try
      if Result then WaitForSingleObject(ShExecInfoW.hProcess, INFINITE);
    finally
      CloseHandle(ShExecInfoW.hProcess);
    end;
  end
  else
  {$ENDIF}
  begin
    ShExecInfoA.Wnd := GetForegroundWindow;
    ShExecInfoA.cbSize := sizeof(SHELLEXECUTEINFOA);
    ShExecInfoA.fMask := SEE_MASK_NOCLOSEPROCESS;
    ShExecInfoA.lpVerb := 'open';
    ShExecInfoA.lpFile := PAnsiChar(AnsiString(Filename));
    ShExecInfoA.lpParameters := PAnsiChar(AnsiString(Params));
    ShExecInfoA.lpDirectory := PAnsiChar(AnsiString(ExtractFileDir(Filename)));
    ShExecInfoA.nShow := WindowState;
    Result := ShellExecuteExA(@ShExecInfoA);
    try
      if Result then WaitForSingleObject(ShExecInfoA.hProcess, INFINITE);
    finally
      CloseHandle(ShExecInfoA.hProcess);
    end;
  end;
end;
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: Selbst entpackendes Archiv auspacken

  Alt 16. Dez 2013, 23:47
Die wichtige Frage ist hier wohl wirklich erstmal: Geht es denn ganz normal "programm.exe" aus dem Explorer zu starten? Wenn dort die gleiche Fehlermeldung erscheint, würde ich fast tippen, dass "programm.exe" ein 16-Bit Executable ist. Dies ist imho spätestens unter Win7 nicht mehr ausführbar.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Selbst entpackendes Archiv auspacken

  Alt 17. Dez 2013, 00:15
Wer hat denn den Code verbrochen?
Delphi-Quellcode:
// Das sollte auch so irgendwo definiert sein
{$ifdef UNICODE}
SHELLEXECUTEINFO = SHELLEXECUTEINFOW;
{$else}
SHELLEXECUTEINFO = SHELLEXECUTEINFOA;
{$end}
Darum geht das einfach so
Delphi-Quellcode:
Function ExecAndWait( const Filename, Params: String; WindowState: Word = SW_SHOWNORMAL): boolean;
var
  ShExecInfo: SHELLEXECUTEINFO;
// MSDN: ShellExecuteEx, ShellExecuteInfo
begin
  Result := false;

  if ( Filename = '' ) {or not FileExists( FileName )} then
    exit; // Exception wäre hier besser, aber nun

    ShExecInfo.Wnd := GetForegroundWindow;
    ShExecInfo.cbSize := sizeof( SHELLEXECUTEINFO );
    ShExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
    ShExecInfo.lpVerb := 'open';
    ShExecInfo.lpFile := PChar( Filename );
    ShExecInfo.lpParameters := PChar( Params );
    ShExecInfo.lpDirectory := PChar( ExtractFileDir( Filename ) );
    ShExecInfo.nShow := WindowState;
    Result := ShellExecuteEx( @ShExecInfo );
    try
      if Result then WaitForSingleObject( ShExecInfo.hProcess, INFINITE );
    finally
      CloseHandle( ShExecInfo.hProcess );
    end;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (17. Dez 2013 um 00:19 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.151 Beiträge
 
Delphi 12 Athens
 
#6

AW: Selbst entpackendes Archiv auspacken

  Alt 17. Dez 2013, 00:49
Wer hat denn den Code verbrochen?
Das ist ein uralter Code, der noch für Nicht-Unicode-Windowse ausgelegt ist.
Was man aber in einem Delphi seit 2009 eh vergessen kann, da es dort sowieso nicht mehr läuft.

Und mindestens seit NT, was dieses Jahr nun seinen 20. Geburtstag gefeiert hatte, ist Windows schon voll auf Unicode.
(selbst für Windows 9x gab es das Unicode zum Nachrüsten)

Aber da die Parameter eh auf "string" deklariert sind, auf das Define UNICODE geeprüft wird, und somit sowieso mindestens Delphi 2009 benötigt würde, ist das ganze natürlich totaler Schwachsinn, da man, wie du schon zeigtest, die Unschaltung auch gleich vom Compiler erledigen lassen kann.



Wobei ich Diese eigentlich versucht hatte zu übersehen.

Wollte erstmal abwarten, ob oder bis meine andere Frage auch beantwortet wurde,
denn funktionieren sollte der Code zumindestens.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (17. Dez 2013 um 01:04 Uhr)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

AW: Selbst entpackendes Archiv auspacken

  Alt 17. Dez 2013, 04:59
Hallo, ich habe ein selbstentpackendes Archiv (programm.exe), welches ich mit Delphi/Windows Mitteln auspacken will.
Selbstentpackende Archive kann man normalerweise auch entpacken, ohne die Exe-Datei auszuführen. Ich mach das z.B. mit 7Zip, um zu vermeiden, daß irgend ein Schadcode ausgeführt wird, der sich vielleicht in der Exe befindet. Vielleicht klappt es ja auch mit Abbrevia?
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#8

AW: Selbst entpackendes Archiv auspacken

  Alt 17. Dez 2013, 21:27
Die wichtige Frage ist hier wohl wirklich erstmal: Geht es denn ganz normal "programm.exe" aus dem Explorer zu starten? Wenn dort die gleiche Fehlermeldung erscheint, würde ich fast tippen, dass "programm.exe" ein 16-Bit Executable ist. Dies ist imho spätestens unter Win7 nicht mehr ausführbar.
Ich hatte es erst mit dem Speedcommander probiert. Der enzippte nach einer Meldung dann die Datei. Im Explorer selber geht es leider nicht. Es kommt die gleiche Fehlermeldung.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#9

AW: Selbst entpackendes Archiv auspacken

  Alt 17. Dez 2013, 21:30
Hallo, ich habe ein selbstentpackendes Archiv (programm.exe), welches ich mit Delphi/Windows Mitteln auspacken will.
Selbstentpackende Archive kann man normalerweise auch entpacken, ohne die Exe-Datei auszuführen. Ich mach das z.B. mit 7Zip, um zu vermeiden, daß irgend ein Schadcode ausgeführt wird, der sich vielleicht in der Exe befindet. Vielleicht klappt es ja auch mit Abbrevia?
Ich entzippe die Dateien eigentlich mit ZipMaster, wo es meistens auch ging. Aber offensichtlich hatten wir zum Zippen verschiedene Programme benutzt. Ich habe auch einige gezippte Exefiles gefunden, die ich dann mit ZipMaster entpacken konnte. Aber hier habe ich eine Datei "erwischt", wo das nicht geht.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.350 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Selbst entpackendes Archiv auspacken

  Alt 17. Dez 2013, 22:20
Ich hatte es erst mit dem Speedcommander probiert. Der enzippte nach einer Meldung dann die Datei. Im Explorer selber geht es leider nicht. Es kommt die gleiche Fehlermeldung.
Dann hatte medium Recht:
Die wichtige Frage ist hier wohl wirklich erstmal: Geht es denn ganz normal "programm.exe" aus dem Explorer zu starten? Wenn dort die gleiche Fehlermeldung erscheint, würde ich fast tippen, dass "programm.exe" ein 16-Bit Executable ist. Dies ist imho spätestens unter Win7 nicht mehr ausführbar.
Das hat allerdings nichts mit Windows 7 zu tun, sondern es geht sehr wohl unter Vista oder 7 32-Bit. Unter 64-Bit ist jedoch kein 16-Bit Modul mehr enthalten, so dass 16-Bit Programme, wie offenbar auch das SFX-Modul, nicht mehr laufen.

Einzige Möglichkeit ist, ohne das SFX-Modul zu arbeiten, sprich mit einem normalen Unzipper zu arbeiten. Wie das Archiv an das SFX Modul angehängt ist, müsste man dafür ggf. prüfen, wenn es nicht direkt gefunden wird.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:09 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