![]() |
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 |
AW: UAC Manifest Ersteller automatisch
Das kann ich nicht nachvollziehen.
|
AW: UAC Manifest Ersteller automatisch
Kann sein daß diese Variante des Programmstarts in älteren Windowsverionen nicht aktiv war oder daß dieses einfach nur irgendwo deaktiviert ist.
|
AW: UAC Manifest Ersteller automatisch
Liste der Anhänge anzeigen (Anzahl: 1)
@Dezipaitor: Wird da denn auch das Manifest mit geprüft? kannst du das vielleicht überprüfen und das Ergebnis mit reinstellen?
Eigentlich wird s.Source nur das "requireAdministrator" mit eingetragen. @pertzschc: Das kann ich bei mir nicht nachvollziehen sry. evtl. kannst du den Source selbst anpassen und hier rein stellen. Normalerweise wird die Datei dann vom Explorer mit
Code:
gestartet.
[Pfad]\ManifestCreator.exe %1
Ich habe die Änderungen von himitsu übernommen und eine Funktion zum erstellen eines Manifest (Nur wenn es noch nicht vorhanden ist) hinzugefügt. Bei nicht vorhandenem Manifest kann man außerdem wählen ob man die CommonControls mit hinzufügen will. Das eingefügte Manifest ist dann eines von mir (sollte aber trotzdem funktionieren). Wenn kein Dateiname angegeben ist (Das Programm ohne Parameter) wird man jetzt nach einem gefragt. Wie Dezipaitor schon sagt Sicherungskopien sind ratsam! Was ich nicht rausgekriegt habe ist, dass das Programm wenn ci es mehrmals über die selbe Datei laufen lasse am End der Ressource wiederholt XPADDINGX anhängt. Das führt zu einem Fehler beim Starten des Programms. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:33 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