Windows Version herauslesen und ggf. mit Fehlermeldung Form schliessen.

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von nikeee13.

    Windows Version herauslesen und ggf. mit Fehlermeldung Form schliessen.

    Hallo, liebe Community!

    Ich fange derzeit mit Aero forms an und da ich gewisse Forms (Aero) nicht auf XP laufen lassen kann (Glaube ich, zumindest), moechte ich jegliche Fehler bei XP und aelter vermeiden.

    Ich moechte, dass mein Programm die Windows Version ausliesst, und ggf. die Form sofort schliesst oder gar erst nicht oeffnet.

    Ich habe schon einiges an Code zusammen gesucht (Bei MSDN, VB-Helper) und moechte lieber nochmals nachfragen, bevor ich mir gleich den Kopf darueber zerreisse:

    VB.NET-Quellcode

    1. Public Sub CheckOSVer()
    2. Dim os_query As String = "SELECT * FROM " & _
    3. "Win32_OperatingSystem"
    4. Dim os_searcher As New _
    5. ManagementObjectSearcher(os_query)
    6. For Each info As ManagementObject In os_searcher.Get()
    7. lblCaption.Text = _
    8. info.Properties("Caption").Value.ToString().Trim()
    9. lblVersion.Text = "Version " & _
    10. info.Properties("Version").Value.ToString() & _
    11. " SP " & _
    12. info.Properties("ServicePackMajorVersion").Value.ToString() _
    13. & "." & _
    14. info.Properties("ServicePackMinorVersion").Value.ToString()
    15. End Sub


    Und nun hatte ich mir vorgestellt, dass ich evtl. eine If os_query = "xxyy" Then MsgBox("Ihre Verison von Windows ist leider zu alt, um diese Form zu nutzen. Bitte benutzen sie die Script Version")

    Doch ich weiss jetzt nicht alle Build Zahlen auswaendig und weiss nicht genau wonach ich in der IF-Frage fragen soll..

    Ich bin zwar schon am ausprobieren, soch ich moechte auch gerne zusaetzlichen Rat von den Profis hoeren :)

    Vielen dank im Voraus und frohe Festtage!

    LG
    Beatsleigher

    EDIT: Bei 'ManagementObjectSearcher' unterstreicht der Compiler rot. Ist das fehlerhafter Code, oder habe ich was (wieder) verbockt? Ich habe noch nie was mit WMI zu tun. Ich weiss nur, dass es aehnlich wie SQL arbeitet, um das System abzufragen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Beatsleigher“ () aus folgendem Grund: Etwas hinzugefuegt

    Nutze

    VB.NET-Quellcode

    1. Environment.OSVersion.Version
    .
    Ist ein Version-Objekt, welches du gleich abgleichen kannst.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Danke, ich habe es gerade so geschrieben und builde gerade :):

    VB.NET-Quellcode

    1. Dim OS As String = Environmen.OSVersion.Version.ToString
    2. TextBox1.Text = OS

    Anhand des Textes, werde ich sehen, was fuer INfo da raus gekrochen kommt und werde es auf einem XP Rechner laufen lassen :)

    Danke!

    VB.NET-Quellcode

    1. Public Shared Function IsXP() as Boolean
    2. return Environment.OSVersion.Version.Major = 5 AndAlso Environment.OSVersion.Version.Minor = 1
    3. End Function


    So prüfst du auf XP. Das würd ich aber vermeiden, da Windows 2000 auch kein Aero hat. (;))

    Von daher würde ich prüfen, ob es sich um Vista oder höher handelt.

    VB.NET-Quellcode

    1. Public Shared Function IsVistaOrHigher() As Boolean
    2. Return Environment.OSVersion.Version.Major >= 6
    3. End Function
    4. Public Shared Function IsSevenOrHigher() As Boolean
    5. Return Environment.OSVersion.Version.Major > 6 OrElse (Environment.OSVersion.Version.Major = 6 AndAlso Environment.OSVersion.Version.Minor >= 1)
    6. End Function
    7. <DllImport("dwmapi.dll")> _
    8. Private Shared Function DwmIsCompositionEnabled(ByRef enabled As Boolean) As Integer
    9. End Function
    10. Public Shared Function IsAeroEnabled() As Boolean
    11. If IsVistaOrHigher Then
    12. Dim result As Boolean
    13. NativeMethods.DwmIsCompositionEnabled(result)
    14. Return result
    15. End If
    16. Return False
    17. End Function


    pinvoke.net/default.aspx/dwmapi.dwmiscompositionenabled
    Von meinem iPhone gesendet

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „nikeee13“ ()

    n1nja schrieb:

    Warum nicht die Version mit My.Computer.Info.OsFullname auslesen?!

    Dann den String mit Contains auf XP prüfen???

    Dann weißte auch ob auf den System XP installiert ist oder nicht...

    Weil es mir jetzt auch gerade eingefallen ist, dass es viel einfacher geht X( :|

    Aber vielen Dank an alle!
    Frohes Fest :)
    @Beatsleigher: Wie soll diese 'einfachere' Weg aussehen?

    --

    Um herauszufinden, ob Aero eingeschaltet ist, verwende

    DwmIsCompositionEnabled()

    Auf der Seite ist übrigens ein voll funktionsfähiges Beispiel für eine entsprechende AeroEnabled-Abfrage.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

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

    Beatsleigher schrieb:

    Weil es mir jetzt auch gerade eingefallen ist, dass es viel einfacher geht
    Du meinst das mit dem String.Contains()? Das ist vielleicht einfacher, mehr aber auch nicht. Im Gegensatz zu einem Vergleich mit den Versionsnummern ist diese Methode unzuverlässig und langsam.
    Laut MSDN soll man es so machen, wie ich gepostet habe.
    Von meinem iPhone gesendet