Office Lizenzstatus auslesen

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von debus.

    Ich habe hier einen Ansatz, wie du mit Managementscope an die Daten gelangst.
    Ist C#, musst du halt übersetzen.
    Relevant ist die SelectQuery.

    C#-Quellcode

    1. public static bool IsOfficeActivated()
    2. {
    3. System.Management.ManagementScope scope = new ManagementScope(@"\\" + System.Environment.MachineName + @"\root\cimv2");
    4. scope.Connect();
    5. SelectQuery searchQuery = new SelectQuery("SELECT LicenseStatus FROM SoftwareLicensingProduct WHERE ApplicationID = '0ff1ce15-a989-479d-af46-f275c6370663' and LicenseStatus = 1");
    6. ManagementObjectSearcher searcherObj = new ManagementObjectSearcher(scope, searchQuery);
    7. using (ManagementObjectCollection obj = searcherObj.Get())
    8. {
    9. return (obj.Count > 0);
    10. }
    11. }
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Neu

    Hey,

    habe das mal versucht zu übersetzen, komme da aber an meine Grenzen

    VB.NET-Quellcode

    1. Public Shared Function IsOfficeActivated() As Boolean
    2. Dim scope As System.Management.ManagementScope = New ManagementScope(("\\" _
    3. + (System.Environment.MachineName + "\root\cimv2")))
    4. scope.Connect
    5. Dim searchQuery As SelectQuery = New SelectQuery("SELECT LicenseStatus FROM SoftwareLicensingProduct WHERE ApplicationID = '0ff1ce15-a989-479d-af46-f27"& _
    6. "5c6370663' and LicenseStatus = 1")
    7. Dim searcherObj As ManagementObjectSearcher = New ManagementObjectSearcher(scope, searchQuery)
    8. Dim obj As ManagementObjectCollection = searcherObj.Get
    9. Return (obj.Count > 0)
    10. End Function


    Was müsste ich hier noch ändern?

    Danke
    Holger
    Bilder
    • Screenshot 2022-11-22 083811.png

      45,55 kB, 1.261×507, 21 mal angesehen

    Neu

    Hallo und Danke an Euch beide.

    Das mit dem Imports hatte ich schon, aber - sorry - vergessen im Code mit zu zeigen. Aber der Verweis hat noch gefehlt.

    Also den Status bekomme ich nun angezeigt, aber kann man auch noch die Tage auslesen, wie lange die Lizenz noch läuft?
    Ich meine den Eintrag Remaining Grace (siehe HC).

    Danke
    Holger
    Bilder
    • Screenshot 2022-11-23 192139.png

      5,41 kB, 562×46, 12 mal angesehen

    Neu

    Hey, Sorry wenn ich nochmal nachfrage aber ich krieg es nicht hin

    Mein Versuch sieht so aus, aber es kommt nix zurück bzw es kommt zu einem Fehler beim Return (siehe HC)

    VB.NET-Quellcode

    1. Public Shared Function OfficePeriod() As Boolean
    2. Dim scope As System.Management.ManagementScope = New ManagementScope(("\\" _
    3. + (System.Environment.MachineName + "\root\cimv2")))
    4. scope.Connect()
    5. Dim searchQuery As SelectQuery = New SelectQuery("SELECT GracePeriodRemaining FROM SoftwareLicensingProduct WHERE ApplicationID = '0ff1ce15-a989-479d-af46-f27" & _
    6. "5c6370663'")
    7. Dim searcherObj As ManagementObjectSearcher = New ManagementObjectSearcher(scope, searchQuery)
    8. Dim obj As ManagementObjectCollection = searcherObj.Get
    9. Return (obj.Count)
    10. End Function


    Danke
    Holger
    Bilder
    • Screenshot 2022-11-23 201059.png

      12,71 kB, 599×147, 13 mal angesehen

    Neu

    Deine Anfrage in Poat #3 mit SELECT LicenseStatus war schon richtig.
    Da bekommst du das obj zurück mit all seinen Attributen.
    Eines dieser Attribute ist GracePeriodRemaining.
    Loop mal durch

    VB.NET-Quellcode

    1. For Each mo as ManagementObject in obj
    2. 'schau dir hier mo an
    3. Next
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Neu

    Hey, wenn ich das so mache, wird mir alles immer leer angezeigt

    VB.NET-Quellcode

    1. Public Shared Function IsOfficeActivated() As Boolean
    2. Dim scope As System.Management.ManagementScope = New ManagementScope(("\\" _
    3. + (System.Environment.MachineName + "\root\cimv2")))
    4. scope.Connect()
    5. Dim searchQuery As SelectQuery = New SelectQuery("SELECT LicenseStatus FROM SoftwareLicensingProduct WHERE ApplicationID = '0ff1ce15-a989-479d-af46-f27" & _
    6. "5c6370663' and LicenseStatus = 1")
    7. Dim searcherObj As ManagementObjectSearcher = New ManagementObjectSearcher(scope, searchQuery)
    8. Dim obj As ManagementObjectCollection = searcherObj.Get
    9. For Each mo As ManagementObject In obj
    10. MsgBox(mo.ToString)
    11. Next
    12. Return (obj.Count > 0)
    13. End Function


    Was mache ich hier falsch?

    Holger

    Neu

    Mit viel Glück finde ich am Wochenende vielleicht Zeit, das alte Projekt rauszukramen.

    Ansonsten musst du einfach mal googeln.
    Den technischen Ansatz hast du ja.
    Hier hatte einer dasselbe Problem, in dem Fall mit Vista, aber das macht programmtechnisch keinen Unterschied.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Neu

    Hey, ich habe es wie folgt gelöst. Danke Euch allen

    Es ist bestimmt nicht ganz sauber und vielleicht kann man das Obj ja auch direkt ansprechen? Aber so geht es halbwegs.

    Hier der Code

    VB.NET-Quellcode

    1. Dim scope As System.Management.ManagementScope = New ManagementScope(("\\" _
    2. + (System.Environment.MachineName + "\root\cimv2")))
    3. scope.Connect()
    4. Dim searchQuery As SelectQuery = New SelectQuery("SELECT GracePeriodRemaining FROM SoftwareLicensingProduct WHERE ApplicationID = '0ff1ce15-a989-479d-af46-f27" & _
    5. "5c6370663'")
    6. Dim searcherObj As ManagementObjectSearcher = New ManagementObjectSearcher(scope, searchQuery)
    7. Dim obj As ManagementObjectCollection = searcherObj.Get
    8. For Each mo As ManagementObject In obj
    9. Dim days = mo.GetPropertyValue("GracePeriodRemaining")
    10. If days > 0 Then
    11. tage = (days / 60) / 24
    12. End If
    13. Next


    Vielleicht kann man das noch eleganter machen :))

    Danke
    Holger

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „debus“ ()

    Neu

    Also da gibt es die SoftwareLicensingProduct class
    Da werden die Properties aufgelistet.

    Oder du machst eine SELECT *-Abfrage und listest die gefunden Properties auf.

    VB.NET-Quellcode

    1. For Each prop As PropertyData In mo.Properties
    2. Debug.Print($"Name: {prop.Name}")
    3. Debug.Print($"Value: {prop.Value}")
    4. Debug.Print($"Type: {prop.Type}")
    5. Debug.Print("------------")
    6. Next