Adminrechte mit Manifest NEU: Dateizugriffsproblem



  • Hallo,

    ich habe folgendes Problem: Ich möchte mein Programm mit Admin-Rechten unter Windows 7 starten und habe hier gelesen, dass dies mit Manifestdateien geht.

    Ich habe in mein Projekt die Folgende .rc Datei eingefügt

    Manifest 24 "Admin.manifest"
    

    In der Admin.manifest steht das folgende:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <trustInfo xmlns=”urn:schemas-microsoft-com:asm.v3">
        <security>
          <requestedPrivileges>
             <requestedExecutionLevel level="requireAdministrator" />
          </requestedPrivileges>
        </security>
      </trustInfo>
    </assembly>
    

    Trotzdem erschein nicht das schöne Fenster welches fragt ob ich das Programm wirklich ausführen möchte oder das Schild wird auch nicht in das Icon eingeblendet!

    Was mache ich falsch oder was habe ich vergessen?



  • ich glaube nicht, dass man einfach durch so eine popelige Manifestdatei dem Programm Adminrechte geben kann.

    greetz KN4CK3R



  • Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ich weiß nicht, ob man die Manifest-Datei auch einbetten kann. Ich kenne es nur so, dass die Datei im gleichen Ordner liegt und den gleichen Dateinamen trägt wie die exe-Datei, plus ".manifest"; also dann "foo.exe.manifest".


  • Mod

    Was hat Manifest für eine ID?
    Es muss die ID 1 haben.

    Kann es sein, dass dieses Manifestin der EXE nun unter dem Namen stehgt. Öffne die Datei (EXE) mal im Ressourcen-Editor



  • Eins? ich dachte ein Manifest müsste die ID 24 haben? bei mir haben sie alle die ID 24 und es funktioniert.



  • _Luckie schrieb:

    Eins? ich dachte ein Manifest müsste die ID 24 haben? bei mir haben sie alle die ID 24 und es funktioniert.

    Nein, die haben nicht 24 als ID sondern als Typ. Korrekt sieht es so aus:

    1 24 "Admin.manifest"
    

  • Mod

    Im SDK gibt es IMHO speziele defines die dieses 1 24 unnötig machen

    CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST  "Admin.manifest"
    

    Die Verwendung dieser Manifeste sind wie immer in der MSDN beschrieben:
    http://msdn.microsoft.com/en-us/library/ms997646.aspx



  • Also im Resource Editor ist die Manifest in der ersten Zeile drin! Ich habe jetzt auch mal den Ansatz mit

    CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST  "Admin.manifest"
    

    versucht aber weiterhin ohne Erfolg!
    Ich nutze den CodeGear C++ Builder 2009 und habe halt wie beschrieben die Manifestdatei eingefügt. Vorher habe ich eine Textdatei im Texteditor erstellt und die XML Zeilen eingefügt, wie oben stehen und halt nach Admin.manifest umbenannt!

    Mein Ziel ist es halt einfach nur, dass Vista oder Windows 7 nachfragt, ob ich das Programm als Admin ausführen möchte und wenn ja, dann das Programm halt Adminrechte hat!



  • Das funktioniert erst dann, wenn Du auch winuser.rh in Deinem Ressourcen-Script inkludierst. Mit den Zahlen wär's halt auch ohne gegangen...



  • Wie genau soll das mit der winuser.rh in meinem Ressourcen-Script gehen? Einfach mit #include <winuser.rh> in der .rc Datei includieren oder wie mache ich das?



  • Ja, einfach oben inkludieren, er meinte aber wahrscheinlich winuser.h (also ein 'r' weniger).



  • Badestrand schrieb:

    , er meinte aber wahrscheinlich winuser.h (also ein 'r' weniger).

    Nein, ich meinte winuser.rh.



  • Vielen Dank es klappt jetzt!
    Das mit der winuser.h habe ich bereits versucht aber wie ich es jetzt merkte hatte ich einen Fehler in der Manifestdatei! Dort war ein falscher Anführungsstrich!



  • Hi, ich habe da noch ein Problem wegen den Adminrechten.

    Also die schöne Meldung kommt mit Hilfe des Manifests aber ich möchte jetzt gerne eine Datei mit folgender Funktion öffnen, die als Besitzer den TrustedInstaller hat:

    HANDLE hFile = CreateFile((Dateipfad).c_str(),GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0, NULL);
    

    Jedoch bekomme ich immer beim Öffnen die Fehlermeldung "Das Handle ist ungültig." über GetLastError() zurück. Ich gehe mal davon aus, dass es am TrustedInstaller liegt, da andere Dateien, die als Besitzer die Administratorengruppe haben kann ich ohne Probleme öffnen.

    Jedoch KANN es sein, dass die Rechte der Dateien mit TrustedInstaller als Besitzer nicht mehr standardmäßig sind, da alle Benutzer/ Gruppen nur folgendes dürfen: "Lesen, Ausführen ; Ordnerinhalt anzeigen ; Lesen", jedoch der TrustedInstaller hat vollen Zugriff auf diese.

    Was kann ich machen, damit ich Dateien öffnen kann, wo der TrustedInstaller als Besitzer angegeben ist?
    Und sind die Rechte für die anderen Benutzer so in Ordnung? Das war jetzt als Beispiel der winsxs Ordner von meinem Windows 7 x64 System.



  • Hat sich erledigt!
    Ich habe vergessen mir Privilegien zu geben!



  • Wie, was braucht man denn da?


Log in to reply