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
Erkennen, ob Programm als Admin ausgeführt wird
Moderator: Moderatoren
- Jan
- Marvin
- Beiträge: 14651
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Erkennen, ob Programm als Admin ausgeführt wird
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
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Erkennen, ob Programm als Admin ausgeführt wird
hi,
ich nehme dazu eine "kleine" App mit einem Manifest was Admin Rechte ggf. anfordert
das ganze starte ich extern oder mit dem "RunAs" Befehl
---
"ob" ein User Admin-Rechte hat kann man mit Ot4Xb und diesem Code von Pablo prüfen
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>
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
gruss by OHR
Jimmy
Jimmy
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9357
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Erkennen, ob Programm als Admin ausgeführt wird
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
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
Tom
Re: Erkennen, ob Programm als Admin ausgeführt wird
Vielen Dank für die zahlreichen Inputs. Mal schauen, ob ich über die ClsID weiterkomme.
Gruss
Marco
Gruss
Marco