Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Admin Manifest als Einzeldatei (https://www.delphipraxis.net/187422-admin-manifest-als-einzeldatei.html)

Shark99 27. Nov 2015 19:52

Admin Manifest als Einzeldatei
 
Ich bin in ein Delphi 7 Program ein Manifest Resource ein damit die Anwendung mit Admin-Rechten startet. Es funktioniert einwandfrei. Den Code poste ich mal trotzdem (können andere Leute ja gebrauchen).
Delphi-Quellcode:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
    version="1.1.1.1"
    processorArchitecture="X86"
    name="Company.Exename"
    type="Win32"/>
  <description>My App Description</description>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
            <!-- Windows 10 -->
            <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
            <!-- Windows 8.1 -->
            <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
            <!-- Windows Vista -->
            <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
            <!-- Windows 7 -->
            <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
            <!-- Windows 8 -->
            <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
    </application>
  </compatibility>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="*"/>
    </dependentAssembly>
  </dependency>
</assembly>
Ich kompiliere es zu einem .res file und binde in die MainForm ein. Nach dem starten des Programs kommt die UAC Nachfrage und ich hab Admin Rechte. So weit so gut.

Der Kunde will aber nun das man bei der Installation bestimmen soll ob das Programm Admin Rechte beim Starten bekommt oder nicht.

Ich dachte die einfachste Möglichkeit es zu implementieren wäre das Manifest Resource aus dem Exe rauszunehmen und es als einzelne Datei auszuliefern.

Hab also Admin.res entfernt, kompiliert, getestet, alles OK, es kommt keine UAC Abfrage mehr. Dann habe ich das XML (nicht das res) von oben genommen und als exename.exe.manifest in das gleiche Verzeichnis wie exename.exe gespeichert.

Ich habe nun erwartet dass beim Starten von exename wieder die UAC Abfrage kommt. Es tut sich jedoch nichts und das Programm bekommt keine Adminrechte. Was mache ich falsch?

Bernhard Geyer 27. Nov 2015 20:21

AW: Admin Manifest als Einzeldatei
 
Wenn die Datei sowohl mit als auch ohne UAC-Abfrage funktionieren soll dann binde kein "level="requireAdministrator""-Manifest ein sondern "restarte" die Anwendung mit "runas"-parameter.

Shark99 27. Nov 2015 20:35

AW: Admin Manifest als Einzeldatei
 
Die Exe soll je nachdem auf welchen PC sie installiert wird mit Admin rechten starten oder nicht. Also PC A, beim Installieren Checkbox Admin-Rechte an, es wird exe + admin manifest installiert, PC B beim Installieren Checkbox Admin-Rechte aus, es wird nur exe installiert.

Bernhard Geyer 27. Nov 2015 20:44

AW: Admin Manifest als Einzeldatei
 
Zitat:

Zitat von Shark99 (Beitrag 1322741)
Die Exe soll je nachdem auf welchen PC sie installiert wird mit Admin rechten starten oder nicht. Also PC A, beim Installieren Checkbox Admin-Rechte an, es wird exe + admin manifest installiert, PC B beim Installieren Checkbox Admin-Rechte aus, es wird nur exe installiert.

Es gibt doch in den Dateieigenschaften unter Windows die Checkbox "Mit Adminrechten starten". Diese Dateieigenschaft müsste der Installer setzen.

Shark99 27. Nov 2015 21:00

AW: Admin Manifest als Einzeldatei
 
Das wäre eine Möglichkeit, alledings nicht perfekt falls jemand das Shortcut löscht. Ich würde trotzdem gerne wissen wieso es mit dem Manifest als Datei nicht funktioniert.

SMO 27. Nov 2015 21:24

AW: Admin Manifest als Einzeldatei
 
Also bei mir funktioniert das.
Hast du sichergestellt, dass die Exe kein internes Manifest mehr enthält? Das setzt sonst das externe außer Kraft.
Mehr Infos siehe hier.

Shark99 27. Nov 2015 21:31

AW: Admin Manifest als Einzeldatei
 
Ja, ist ganz sicher so. Exe Größe ist kleiner geworden und es kommt keine UAC Abfrage mehr wie mit dem Manifest. Ich bin unter Win 10 x64.

SMO 27. Nov 2015 23:30

AW: Admin Manifest als Einzeldatei
 
Also an der Dateigröße würde ich das nicht festmachen. Am besten einen Ressourceneditor nehmen und nachschauen.
Wobei ich schon glaube, dass du recht hast.
Vielleichts liegt's an deinem XML? Ich habe die kurze Version von der Stackoverflow-Seite genommen, die ich verlinkt habe. Hat wie gesagt funktioniert, Win 8.1 x64.

dummzeuch 28. Nov 2015 11:42

AW: Admin Manifest als Einzeldatei
 
Externe Manifeste funktionieren nur dann zuverlaessig, wenn Windows das Programm nicht schon kennt. Ich habe auch eine Weile damit rumexperimentiert und es schliesslich aufgegeben.

Artikel dazu Find Out Why Your External Manifest is Being Ignored.

Wenn nur ein Programmteil Adminrechte benoetigt, so sollte man diesen Teil z.B. in ein eigenes Programm auslagern und es bei Bedarf starten.

Shark99 28. Nov 2015 12:03

AW: Admin Manifest als Einzeldatei
 
Danke für den Link! Sehr interessant.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:19 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz