Hinweismeldung für eingeschränkte Anwender

Antworten
Marchert
Beiträge: 44
Registriert: 02.01.2006, 16:08
Wohnort: Fürth/Bayern
Kontaktdaten:

Hinweismeldung für eingeschränkte Anwender

Beitrag von Marchert »

Hallo,

das Update-Download-Tool finde ich sehr gut und habe es auch bisher ohne Probleme im Einsatz.

Was ich vermisse, ist eine Hinweismeldung an Anwender, die nicht über Adminrechte verfügen. Stoßen diese eine Updateprüfung an, so geschieht Augenscheinlich nichts, außer dass kurz der Task des Update-Tools in der Task-Leiste angezeigt wird.

Alternativ wäre es auch möglich, im jeweiligen Programm eine Abfrage zu machen und dann die Downloadmöglichkeit erst gar nicht anzubieten. Wenn jemand ein Codebeispiel für VBA dazu hätte, wäre ich sehr dankbar.

Freundliche Grüße aus Fürth
Peter Marchert
Infos, Workshops & Soft-
ware für Ihr Outook®
Marchert
Beiträge: 44
Registriert: 02.01.2006, 16:08
Wohnort: Fürth/Bayern
Kontaktdaten:

Beitrag von Marchert »

So, ich habe etwas passendes bei Microsoft gefunden. Für den Fall, dass die Seite nicht (mehr) erreichbar ist, hier der Code:

Code: Alles auswählen


Private Const NERR_Success            As Long = 0&
Private Const LevelUserInfo1          As Long = 1&
Private Const USER_PRIV_ADMIN         As Long = 2&
Private Const VER_PLATFORM_WIN32_NT   As Long = 2&

' Benutzer-Informationen:
Private Type USER_INFO_1
  usri1_name         As Long
  usri1_password     As Long
  usri1_password_age As Long
  usri1_priv         As Long
  usri1_home_dir     As Long
  usri1_comment      As Long
  usri1_flags        As Long
  usri1_script_path  As Long
End Type

' Informationen zum Betriebssystem:
Private Type OSVERSIONINFO
  dwOSVersionInfoSize As Long ' Größe der Struktur
  dwMajorVersion      As Long ' Major-Versionsnummer
  dwMinorVersion      As Long ' Minor-Versionsnummer
  dwBuildNumber       As Long ' Build-Versionsnummer
  dwPlatformId        As Long ' Plattform-Kennzeichner
  szCSDVersion        As String * 128 ' Service Pack (Klartext)
End Type

' Windows-Versionsinformationen abfragen:
Private Declare Function GetVersionEx _
  Lib "kernel32" Alias "GetVersionExA" ( _
  ByRef VersionInformation As OSVERSIONINFO _
  ) As Long
  
' Benutzerinformationen ermitteln:
Private Declare Function NetUserGetInfo _
  Lib "netapi32" ( _
  ByVal ServerName As Long, _
  ByVal UserName As Long, _
  ByVal Level As Long, _
  ByRef ptrBuffer As Long _
  ) As Long
  
' Freigabe des von NetUserGetInfo reservierten Speichers:
Private Declare Function NetApiBufferFree _
  Lib "NETAPI32.DLL" ( _
  ByVal ptrBuffer As Long _
  ) As Long
  
' Benutzernamen ermitteln:
Private Declare Function GetUserName _
  Lib "advapi32.dll" Alias "GetUserNameA" ( _
  ByVal lpBuffer As String, _
  ByRef Size As Long _
  ) As Long
  
' Speicherbereiche kopieren:
Private Declare Sub CopyMemory _
  Lib "kernel32" Alias "RtlMoveMemory" ( _
  ByRef Destination As Any, _
  ByRef Source As Any, _
  ByVal Size As Long)
  
Public Function IsAdmin(Optional ByVal UserName As String) As Boolean
' ---------------------------------------------------------------
' IsAdmin prüft, ob ein Anwender zur Gruppe der Administratoren
' gehört. Wird UserName nicht übergeben, wird die Prüfung für
' den aktuell angemeldeten Benutzer auf der lokalen Maschine
' durchgeführt. Unter Windows 95/98/Me wird mangels Rechtebe-
' schränkung grundsätzlich TRUE zurückgegeben.
' ---------------------------------------------------------------

    Dim OSV       As OSVERSIONINFO
    Dim UserInfo1 As USER_INFO_1
    Dim lSize     As Long
    Dim ptrBuffer As Long
    Dim RetVal    As Long

    ' Windows-Versionsinformationen abfragen
    OSV.dwOSVersionInfoSize = Len(OSV)
    GetVersionEx OSV
    
    ' Ist als OS Windows NT/2000/XP oder Nachfolger gegeben?
    If OSV.dwPlatformId <> VER_PLATFORM_WIN32_NT Then
        ' Es liegt keine NT-basierende Windows-Version vor.
        ' Die Funktion wird hier mit TRUE verlassen, da Windows
        ' 95/98/Me die Rechte des Anwenders nicht einschränken,
        ' einem Administrator vergleichbare Rechte also gegeben sind:
        IsAdmin = True
        Exit Function
    End If
    
    ' Falls kein Benutzername übergeben wurde, statt-
    ' dessen den aktuellen Benutzernamen ermitteln:
    If Len(UserName) = 0 Then
        GetUserName UserName, lSize ' nötige Buffergröße ermitteln
        UserName = Space$(lSize)    ' Buffer bereitstellen und...
        GetUserName UserName, lSize ' ...Information abholen
    End If
    
    ' USER_INFO_1-Benutzerinfos auslesen:
    RetVal = NetUserGetInfo(StrPtr(ComputerName), _
             StrPtr(UserName), _
             LevelUserInfo1, _
             ptrBuffer)
    
    ' War der Aufruf von NetUserGetInfo erfolgreich?
    If RetVal = NERR_Success Then ' Erfolgreicher Aufruf
        ' Ermittelte Daten in eine USER_INFO_1-Struktur kopieren:
        CopyMemory UserInfo1, ByVal ptrBuffer, Len(UserInfo1)
        ' Von NetUserGetInfo reservierten Speicherbereich freigeben
        NetApiBufferFree ptrBuffer
        ' Auswerten, ob der Benutzer Administrator-Rechte hat:
        IsAdmin = (UserInfo1.usri1_priv = USER_PRIV_ADMIN)
    End If
    
