![]() |
UAC Manifest Ersteller automatisch
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Gemeinde,
Ich habe hier ein Programm mit dessen Hilfe man das Standart-Manifest in ein Manifest mit UAC-Forderung umwandeln kann. Es wandelt in der Manifest-Resource das "asInvoker" in "requireAdministrator" um und macht sonst keine Änderungen. Es sollte aber auch kein Problem sein das Manifest komplett zu erzeugen wenn jmd Lust hat den Source zu ändern. Der wurde übrigens mit D2009 kompilliert. Einfach die exe die das UAC-Fenster erhalten soll auf die ManifestCreator.exe ziehen. Auch auf die Gefahr hin, dass es schon mehrere solche Programme gibt: Viel Spass damit |
AW: UAC Manifest Ersteller automatisch
Ich würde die EXE nicht einfach so als DLL laden und auch noch deren Startfunktion ausführen.
![]() (hab diesen Parameter noch nicht ausprobiert, aber wenn ich das richtig verstanden hab, dann sollte es so besser sein) Die Fehlerbehandlung ist teilweise komplett falsch. Und der Programmname ist nicht grade passend, denn du erstellst ja kein Manifest, sondern änderst es nur :zwinker: ungetestet (nur so dahingetippt)
Delphi-Quellcode:
program ManifestCreator;
{$APPTYPE CONSOLE} uses Windows, SysUtils, AnsiStrings; var hanFile : hFile; hanExe : HMODULE; hanRes : HRSRC; hanLoadRes : HRSRC; ptrData : Pointer; str : AnsiString; begin try if Length(ParamStr(1)) < 3 then raise EAbort.Create('Bitte geben Sie eine Datei an'); WriteLn('Oeffne ', ParamStr(1), '...'); hanExe := LoadLibraryEx(PChar(ParamStr(1)), nil, LOAD_LIBRARY_AS_DATAFILE); if hanExe <> 0 then RaiseLastOSError; hanRes := FindResource(hanExe, PChar(1), PChar(24)); if hanRes = 0 then RaiseLastOSError; hanLoadRes := LoadResource(hanExe, hanRes); if hanLoadRes = 0 then RaiseLastOSError; ptrData := LockResource(hanLoadRes); if not Assigned(ptrData) then RaiseLastOSError; str := StringReplace(PAnsiChar(ptrData), 'asInvoker', 'requireAdministrator', [rfIgnoreCase]); UnlockResource(ptrData); FreeLibrary(hanExe); hanFile := BeginUpdateResource(PChar(ParamStr(1)), false); if hanFile = 0 then RaiseLastOSError; if not UpdateResourceA(hanFile, PChar(24), PChar(1), 1031, PAnsiChar(str), Length(str)) then RaiseLastOSError; if not EndUpdateResource(hanFile, False) then RaiseLastOSError; WriteLn('Fertig!'); Sleep(3000); except on E:Exception do begin WriteLn(E.Classname, ': ', E.Message); Sleep(7000); end; end; end. |
AW: UAC Manifest Ersteller automatisch
Das mit LoadLibary war von Microsoft von deren HOWTO, und die Fehlerbehandlung habe ich auch nicht sonderlich getestet, bzw. nur geprüft, dass die wichtigsten Meldungen ("Modul / Resource nicht gefunden" usw funktionieren)
Danke für die Verbesserung. PS: Das Programm habe ich seither nur mit von D2009 erstellten Anwendungen getestet Zitat:
|
AW: UAC Manifest Ersteller automatisch
Was du noch erwähnen köntest:
Theoretisch kann man damit alle Manifeste bearbeiten, wenn sie diese Kontensteuerung enthalten. z.B. das Manifest von Delphi 7 enthält den entsprechenden Zweig nicht, weswegen man dieses dort nicht auf dieser Weise abändern kann. |
AW: UAC Manifest Ersteller automatisch
Zitat:
Gruß, Christoph |
AW: UAC Manifest Ersteller automatisch
Ich vermute mal, er meint "du ziehst die Datei über seine Exe im Explorer"
|
AW: UAC Manifest Ersteller automatisch
Zitat:
|
AW: UAC Manifest Ersteller automatisch
Wie kommst Du darauf?
|
AW: UAC Manifest Ersteller automatisch
Wenn man das Manifest bei eine signierten Binärdatei ändert, wird die Signatur sowie ein eventuell vorhandene Prüfsumme ungültig und es kann passieren, dass das Programm sich nicht mehr starten lässt. Diesen Umstand sieht man oftmals bei Setupprogrammen oder Programmen, die sich über das Internet aktualisieren lassen und daher die heruntergeladenen Daten prüfen.
Also ich empfehle dringend eine Sicherheitskopie vorher anzulegen! |
AW: UAC Manifest Ersteller automatisch
Zitat:
Gruß, Christoph |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:27 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