none
warum bekommt eine Anwendung das Admin-Shield der Benutzerkontensteuerung UAC? RRS feed

  • Frage

  • Hallo zusammen,

    ich bin Anwendungsentwickler und habe folgendes Problem unter Win 7:

    Ich habe eine (ältere) Anwendung, die direkt von CD ohne Installation laufen kann. Das funktioniert problemlos.
    Die gleiche Anwendung kann ich mit einem (Inno-) Setup auf die Festplatte installieren. Dabei bekommt meine Anwendung den Admin-Shield (kenne den deutschen Asudruck nicht) im Icon und die UAC fragt bei jedem Programmstart (nicht nur beim Setup!), ob ich das Programm zulassen möchte, da es Änderungen am Computer vornehmen möchte. Ich schreibe aber weder etwas auf C:, noch auf C:\Program Files, noch in die Registry. Und das ist natürlich lästig.

    Was ich nicht verstehe:

    1. Worin liegt der Unterschied, ob ich das Programm von CD oder HD starte?

    2. Ich habe eine zweite, fast identische Anwendung, bei der das Icon nach der Installtion weder das Admin-Schild bekommt, noch die UAC-Abfrage beim Programmstart erscheint. Worin liegt der Unterschied für Windows? Wovon hängt es ab, ob Windows die UAC-Abfrage verlangt, oder nicht?

    3. Ich habe jetzt sooft deinstalliert und neu installiert, dass ich mir nicht mehr ganz sicher bin. Aber ich glaube, dass bei den ersten Tests das Icon kein Admin-Schild bekommen hatte und erst später. Aber jetzt immer, auch nach jeder Deinstallation, so, als wenn Windows sich irgendwo merkt, dass es einmal die Admin-Berechtigung wollte. Ich habe schon die Registry durchsucht, aber keinen Hinweis gefunden.

    4. Ich weiß noch nicht einmal, ob das Problem im setup (InnoSetup) oder meiner Anwendungssoftware liegt. woher nimmt Windows seine Informationen, ob es die Administrator-Berechtigungen beim Programmstart (nicht beim setup) verlangt, oder nicht?

    Ich bin als User der Admin Gruppe angemeldet. Ich habe zusätzlich versucht über die rechte Maustaste "als Administrator ausführen" zu installieren, ich habe alternativ versucht im XP-Kompatibilitätsmodus zu installieren, alles mit dem gleichen Ergebnis.

    Ich habe bisher immer nur allgemeine Erläuterungen zum was und wie der UAC gefunden, aber meine Probleme und Fragen konnte ich bisher nirgends beantwortet bekommen.

    Ich bin für jede Erklärung oder Hinweis oder weiterführende Links dankbar
    Tiemo
    Dienstag, 2. März 2010 16:57

Antworten

  • Es gibt Shims, die überprügfen was ob eine Applikation ein Setup sein kann. Dazu wird auch in die Versions-Infosunddie Programmbeschreibung reingesehen.

    Erklärung hier
    http://blog.kalmbach-software.de/2009/06/09/custom-installer-without-warning-dialog-trustedinstallerexe/

    Siehe auch:
    http://msdn.microsoft.com/en-us/library/bb756937.aspx
    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Mittwoch, 3. März 2010 10:59
  • Dann füge das hier in dein Manifest ein:

      <security>
       <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
       </requestedPrivileges>
      </security>
      <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
       <application>
        <!-- UAC supportedOS Options 
           {e2011457-1546-43c5-a5fe-008deee3d3f0} = Vista
           {35138b9a-5d96-4fbd-8e2d-a2440225f93a} = Windows 7
        -->
        <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
        <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
       </application>
      </compatibility>
    

    André


    "A programmer is just a tool which converts caffeine into code" CLIP- Stellvertreter http://www.winvistaside.de/
    Sonntag, 21. November 2010 11:19