End Function
Gruß
Peter
Infos, Workshops & Soft-
ware für Ihr Outook®
Andreas Kapust
Administrator
Beiträge: 1083
Registriert: 29.02.2004, 15:51
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Andreas Kapust »

Guten Tag!

Das sieht in C++ irgendwie übersichtlicher aus ;-)

Ich setzte das mal auf die Todo-Liste.

Gruß
A.K.
Marchert
Beiträge: 44
Registriert: 02.01.2006, 16:08
Wohnort: Fürth/Bayern
Kontaktdaten:

Beitrag von Marchert »

Andreas Kapust hat geschrieben:Ich setzte das mal auf die Todo-Liste
Prima, denn man kann das Update-Tool ja auch vom Programmverzeichnis aus aufrufen und dann fehlt eine Abfrage zwecks Adminrechten.

Gruß
Peter
Infos, Workshops & Soft-
ware für Ihr Outook®
Marchert
Beiträge: 44
Registriert: 02.01.2006, 16:08
Wohnort: Fürth/Bayern
Kontaktdaten:

Beitrag von Marchert »

Andreas Kapust hat geschrieben:Ich setzte das mal auf die Todo-Liste
Prima, denn man kann das Update-Tool ja auch vom Programmverzeichnis aus aufrufen.

Gruß
Peter
Infos, Workshops & Soft-
ware für Ihr Outook®
Andreas Kapust
Administrator
Beiträge: 1083
Registriert: 29.02.2004, 15:51
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Andreas Kapust »

Guten Tag!

Ob es eine Form von LUA-Update noch unter Version 1.x geben wird ist fraglich, da es von einigen Kunden als direkte Updatemöglichlichkeit in das Programmverzeichnis genutzt wird. Dies ist selbst als Amin unter Vista mit eingehaltetem UAC nicht möglich, wenn dort nicht explizied Schreibrechte vergeben wurden. Was dem Sicherheitskonzept nicht gerade zuträglich ist. :wink:

Es wird also zwei Möglichkeiten geben A, wird gerüft ob ins Update-Verzeichnis Schreibrechte gibt, wenn nicht gibt es eine Meldung und B wird es eine Admin-Rechtefunktion geben.

Weiterhin werden alle Starts über ShellExecute ausgeführt, die bringt unter Vista die entsprechende Meldung hoch.
Zur Zeit ist UDT noch mit einem entsprechenden Manifest versehen, das dieses automatisch macht.
Es ist also noch kein LUA-Update unter Vista möglich.

Eine Frage der Zeit:
Das Doppelposting sollte mich wohl daran erinnern, dass dieser Punkt schon einige Zeit angekündigt ist. :?
Zur Zeit sind leider die Entwicklungen an AKInstellerMSI und der Version 3.5 (kostenpflichtig) des AKInstallers wichtiger, da die (so ist es leider) mehr Geld ins Haus bringen.
Ich werde aber mal versuchen, dass nach den Professional-Erweiterungen (AKI MSI) Gruppe/Benutzerrechte und Geplante Tasks einzuschieben.

Mit freundlichen Grüßen
A. Kapust
Marchert
Beiträge: 44
Registriert: 02.01.2006, 16:08
Wohnort: Fürth/Bayern
Kontaktdaten:

Beitrag von Marchert »

Andreas Kapust hat geschrieben:Das Doppelposting sollte mich wohl daran erinnern, dass dieser Punkt schon einige Zeit angekündigt ist.
Nein, das war ein Versehen. Ich habe wegen dem msi-Installer vorbeigeschaut und bei dieser Gelegenheit meine Signatur geändert und wollte auch den Beitrag nur ändern und nicht noch einmal posten.
Andreas Kapust hat geschrieben: Zur Zeit sind leider die Entwicklungen an AKInstellerMSI und der Version 3.5 (kostenpflichtig) des AKInstallers wichtiger, da die (so ist es leider) mehr Geld ins Haus bringen.
Danke für die ehrliche Antwort.

Freundliche Grüße
Peter Marchert
Infos, Workshops & Soft-
ware für Ihr Outook®
Antworten