![]() |
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:
Das XP-Manifest:
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;
Code:
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
<?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> ![]() Was mach ich falsch ? gruss |
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. |
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 ? |
Re: Problem mit UpdateResource und XP-Manifest
Zitat:
Zitat:
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. |
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.
|
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 |
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. |
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? |
Re: Problem mit UpdateResource und XP-Manifest
fügst du die manifest ans ende der datei an oder wo?
|
Re: Problem mit UpdateResource und XP-Manifest
Jo ans Ende.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 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