Alle Antworten

  • MSDNTiemo:

    > 4. Ich weiß noch nicht einmal, ob das Problem im setup (InnoSetup) oder meiner
    > Anwendungssoftware liegt.

    Moderne Anwendungen machen das über ein xml-Manifest (requireAdministrator),
    wenn eine Anwendung erhöhte Rechte braucht, siehe hier:
    http://msdn.microsoft.com/en-us/library/bb756929.aspx
    Bei älteren Anwendungen ist das aber nicht gegeben. Also schätzte ich mal,
    dass es in deinem Fall beim Setup geschieht.
    Ältere Anwendungen in %programfiles% wollen auch gerne in diesen Pfad im
    Programmverzeichnis schreiben, was von Windows auch verhindert wird, indem
    der Schreibvorgang nach VirtualStore virtualisiert wird. So ein Vorgang
    produziert aber keinen UAC-Prompt.

    > woher nimmt Windows seine Informationen, ob es die
    > Administrator-Berechtigungen beim Programmstart (nicht beim setup) verlangt, oder nicht?

    Abgesehen davon, dass Setups auch entsprechende Manifeste enthalten können,
    hat Windows auch eine automatische Setup-Erkennung, die dem Setup
    automatisch erhöhte Rechte zuweist. Schaltet man das ab, muss man das Setup
    manuell erhöhen, sonst läuft es ggf. auch vor die Wand.

    > Ich bin als User der Admin Gruppe angemeldet.

    Damit hast du noch keine Admin-Rechte.

    > Ich habe zusätzlich versucht über die rechte
    > Maustaste "als Administrator ausführen" zu installieren, ich habe alternativ versucht im
    > XP-Kompatibilitätsmodus zu installieren, alles mit dem gleichen Ergebnis.

    Es bleibt halt nebulös, was genau dieses "InnoSetup" macht. Wenn die
    Anwendung ohne Installation läuft, produziert sie doch sicher beim Start
    keinen UAC-Prompt, wenn man sie einfach auf die HD kopiert.

    > Ich habe bisher immer nur allgemeine Erläuterungen zum was und wie der UAC gefunden, aber
    > meine Probleme und Fragen konnte ich bisher nirgends beantwortet bekommen.

    Obiger Satz "Ich bin als User der Admin Gruppe angemeldet" klingt irgendwie
    so, als bestünden da noch Missverständnisse.

    hpm
    Dienstag, 2. März 2010 20:14
  • Hallo Hans-Peter,

    erstmal vielen Dank für Deine hilfreichen Antworten.

    Mit "User der Admin Gruppe" meinte ich, dass ich mit einem Benutzer angemeldet bin (dem Einzigen), der zur Gruppe der im Benutzerprofil zur Gruppe der Administratoren gehört.

    Ich habe jetzt nochmal einiges getestet und folgendes festgestellt:

    Meine Exe ist eine mit einem Kopierschutztreiber von Protect-Software geschützte Exe. Diese Exe installiert beim ersten Programmstart (noch nicht beim Setup) Kopierschutztreiber zur Prüfung, ob eine Original-CD im Laufwerk liegt. Diese Exe habe ich von Protect-Software mit aktuellen (Windows 7 kompatiblen) Treibern neu schützen lassen. Das ist u.a. ein Grund für den neuen Setup-Build.

    Jetzt habe ich einfach mal eine ungeschützte Version meiner exe (und auch eine alte Version der geschützten Exe) in den Setup eingebaut und installiert. Siehe da, beide Male hat mein Programm nach der Installation kein Admin-Schild. Nur wenn ich die neueste Version der Kopierschutztreiber verwende (die aber angeblich gerade Win 7 kompatibel sein sollen), bekommt meine Exe dieses Admin-Schild, was ja wohl wenn ich das richtig verstehe nichts anderes heißt, dass man dieses Programm nur mit Admin-Rechten starten kann.

    Also hat das Phänomen nichts mit InnoSetup zu tun, sondern mit meiner Exe, bzw. den darin enthaltenen Kopierschutztreibern. Der Setup, den ich mit InnoSetup gebaut habe, wird korrekt auf Administrator-Rechte angehoben.

    Was ich überhaupt noch nicht verstehe ist, wie Windows den Unterschied meiner Exen schon bei der Installation "merkt". Denn die Kopierschutztreiber werden ja erst, wie gesagt, beim ersten Programmstart installiert. Und soweit bin ich gar nicht gegangen. Kann es sein, dass Windows tatsächlich während der Installation jede Exe und dll analysiert, ob die später evtl. etwas in einem geschützten Bereich machen wollen und so der Exe prophylaktisch das Admin-Schild verpasst?

    Das ist für mich ein Buch mit sieben Siegeln.

    Bin für jede Aufklärung und "Nachhilfe" dankbar, damit ich verstehe, wo und wie ich da jetzt ansetzen muss (außer mit Protect-Software zu sprechen). Ich würde einfach gerne verstehen, was und wie da was passiert.

    Vielen Dank
    Tiemo






    Mittwoch, 3. März 2010 09:19
  • Es gibt Shims, die überprügfen was ob eine Applikation ein Setup sein kann. Dazu wird auch in die Versions-Infosunddie Programmbeschreibung reingesehen.

    Erklärung hier
    http://blog.kalmbach-software.de/2009/06/09/custom-installer-without-warning-dialog-trustedinstallerexe/

    Siehe auch:
    http://msdn.microsoft.com/en-us/library/bb756937.aspx
    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Mittwoch, 3. März 2010 10:59
  • MSDNTiemo:

    > Bin für jede Aufklärung und "Nachhilfe" dankbar

    Da hat Martin ja gute Links gepostet. ;-)

    hpm
    Mittwoch, 3. März 2010 12:34
  • Hallo Martin,

    vielen Dank für die Links. Ich werde mich noch rein vertiefen, aber beim schnellen Querlesen bin ich unsicher, ob das mein Problem betrifft.

    Der Blog von Jochen Kalmbach beschreibt die Erkennung eines Setups. Mein Setup (setup.exe) funktioniert aber problemlos und wird auch von Windows als solcher erkannt, d.h. es kommt beim Start die Erlaubnisabfrage von der UAC. Das Problem ist meine Anwendungsprogramm-Exe, die vom Setup installiert wird.

    Die PCA Beschreibung im MSDN beschreibt Kompatibiltätsprobleme beim Starten eines Programms. Mein Programm startet aber problemlos, es werden keinerlei Fehler ausgeworfen. Der "Schönheitsfehler" ist "nur", dass meine Anwendung das "Admin-Schild" (ich weiß nicht wie das blau-gelbe Wappen offiziell heißt) von Windows verpasst bekommt und fortan bei jedem Programmstart die Erlaubnis von Administratorrechten ("Das Programm möchte was an Ihrem Computer verändern...") eingeholt wird. Vielleicht habe ich aber dieses Problem auch beim schnellen Querlesen im MSDN übersehen...

    Mein Kopierschutzhersteller meinte auf meine Anfrage nur lapidar, dass sie auch keine Erklärung hätten, es aber sein könne, dass Windows beim Installieren meine Exe analysiert und ich doch einfach eine Manifestdatei hinzufügen soll. - Puhh, ich weiß, dass es Manifestdateien gibt, habe aber weder Ahnung, wie ich so ein Ding erstellen muss (muss ich glaube ich bei MS beantragen?), noch, ob das überhaupt die Lösung wäre. Bisher bin ich gut ohne Manifest ausgekommen. Hat hier zufällig jemand auch noch einen Link zum Erstellen einer ManifestDatei?

    Vielen Dank
    Tiemo
    Mittwoch, 3. März 2010 14:02
  • MSDNTiemo:

    > Die PCA Beschreibung im MSDN beschreibt Kompatibiltätsprobleme beim Starten eines
    > Programms. Mein Programm startet aber problemlos, es werden keinerlei Fehler ausgeworfen. Der
    > "Schönheitsfehler" ist "nur", dass meine Anwendung das "Admin-Schild" (ich weiß nicht wie das
    > blau-gelbe Wappen offiziell heißt) von Windows verpasst bekommt und fortan bei jedem
    > Programmstart die Erlaubnis von Administratorrechten ("Das Programm möchte was an Ihrem
    > Computer verändern...") eingeholt wird. Vielleicht habe ich aber dieses Problem auch beim schnellen
    > Querlesen im MSDN übersehen...

    IMHO wäre PCA eine Erklärung dafür. Hat die Exe denn in den erweiterten
    Eigenschaften eventuell ein Häkchen bei "Als Admin ausführen" bekommen?

    > Mein Kopierschutzhersteller meinte auf meine Anfrage nur lapidar, dass sie auch keine Erklärung
    > hätten, es aber sein könne, dass Windows beim Installieren meine Exe analysiert und ich doch
    > einfach eine Manifestdatei hinzufügen soll.

    Dann müsste das aber doch mit der alten Version auch so sein. Da geschieht
    es allerdings nicht, wie du schriebst.

    > - Puhh, ich weiß, dass es Manifestdateien gibt, habe
    > aber weder Ahnung, wie ich so ein Ding erstellen muss (muss ich glaube ich bei MS beantragen?),
    > noch, ob das überhaupt die Lösung wäre. Bisher bin ich gut ohne Manifest ausgekommen. Hat hier
    > zufällig jemand auch noch einen Link zum Erstellen einer ManifestDatei?

    Dazu hatte ich doch einen Link gepostet:
    Step 6: Create and Embed an Application Manifest (UAC)
    http://msdn.microsoft.com/en-us/library/bb756929.aspx

    hpm
    Mittwoch, 3. März 2010 18:16
  • Was steht denn in der Programm-INfo von Deiner EXE?
    Oder steht in Deinem Namen Install oder Setup?

    Darum geht es ja auch. Sobald dies der Fall ist "denkt" Vista/Windows 7 Dein Programm muss als Admin laufen.

    Hat Deine EXE denn ein Manifest?

    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Mittwoch, 3. März 2010 19:34
  • Hallo Hans-Peter und Martin,

    vielen Dank für Eure weitere Hilfe!

    Also in den Eigenschaften | Details meiner Exe kommt keins der Schlüsselwörter vor und die exe selbst heißt start.exe

    Ein Manifest hat mein Programm leider nicht. Ich habe gelesen, dass ein Manifest heute eigentlich dazu gehört, habe aber bisher nur Beispiele und Anleitungen für die einschlägigen 3GL Programmiersprachen gefunden und gesehen, dass ein Manifest nicht nur aus der Manifest Datei besteht, sondern auch irgendwie in die Exe eingebunden werden muss. Da ich mit Authoring Systemen Toolbook und RunRev arbeite und hier noch nichts gefunden habe, ob und wie man eine Manifestdatei embeden kann, komme ich hier momentan nicht weiter.

    Dafür haben haben weitere Test ein für mich noch unklareres Bild ergeben.
    Ich habe zwei setups mit zwei verschiedenen Versionen meiner start.exe (alter / neuer Kopierschutz, sonst alles identisch)

    Installation auf einem Vista-Rechner mit Anmeldung als lokalem Admin-User:
    Beide exen werden "normal", ohne Admin-Schild installiert

    Installation auf einem Win 7 Rechner mit Anmeldung als lokalem Admin-User:
    Beide exen werden "normal", ohne Admin-Schild installiert

    Installation auf einem Win 7 Rechner mit Anmeldung als Domänen Admin-User:
    die alte start.exe wird normal installiert
    die neue start.exe wird mit dem Admin-Schild installiert

    Also muss es einen Einfluss des neuen Kopierschutzes geben, der aber nur unter meinem Domänen-User auftritt. Der aber genauso, wie der lokale User zur Gruppe der Administratoren gehört.

    Ich bin ziemlich verwirrt. Wenn das ganze jetzt nur ein völlig exotisches Phänomen auf meinem Rechner ist, könnte ich sagen, ich ignoriere es, aber ich weiß nicht bei wieviel Rechnern meiner Kunden das Problem dann auftritt und ich im Support nicht mehr froh werde...

    Vielen Dank für weitere Ideen
    Tiemo




    Donnerstag, 4. März 2010 13:33
  • Hab hier dasselbe Problem. Allerdings ist meine Anwendung eine WinForm-Anwendung die ich mit VisualStudio 2005 in C#.net 2.0 für x86 kompiliert habe. Auch die bekommt (von mir unerwünscht) das Schild verpasst. Und sie verwendet keinerlei Kopierschutztreiber. Ich habe sie noch nicht einmal mit einer Setuproutine installiert, sondern lediglich die kompilierte Anwendungs-exe von meinem Entwicklerlaptop (WinXP 32) via USB-Festplatte auf den Testrechner (Win7 64) kopiert. Auf dem Testrechner bin ich als lokaler Administrator angemeldet, die UAC habe ich "abgeschaltet" (komplett abschalten lässt sie sich ja nicht, aber der Schieberegler ist auf der untersten Position).

    Trotz alledem bekommt meine Anwendungs-exe sobald ich sie von der USB-Harddisk nach "C:\Program Files (x86)\MeinAnwendungsName\" kopiert habe, das lästig-nervig-überflüssige Schild verpasst und bringt dann auch immer eine UAC-Aufforderung wenn man das Ding starten will. Hat jemand eine Lösung gefunden? Oder kann ich eine manifest-Datei basteln in der man sagt "Diese Anwendung ist dann im Fall kein Setup und kein Admintool und soll auch kein Schild bekommen!".

    Samstag, 20. November 2010 20:24
  • Dann füge das hier in dein Manifest ein:

      <security>
       <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
       </requestedPrivileges>
      </security>
      <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
       <application>
        <!-- UAC supportedOS Options 
           {e2011457-1546-43c5-a5fe-008deee3d3f0} = Vista
           {35138b9a-5d96-4fbd-8e2d-a2440225f93a} = Windows 7
        -->
        <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
        <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
       </application>
      </compatibility>
    

    André


    "A programmer is just a tool which converts caffeine into code" CLIP- Stellvertreter http://www.winvistaside.de/
    Sonntag, 21. November 2010 11:19
  • Andre hat Dir die Antwort schon gegeben.

    Nur zur Erklärung, Dein Programm hat einen Namen, der bei einem Programm ohne Manifest auf ein Install- oder Setup Programm hinweist.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Sonntag, 21. November 2010 16:07