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 UpdateResource - Die akt. laufende Exe ändern ? (https://www.delphipraxis.net/85739-updateresource-die-akt-laufende-exe-aendern.html)

turboPASCAL 4. Feb 2007 09:37


UpdateResource - Die akt. laufende Exe ändern ?
 
Hi,

ist es möglich mit UpdateResource die akt. laufende Exe zu ändern ?
Leider habe ich noch nichts erreichen können. Wer kann helfen ?

Delphi-Quellcode:
// var
//  sztSettings: array [0..7] of Char = ('1','0','0','0','0','0','0','0');

procedure TFormX.SaveSettings;
var
  hLib, hUpdate, hRes: THandle;

  function LastErrorMsgStr: String;
  var szerror: array [0..255] of Char;
  begin
    FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nil, GetLastError(), 0, szError,
      sizeof(szError), nil);
    Messagebox(0, szerror, '', 0);
  end;
 
  function MAKELANGID(const usPrimaryLanguage : WORD;const usSubLanguage : WORD) : WORD;
  begin
    Result := (usSubLanguage shl 10) or usPrimaryLanguage;
  end;

begin
  hUpdate := BeginUpdateResource(PChar(ParamStr(0)), BOOL(FALSE));
  if hUpdate > 0 then
  begin
    if not UpdateResource(
             hUpdate,
             RT_STRING,
             MAKEINTRESOURCE(1),
             MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),
             @sztSettings,
             7) then LastErrorMsgStr;
    if not EndUpdateResource(hUpdate, BOOL(FALSE)) then
      LastErrorMsgStr;
  end;

end;

ErazerZ 4. Feb 2007 10:08

Re: UpdateResource - Die akt. laufende Exe ändern ?
 
Nein glaub nicht.

turboPASCAL 4. Feb 2007 11:16

Re: UpdateResource - Die akt. laufende Exe ändern ?
 
Hmpf.... dachte ich mir. Ein "normales"-Schreiben (seek & write) klappt aber.
:gruebel:

ErazerZ 4. Feb 2007 16:06

Re: UpdateResource - Die akt. laufende Exe ändern ?
 
Der Prozess rennt ja, also ist er zu dem Zeitpunkt nicht beschreibbar, erst wenn du ihn wieder schließt kannst du ihn beschreiben.

himitsu 4. Feb 2007 21:09

Re: UpdateResource - Die akt. laufende Exe ändern ?
 
das wäre 'ne Möglichkeit

exe sich selbst in das temoräre verzeichnis kopieren lassen
exe im tempverzeichnis starten
sich selbst beenden dann ist die exe frei und kann geändert werden
dann wieder die "richtige" exe starten
sich wiederrum selbst (die kopie) beenden
kopie im tempverzeichnis löschen



es gibt aber anscheinend noch 'ne Möglichkeit das Handle auf die EXE freizugeben, sodaß die Datei dann frei ist und geändert werden könnte,
aber wie weiß ich auch nicht mehr (bin aber grad auf der Suche nach 'nem Code welcher dieses macht ... falls ich ihn finde versuch ich mich zu melden ... wenn ich's nich vergessen ._.)

Olli 5. Feb 2007 20:53

Re: UpdateResource - Die akt. laufende Exe ändern ?
 
Zitat:

Zitat von himitsu
es gibt aber anscheinend noch 'ne Möglichkeit das Handle auf die EXE freizugeben, sodaß die Datei dann frei ist und geändert werden könnte,
aber wie weiß ich auch nicht mehr (bin aber grad auf der Suche nach 'nem Code welcher dieses macht ... falls ich ihn finde versuch ich mich zu melden ... wenn ich's nich vergessen ._.)

Nur bis XP, ab XP geht das aus bestimmten Gründen nicht mehr. Alles Windows-Interna.

Bsp:

http://assarbad.net/stuff/!export/delphi_deleteself.txt
http://assarbad.net/stuff/!export/c_deleteself.txt
http://assarbad.net/stuff/!export/delself.exe

himitsu 5. Feb 2007 21:06

Re: UpdateResource - Die akt. laufende Exe ändern ?
 
Och menno, wie können die nur :wall:

denn für einige Dinge wäre das doch recht prakisch gewesen.
z.B. SFX-Archive und Co.


hmmm?, "nur bis XP" und "ab XP nicht mehr" wiederspricht sich aber etwas :gruebel:
[add] OK, Letzteres stimmt dann wohl (laut delphi_deleteself.txt) [/add]

Na ja, dann bleibt zumindestens noch die Möglichkeit über eine Kopie
(solange das nicht auch noch verboten wird) :angel:

Olli 5. Feb 2007 21:24

Re: UpdateResource - Die akt. laufende Exe ändern ?
 
Zitat:

Zitat von himitsu
hmmm?, "nur bis XP" und "ab XP nicht mehr" wiederspricht sich aber etwas :gruebel:

Wes Grundes? Bis ist ja normalerweise nicht inklusive ... zumindest war das immer mein Verständnis ;) ... sonst hätte ich nämlich "bis inklusive" geschrieben.

Christian Seehase 5. Feb 2007 22:15

Re: UpdateResource - Die akt. laufende Exe ändern ?
 
Moin Zusammen,

ich hab' letztens etwas dazu bei Codeproject gefunden.
Allerdings weiss ich nicht, ob dies XP mit eingeschlossen hat.

Olli 5. Feb 2007 22:43

Re: UpdateResource - Die akt. laufende Exe ändern ?
 
Zitat:

Zitat von Christian Seehase
ich hab' letztens etwas dazu bei Codeproject gefunden.
Allerdings weiss ich nicht, ob dies XP mit eingeschlossen hat.

Wäre da nicht ein Direktlink zum Artikel angebracht?


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:40 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