Ich brauche meine Anwendung unterschiedlich zu verhalten, je nachdem, ob Vista UAC aktiviert ist oder nicht. Wie kann meine Anwendung auf dem Computer des Benutzers den Zustand der UAC erkennen?Wie zu erkennen, ob Vista UAC aktiviert ist?
Antwort
Schlüssel Dieser Registrierungs hilft, sollten Sie sagen:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
Wert EnableLUA (DWORD)
1
aktiviert/0
oder deaktiviert
fehlt Aber das setzt voraus, dass habe das Recht, es zu lesen.
Programmgesteuert können Sie versuchen, das Token des Benutzers zu lesen und zu erraten, ob es sich um einen Administrator mit aktivierter Benutzerkontensteuerung handelt (siehe here). Nicht idiotensicher, aber es könnte funktionieren.
Das Problem hier ist eher ein "Warum müssen Sie wissen" - es hat Auswirkungen auf die Antwort. Wirklich, es gibt keine API, weil es aus Sicht des Betriebssystems wichtig ist, ob der Benutzer ein Administrator ist oder nicht - wie sie sich als Administrator schützen, ist ihr Problem.
Dies ist ein Haken 22. Wenn UAC aktiviert ist, haben Sie wahrscheinlich keine Rechte zum Lesen. –
Eine geringfügige Korrektur: Der Registrierungsschlüssel ist HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Richtlinien \ System, und EnableLUA ist ein DWORD-Wert (es ist kein Schlüssel). HTH –
Sie sollten! = 0 und nicht mit 1 nach der Google Chrome-Quelle vergleichen (Anscheinend haben einige Systeme> 1 Werte) – Anders
prüfen für den Registrierungswert unter HKLM \ SOFTWARE \ Microsoft \ Windows \ Currentversion \ Policies \ System
Der EnableLUA Wert legt fest, ob UAC aktiv ist.
This post hat Beispielcode in C# zu testen, ob UAC aktiviert ist und wenn die aktuelle App hat erhöhte Rechte gegeben worden. Sie können den Code herunterladen und nach Bedarf interpretieren. Ebenfalls im Zusammenhang gibt es eine Probe, die das gleiche in C++ zeigt
http://www.itwriting.com/blog/198-c-code-to-detect-uac-elevation-on-vista.html
Der Code in diesem Beitrag nicht nur aus der Registrierung gelesen. Wenn UAC aktiviert ist, stehen die Chancen sind Sie nicht Rechte, die von der Registrierung zu lesen haben.
AFAIK ist UAC apolicy Einstellung auf dem lokalen Benutzer oder eine Gruppe. So können Sie diese Eigenschaft von .Net aus lesen. Sorry für die nicht mehr Details haben, aber ich hoffe, dass diese
Sie können es den DWORD-Wert EnableLUA in den folgenden Registrierungsschlüssel werden die Prüfung:
HKLM/Software/Microsoft/Windows/Currentversion/Policies/System
Wenn der Wert 0 (oder existiert nicht), dann ist die UAC ausgeschaltet. Wenn es vorhanden ist und nicht Null ist, dann ist UAC ON:
BOOL IsUacEnabled()
{
LPCTSTR pszSubKey = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System");
LPCTSTR pszValue = _T("EnableLUA");
DWORD dwType = 0;
DWORD dwValue = 0;
DWORD dwValueSize = sizeof(DWORD);
if (ERROR_SUCCESS != SHGetValue(HKEY_LOCAL_MACHINE, pszSubKey, pszValueOn,
&dwType, &dwValue, &dwValueSize))
{
return FALSE;
}
return dwValue != 0;
}
Beachten Sie, dass, wenn der Benutzer den Zustand der UAC verändert hat, aber nicht den Computer noch neu gestartet, wird diese Funktion ein uneinheitliches Ergebnis zurück.
Sie möchten nicht überprüfen, ob die Benutzerkontensteuerung aktiviert ist. Das sagt dir nichts.
Ich kann ein Standardbenutzer mit deaktivierter Benutzerkontensteuerung sein.
Sie wollen if the user is running with administrative privileges using CheckTokenMembership
überprüfen:
///This function tells us if we're running with administrative permissions.
function IsUserAdmin: Boolean;
var
b: BOOL;
AdministratorsGroup: PSID;
begin
{
This function returns true if you are currently running with
admin privileges.
In Vista and later, if you are non-elevated, this function will
return false (you are not running with administrative privileges).
If you *are* running elevated, then IsUserAdmin will return
true, as you are running with admin privileges.
Windows provides this similar function in Shell32.IsUserAnAdmin.
But the function is depricated, and this code is lifted from the
docs for CheckTokenMembership:
http://msdn.microsoft.com/en-us/library/aa376389.aspx
}
{
Routine Description: This routine returns TRUE if the caller's
process is a member of the Administrators local group. Caller is NOT
expected to be impersonating anyone and is expected to be able to
open its own process and process token.
Arguments: None.
Return Value:
TRUE - Caller has Administrators local group.
FALSE - Caller does not have Administrators local group.
}
b := AllocateAndInitializeSid(
SECURITY_NT_AUTHORITY,
2, //2 sub-authorities
SECURITY_BUILTIN_DOMAIN_RID, //sub-authority 0
DOMAIN_ALIAS_RID_ADMINS, //sub-authority 1
0, 0, 0, 0, 0, 0, //sub-authorities 2-7 not passed
AdministratorsGroup);
if (b) then
begin
if not CheckTokenMembership(0, AdministratorsGroup, b) then
b := False;
FreeSid(AdministratorsGroup);
end;
Result := b;
end;
Dieser Beitrag eher älter ist, aber ich wollte auf den Kommentar „Warum müssen Sie wissen“ und „Check-Token-Mitgliedschaft“ Bits.
Tatsache ist, dass Microsofts eigene Dokumentation besagt, dass "Wenn die Benutzerkontensteuerung deaktiviert wurde und ein Standardbenutzer versucht, eine Aufgabe auszuführen, die eine Erhöhung erfordert", sollten wir einen Fehler angeben, anstatt Schaltflächen und/oder Verknüpfungen anzuzeigen der UAC-Schild, der die Elevation versucht. Siehe http://msdn.microsoft.com/en-us/library/windows/desktop/aa511445.aspx nach unten für die Details.
Wie gehen wir dazu, ohne zu überprüfen, ob die UAC aktiviert ist?
Vielleicht ist es in diesem Fall richtig zu prüfen, ob der Benutzer mit Administratorrechten läuft, aber wer weiß? Die Anleitung, die Microsoft gibt, ist im besten Fall, wenn nicht gerade verwirrend.
Für alle anderen, die das finden und nach einer VBScript-Lösung suchen. Hier ist, was ich gefunden habe, um festzustellen, ob UAC aktiviert ist, und wenn ja, mein Skript mit erhöhten Rechten neu zu starten. Setzen Sie Ihren Code einfach in die Funktion Body(). Ich fand, dass es Probleme mit der Transportierbarkeit zwischen XP und Windows 7 gab, wenn ich Code schrieb, um immer erhöht zu starten. Mit dieser Methode umgehe ich die Höhe, wenn keine UAC vorhanden ist. Sollte auch 2008 und höher Serverversionen mit aktivierter Benutzerkontensteuerung berücksichtigen.
On Error Resume Next
UACPath = "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA"
Dim WshShell
Set WshShell = CreateObject("wscript.Shell")
UACValue = WshShell.RegRead(UACPath)
If UACValue = 1 Then
'Run Elevated
If WScript.Arguments.length =0 Then
Set objShell = CreateObject("Shell.Application")
'Pass a bogus argument with leading blank space, say [ uac]
objShell.ShellExecute "wscript.exe", Chr(34) & _
WScript.ScriptFullName & Chr(34) & " uac", "", "runas", 1
WScript.Quit
Else
Body()
End If
Else
Body()
End If
Function Body()
MsgBox "This is the body of the script"
End Function
- 1. überprüfen, ob UAC mit VB6 aktiviert ist
- 2. Vbscript erkennt, ob UAC-erhöht
- 3. Erkennen, ob GPS in Titanstudio aktiviert ist
- 4. Bildschirmschoner stürzt ab, wenn UAC aktiviert ist
- 5. Wie kann ich erkennen, ob ein Firewall-Produkt aktiviert ist?
- 6. Erkennen, ob WinHelp auf Vista oder neuer installiert ist Windows
- 7. Deaktivieren Sie UAC win7 & Vista von VB.net?
- 8. Wie kann ich erkennen, ob mein Prozess UAC-erhöht ausgeführt wird oder nicht?
- 9. Erkennen, ob mbstring aktiviert ist oder nicht von PHP-Skript
- 10. Erkennen, ob die Option "Großer Text" unter Android aktiviert ist
- 11. Erkennen, ob JavaScript mit ausgeblendetem Formularfeld aktiviert ist
- 12. So erkennen Sie, ob die Datenprüfsummenfunktion in Postgres aktiviert ist
- 13. iOS 7: Erkennen, ob App Autoupdate aktiviert ist?
- 14. Wie überprüft man, ob "Radiobutton" aktiviert ist?
- 15. zu erkennen, ob Desktop-
- 16. Wie zu überprüfen, ob mod_deflate in Apache aktiviert ist?
- 17. wie zu überprüfen, ob allow_url_fopen aktiviert ist oder nicht
- 18. Erkennen, ob Wifi eingeschaltet ist - iOS
- 19. Erkennen, ob Mod_Security mit PHP installiert ist?
- 20. Erkennen, ob JIT verfügbar ist
- 21. Erkennen, ob Datei MP3 ist
- 22. Windows 7 und Vista UAC - programmatisch Erhöhung in C#
- 23. Erkennen, ob Chrome Webview ist?
- 24. Wie kann ich erkennen, ob in Swing die Feststelltaste aktiviert ist?
- 25. Vista UAC Probleme mit Samba und Admin Credentials
- 26. , wie zu erkennen, ob Telefon hat
- 27. WriteProcessMemory zu SYSTEM-Prozess mit SeDebugPrivilege aktiviert. (C, Vista)
- 28. Ist es möglich zu erkennen, ob das Mobilfunknetz verfügbar ist?
- 29. Wie erkennen Zugänglichkeit Einstellungen auf Android ist aktiviert/deaktiviert
- 30. Ermitteln, ob mein Erreichbarkeitsdienst aktiviert ist
Können Sie erklären, warum Sie das brauchen? –
Zum Beispiel habe ich eine Anwendung, die eine API zu einem externen Programm verwendet, die UAC aktiviert werden muss, um sogar zu funktionieren. Wenn UAC deaktiviert ist, möchte ich den Benutzer mit einem Dialogfenster informieren. –