Adminrechte bei Programmstart anfordern.



  • Moin.

    Seit gestern google ich und lese Forenbeiträge, aber egal was ich tue, es hat einfach keinen Effekt.
    Ich poste das jetzt speziell im VCL und nicht im WinAPI-Forum, da ich mit dem Rad Studio 2010 arbeite.

    Ich habe eine Testanwendung erstellt, die letztendlich nur...

    CreateDir( "Test" );
    

    ...ausführt.
    Die Exe kopiere ich in das Programme-Verzeichnis (Zum Rechte-Test) und führe es aus. Ohne Rechte wird der Ordner natürlich nicht erzeugt.

    Nach viel Lesen, hat sich die Methode mit der Manifest-Datei in meinen Augen als das Sinnigste herausgestellt (runas ist keine Option).
    Ich brauche unbedingt diesen UAC Dialog, bevor die Anwendung startet.
    Ich habe nun folgendes getan:

    1. Eine Datei (Exename).exe.manifest mit folgendem Inhalt erzeugt:
      <?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" uiAccess="false"/>
      </requestedPrivileges>
      </security>
      </trustInfo>
      </assembly>

    (Syntax falsch?)

    1. Im RAD Studio -> Projekte -> Ressourcen wird die Datei hinzugefügt (RCData)

    2. Die Anwendung wird erzeugt (Im Texteditor sehe ich dann auch im Klartext, dass die Datei in die Exe kompiliert worden ist).

    ... Und es tut sich einfach nichts. Egal was ich mache... (Mit oder ohne Laufzeit-Themes), egal was ich abändere ... nichts.

    Ich habe das Gefühl, etwas grundlegendes noch nicht verstanden zu haben. Kann man beim RAD-Studio selber noch irgendwas einstellen in dieser Hinsicht.
    Kein Beispiel aus irgendwelchen Foren funktioniert. Hat jemand eine Idee was ich falsch mache oder irgendeinen Hinweis, wo ich noch suchen soll?

    Grüße



  • versuche es mal damit:

    <requestedExecutionLevel level="highestAvailable" />
    


  • Es - geht - alles - nicht.

    Es ist zum verzweifeln. Ich bin nun legliche Kombinationen durchgegangen. Verschiedene Manifeste mit verschiedenen Inhalten.

    Die einzige Variante, die geht.. also wo die Administratorabfrage kommt ist:

    Laufzeit-Themes für das Projekt deaktivieren und eines der Schlüsselwörter wie "update" in den Exe-Namen schreiben.
    Laufzeit-Themes aktiviert führt nämlich dazu, dass "asInvoker" in die Datei geschrieben wird.
    Ohne dieses Laufzeit-Themes sieht die Anwendung aber halt schäbig aus.

    😕



  • Du musst das Manifest mit der ID 1 hinzufügen!
    Alternativ kannst Du es als externes Manifest machen mit dem Namen:
    name-der.exe.manifest
    Damit geht es dann auf jeden Fall.



  • Die Datei als Ressource normal einzubinden geht nicht.
    Man kann zwar die ID auf 1 stellen aber nicht den type auf 24 bzw. RT_MANIFEST.

    Wenn ich jetzt irgendwie so rumtrickse und mitm Txt-Editor die erzeugte Ressourcendatei ändere, kommt der Ressourcencompiler nicht klar, weil ja die RAD-Studio generierte .res Datei ebenfalls anscheinend solche Werte enthält.

    Es geht, wenn ich komplett die Project*.res Datei entferne. Also die automatisch generierte. Dann habe ich aber auch wiederum nicht die Möglichkeit die Laufzeit-Themen bzw. n Icon für die Anwendung anzugeben.

    Ich frage mich ob ich jetzt tatsächlich auf die automatisch generierte Datei verzichten und mich jetzt langwierig damit beschäftigen muss, wie man die Laufzeit-Themes in einer eigenen Ressource Datei aktiviert.



  • Ich habe die Laufzeit-Themes aktiviert

    Ich habe nun folgende Manifest-Datei Security.manifest:

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

    Dazu folgende Resource-Datei Security.rc:
    1 RT_MANIFEST "Security.manifest"

    Die Security.rc binde ich in mein Projekt mit ein. Das Programm wird erzeugt, alles wunderbar.
    In meiner Exe steht nun u.a. folgendes:

    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
          <requestedPrivileges>
            <requestedExecutionLevel
              level="requireAdministrator"
              uiAccess="false"/>
            </requestedPrivileges>
        </security>
      </trustInfo>  
    </assembly>
    ...
    ...
    ...
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <assemblyIdentity
        type="win32"
        name="CodeGear RAD Studio"
        version="14.0.3615.26342" 
        processorArchitecture="*"/>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            publicKeyToken="6595b64144ccf1df"
            language="*"
            processorArchitecture="*"/>
        </dependentAssembly>
      </dependency>
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
          <requestedPrivileges>
            <requestedExecutionLevel
              level="asInvoker"
              uiAccess="false"/>
            </requestedPrivileges>
        </security>
      </trustInfo>
    </assembly>
    

    Es geht nicht! Aaaah. Es geht nur, wenn ich diese verdammte automatisch generierte Ressource nicht mit reinnehme.
    Ich denke es liegt am "asInvoker"...


Anmelden zum Antworten