Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit UpdateResource und XP-Manifest (https://www.delphipraxis.net/22836-problem-mit-updateresource-und-xp-manifest.html)

MrKnogge 24. Mai 2004 19:58


Problem mit UpdateResource und XP-Manifest
 
na guten Abend !

Ich möchte ein kleines tool schreiben, mit dem ich das XP-Manifest nachträglich in compilierte Exe-Files integrieren kann. Also nicht einexternes Manifest namens "Programname.exe.manifest".

Eigentlich klappt das auch schon alles:

Delphi-Quellcode:
function MAKELANGID(const usPrimaryLanguage : WORD;const usSubLanguage : WORD) : WORD;
begin
  Result := (usSubLanguage shl 10) or usPrimaryLanguage;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  stream: TFilestream;
  hInst: THandle;
  ptr: Pointer;
begin
  stream := TFileStream.Create('C:\test.manifest', fmOpenRead);
  getmem (ptr,Stream.size+1);
  try
    stream.Seek(soFromBeginning, 0);
    stream.read(ptr^, Stream.size);
    hInst := BeginUpdateResource('C:\test.exe', false);
    if hInst > 0 then begin
      UpdateResource(hInst, MakeIntResource(24), '1',
      MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL), ptr, Stream.size);
      EndUpdateResource(hInst, false);
    end;
  finally
    freemem(ptr, Stream.size+1);
    stream.Free;
  end;
end;
Das XP-Manifest:
Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
     type="win32"
    name="DelphiApplication"
    version="1.0.0.0"
     processorArchitecture="*"/>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="*"/>
    </dependentAssembly>
  </dependency>
</assembly>
Zum testen hab ich einfach kurz ein Delphi-Programm mit verschiedenen Controls erstellt, + das gleiche mit eingebundenem XP-Manifest von Delphi. Anschliesend das ohne XP-Manifest mit meinem Programm modifieziert und im Resource Hacker verglichen, identisch ! Allerdings werden bei dem von mir modifizierten Programm die Controls nicht im XP-Style angezeigt.

Was mach ich falsch ?

gruss

MathiasSimmack 24. Mai 2004 21:16

Re: Problem mit UpdateResource und XP-Manifest
 
Darf ich etwas sachliche Kritik äußern?

1. Die Funktion "UpdateResource" gibt es nur auf NT-Systemen. Okay, das Manifest funktioniert ja auch erst unter XP, und das ist ja eine NT-Plattform. Trotzdem ...

2. Nicht jedes Programm ist auf die Manifest-Unterstützung ausgelegt. Speziell wenn du ein Programm erwischt, das vielleicht von jemandem mit einer älteren und nicht selbst angepassten Delphi-Version geschrieben wurde. Das Problem mit der List-View im vsReport-Modus dürfte ja bekannt sein. Und da kann das nachträgliche Integrieren des Manifestes Probleme verursachen.

Ich will dich nicht von deiner Idee abbringen. Aber du solltest vielleicht immer erst einen "Testlauf" mit einem externen Manifest machen und schauen ob das Programm in jeder Hinsicht funktioniert.

MrKnogge 24. Mai 2004 21:27

Re: Problem mit UpdateResource und XP-Manifest
 
Zu deiner Frage, jadu darfst :mrgreen:

Zu 1. Was für eine Fehlermeldung würde ich unter Windows98 bekommen ?

Zu 2. Wenn ich/bzw. der Benutzer sein Programm vorerst mit einer Manifestdatei testet, mit welchen Fehlermeldungen machen sich die Probleme bemerkbar ?

MathiasSimmack 24. Mai 2004 21:32

Re: Problem mit UpdateResource und XP-Manifest
 
Zitat:

Zitat von MrKnogge
Zu 1. Was für eine Fehlermeldung würde ich unter Windows98 bekommen ?

Wenn die Funktion statisch geladen wird, dann wahrscheinlich die übliche Meldung, dass die Funktion nicht gefunden wurde. Gefolgt vom merkwürdig anmutenden "Ein angeschlossenes Gerät funktioniert nicht" ... oder so ähnlich ...

Zitat:

Zu 2. Wenn ich/bzw. der Benutzer sein Programm vorerst mit einer Manifestdatei testet, mit welchen Fehlermeldungen machen sich die Probleme bemerkbar ?
Na, ein Beispiel nannte ich doch: Nimm an, jemand hat ein recht gutes Freeware-Programm geschrieben, dass irgendwelche Daten in einer List-View anzeigt. Diese LV läuft in der Detailansicht, und wenn das Programm mit einer Version < D7 geschrieben und der Quellcode der "ComCtrl.pas" (wenn ich von der VCL-List-View ausgehe) nicht angepasst wurde, dann siehst du eine Zugriffsverletzung.
IMHO war noch irgendwas mit der Toolbar, was auch nicht klappte, wenn die VCL-Unit nicht gepatcht wurde.

Evtl. ist ein Programm auch ge-UPX-t. Da wäre es IMHO sowieso zweckmäßiger, das Manifest separat beizulegen.

MrKnogge 24. Mai 2004 21:47

Re: Problem mit UpdateResource und XP-Manifest
 
Ich hatte erst vor, die Möglichkeit dem Benutzer zu überlassen, ob das Manifest in die Exe-File integriert, oder eben extern beigelegt wird. Allerdings hatte ich bisher Packer alá UPX nicht bedacht.

Muetze1 24. Mai 2004 23:44

Re: Problem mit UpdateResource und XP-Manifest
 
Moin!

Meiner Meinung nach klappt das so nicht, weil du das Manifest ja zur Laufzeit hinzufügst und Windows aber beim Laden der EXE die jeweilige Common Controls initialisiert und daher nicht mehr nachträglich schaut bzw. die Common Controls abändert - das wird IMHO beim starten erledigt, daher hast du IMHO keine Chance, weil die Controls zur Laufzeit schon alle benutzt werden...

MfG
Muetze1

MrKnogge 24. Mai 2004 23:50

Re: Problem mit UpdateResource und XP-Manifest
 
Aber es funktioniert ja mit anderen Resourcen auch, und das Manifest ist dann ja sogar als Resource verfügbar (vor dem Start !), aber irgendwie wird es ignoriert. Als müsste man ne art flag setzen "arbeite das mal ab".

Ich hab schon Programme gesehen, bei denen das geklappt hat.

MasterC 25. Sep 2004 20:24

Re: Problem mit UpdateResource und XP-Manifest
 
Das ist mehr als komisch, die Resource ist vorhanden. Nur wenn man es mir ResHack macht gehts. :-/

Hat jemand eine Ahnung warum?

Pseudemys Nelsoni 26. Sep 2004 15:35

Re: Problem mit UpdateResource und XP-Manifest
 
fügst du die manifest ans ende der datei an oder wo?

MasterC 26. Sep 2004 15:36

Re: Problem mit UpdateResource und XP-Manifest
 
Jo ans Ende.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:25 Uhr.
Seite 1 von 3  1 23      

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