Erkennen, ob Programm als Admin ausgeführt wird

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Scarmo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 188
Registriert: Di, 24. Jul 2007 9:17

Erkennen, ob Programm als Admin ausgeführt wird

Beitrag von Scarmo »

Hallo zusammen

Gibt es eine Möglichkeit zu erkennen, ob das laufende Programm als Administrator gestartet wurde oder nicht? Es geht mir darum, dass ich aus dem Programm eine DLL-Datei mit /regserver registrieren möchte (was natürlich nur funktioniert, wenn das Programm als Administrator ausgeführt wird...).

Oder kann ich abrufen, ob eine Datei bereits mit /regserver registriert ist? Würde es allenfalls reichen, die Registry (HKLM - Software - Classes) nach der entsprechenden DLL zu durchsuchen?

Bin für jeden Input dankbar!

Gruss
Marco
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Erkennen, ob Programm als Admin ausgeführt wird

Beitrag von Jan »

Marco,

wäre da eventuell das Impersonate Asset hilfreich, das Alaska seit ein paar Monaten mit ausliefert? Ich hab mir das noch nicht näher angeschaut, weiß also nicht wie detailliert das arbeitet. Aber vielleicht kannst Du damit ja den regedit-Prozess passend anheben?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Erkennen, ob Programm als Admin ausgeführt wird

Beitrag von AUGE_OHR »

hi,

ich nehme dazu eine "kleine" App mit einem Manifest was Admin Rechte ggf. anfordert

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity version="1.0.0.0"
     processorArchitecture="*"
     name="need Admin-rights"
     type="win32"/>
  <description>need Admin-rights</description>
  <!-- Identify the application security requirements. -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>
        </requestedPrivileges>
       </security>
  </trustInfo>
<dependency>
    <dependentAssembly>
         <assemblyIdentity
             type="win32"
             name="Microsoft.Windows.Common-Controls"
             version="6.0.0.0"
             processorArchitecture="X86"
             publicKeyToken="6595b64144ccf1df"
             language="*"
        />
    </dependentAssembly>
</dependency>
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
      <application> 
        <!--This Id value indicates the application supports Windows Vista functionality -->
          <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
        <!--This Id value indicates the application supports Windows 7 functionality-->
          <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
        <!--This Id value indicates the application supports Windows 8 functionality-->
          <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
        <!--This Id value indicates the application supports Windows 8.1 functionality-->
          <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
        <!--This Id value indicates the application supports Windows 10 functionality-->
          <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/> 
      </application> 
  </compatibility>
</assembly>
das ganze starte ich extern oder mit dem "RunAs" Befehl

Code: Alles auswählen

 ShellExecute( 0, "runas", cFile,,, SW_SHOW )
---

"ob" ein User Admin-Rechte hat kann man mit Ot4Xb und diesem Code von Pablo prüfen
TestRunAs.zip
(1.33 KiB) 148-mal heruntergeladen
gruss by OHR
Jimmy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Erkennen, ob Programm als Admin ausgeführt wird

Beitrag von Tom »

Wie die Impersonation funktioniert, habe ich hier ausführlich erklärt: https://www.xbaseforum.de/viewtopic.php?f=24&t=11983

Mit diesem Mittel kann man das Programm mit anderen Rechten ausstatten, aber dafür muss es intern eine andere Anmeldung durchführen, also Anmeldedaten kennen. Es hat dann auch einen anderen Benutzerkontext. Natürlich kann man ein Programm dadurch zwangsweise mit Admin-Rechten ausstatten, aber das wäre ein zu großer Aufwand, nur um eine Registrierung eines Controls durchzuführen. Dafür wären entsprechende Direktiven im Manifest geeigneter. Ob ein Control bereits registriert ist, checkt man, indem man die CLSID in der Registry sucht (HKEY_CLASSES_ROOT).

Im Netz kreist der Code für einen API-Wrapper, der die Funktion "IsUseranAdmin" publiziert. Damit kann die Anwendung selbst herausbekommen, ob sie mit Admin-Rechten läuft. Die Funktion wrappt u.a. "CheckTokenMembership" aus der Windows-API. Die Funktionen dazu findet man hier: https://docs.microsoft.com/en-us/window ... membership
Herzlich,
Tom
Benutzeravatar
Scarmo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 188
Registriert: Di, 24. Jul 2007 9:17

Re: Erkennen, ob Programm als Admin ausgeführt wird

Beitrag von Scarmo »

Vielen Dank für die zahlreichen Inputs. Mal schauen, ob ich über die ClsID weiterkomme.

Gruss
Marco
Antworten