Χρησιμοποιήστε το WMI για να προσδιορίσετε την κατάσταση εγκατάστασης των ενημερωμένων εκδόσεων των Windows
περίληψη
Χρησιμοποιήστε το WMI για να ελέγξετε για ενημερώσεις (σε KB) που είναι εγκατεστημένες στα Windows που χρησιμοποιείτε αυτήν τη στιγμή.
Περιβάλλον λειτουργίας
Περιβάλλον ελέγχου λειτουργίας
Έκδοση των Windows |
|
Έκδοση του .NET Πλαίσιο |
|
Απαιτούμενες απαιτήσεις συστήματος
Έκδοση των Windows |
|
Έκδοση του .NET Πλαίσιο |
|
ουσία
Τι είναι το KB;
Το KB χρησιμοποιείται επίσης ως συντομογραφία για την έκφραση "kilobyte" ή "keyboard", οπότε δεν νομίζω ότι είναι μια λέξη που χρησιμοποιείται για το ευρύ κοινό, αλλά ενημερώσεις όπως η υποστήριξη ασφαλείας των Windows και οι διορθώσεις σφαλμάτων αναφέρονται μερικές φορές ως "KB" μετά τα δύο πρώτα γράμματα του αναγνωριστικού.
Σε κάθε μία από αυτές τις ενημερώσεις εκχωρείται ένα αναγνωριστικό και καθορίζεται με τη μορφή "KBXXXXXXX" όπου XXXXXX είναι οποιοσδήποτε αριθμός. Ο αριθμός των ψηφίων δεν είναι σταθερός). Σημειώστε, ωστόσο, ότι δεν ακολουθούν όλες οι ενημερωμένες εκδόσεις αυτήν τη μορφή.
Παρεμπιπτόντως, το αρχικό όνομα αυτού του "KB" είναι "Γνωσιακή Βάση της Microsoft" και ταιριάζει με το αναγνωριστικό του τεχνικού άρθρου που δημοσιεύεται από τη Microsoft στο Web. Για παράδειγμα, εάν πρόκειται για ενημερωμένη έκδοση του KB980218, το αντίστοιχο τεχνικό άρθρο είναι http://support.microsoft.com/?kbid=980218".
Προγράμματα που αναζητούν την κατάσταση εγκατάστασης KB
Παρόλο που τα δείγματα περιγράφονται στο Visual Studio 2010 και στο WPF, τα προγράμματα ελέγχου KB μπορούν επίσης να χρησιμοποιηθούν σε παλαιότερες εφαρμογές Visual Studio, Φόρμα των Windows και κονσόλες. Σε αυτό το άρθρο, θα χρησιμοποιήσουμε τα όργανα διαχείρισης των Windows (WMI) για να ελέγξουμε την εγκατάσταση της Γνωσιακής βάσης.
- Όργανα διαχείρισης των Windows (από τη Βικιπαίδεια)
Προσθήκη αναφορών
Για να χρησιμοποιήσετε το WMI, μπορείτε να χρησιμοποιήσετε τις ManagementObjectSearcher και ManagementObject, αλλά πρέπει να ανατρέξετε στο System.Management .dll για να χρησιμοποιήσετε αυτές τις.
Για έργα C#, κάντε δεξί κλικ στην επιλογή Αναφορές από το Solution Explorer και επιλέξτε Προσθήκη αναφορών.
Όταν εμφανιστεί ο διάλογος Προσθήκη αναφοράς, κάντε κλικ στο ". Από την καρτέλα NET, επιλέξτε System.Management και κάντε κλικ στο Εντάξει κουμπί.
Εντάξει, εάν προστεθεί η επιλογή "Διαχείριση συστήματος" στην αναφορά εξερεύνησης λύσεων.
Εάν VB.NET ανοίξετε τις ιδιότητες του έργου, κάντε κλικ στην επιλογή "Αναζήτηση" από την καρτέλα στα αριστερά, κάντε κλικ στο κουμπί Προσθήκη στα δεξιά. Όπως παραπάνω, εμφανίζεται το παράθυρο διαλόγου Προσθήκη αναφοράς, οπότε επιλέξτε "System.Management" και κάντε κλικ στο OK κουμπί.
Εάν επιστρέψετε στην προηγούμενη οθόνη και προσθέσετε το "System.Management" στη μεσαία λίστα, είναι εντάξει.
Επίσης, επιλέξτε "System.Management" από την παρακάτω λίστα για να παραλείψετε περιγραφές χώρου ονομάτων στο πρόγραμμά σας.
Επίσης, αν και δεν σχετίζεται με τις αρχικές συμβουλές, αυτό το δείγμα χρησιμοποιεί την κλάση StringBuilder, οπότε έλεγξα επίσης τον χώρο ονομάτων "System.Text". (μόνο VB.NET)
σκηνή
Η οθόνη που χρησιμοποιείται σε αυτό το δείγμα είναι μια απλή οθόνη με ένα κουμπί εκτέλεσης για να ελέγξετε την κατάσταση εγκατάστασης του KB και ένα πλαίσιο κειμένου που εμφανίζει τα αποτελέσματα.
Το κάνω στο WPF, αλλά η ίδια οθόνη είναι διαμορφώσιμη στη φόρμα των Windows.
πρόγραμμα
Το C ManagementObjectSearcher
# προσθέτει ""using System.Management;
στην αρχή του κώδικα για να μειώσει την περιγραφή των κλάσεων και άλλων χώρων ονομάτων. Σε VB.NET, καθορίσατε ότι ο χώρος ονομάτων θα πρέπει να εισαχθεί στις ιδιότητες του έργου, οπότε δεν χρειάζεται να γράψετε κάτι ιδιαίτερο, αλλά αν δεν το έχετε κάνει, πρέπει να προσθέσετε ".Imports System.Management
* Τόσο στη C# όσο και στην VB.NET, εάν όλα τα ονόματα κλάσεων είναι γραμμένα από ένα χώρο ονομάτων όπως "System.Management.ManagementObjectSearcher
", η παραπάνω προδιαγραφή δεν είναι απαραίτητη.
C #
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Management; // 追加 (参照から「.NET」より「System.Management」追加)
Ακολουθεί ο κώδικας που αναζητά και παραθέτει την εγκατεστημένη Γνωσιακή Βάση.
C #
this.ResultTextBox.Text = "";
// WMI クエリをセットして管理オブジェクト検索クラスを作成
ManagementObjectSearcher query =
new ManagementObjectSearcher("Select * From Win32_QuickFixEngineering");
// WMI クエリを使用して管理オブジェクトコレクションを取得
ManagementObjectCollection queryCollection = query.Get();
StringBuilder builder = new StringBuilder();
// コレクションから管理オブジェクトを列挙する
// ここでは HotFixID を取得
foreach (ManagementObject mo in queryCollection)
{
builder.AppendLine(mo["HotFixID"].ToString());
}
// 取得した KB 一覧をセット
this.ResultTextBox.Text = builder.ToString();
VB.NET
Me.ResultTextBox.Text = ""
' WMI クエリをセットして管理オブジェクト検索クラスを作成
Dim query As ManagementObjectSearcher = _
New ManagementObjectSearcher("Select * From Win32_QuickFixEngineering")
' WMI クエリを使用して管理オブジェクトコレクションを取得
Dim queryCollection As ManagementObjectCollection = query.Get()
Dim builder As System.Text.StringBuilder = New System.Text.StringBuilder()
' コレクションから管理オブジェクトを列挙する
' ここでは HotFixID を取得
For Each mo As ManagementObject In queryCollection
builder.AppendLine(mo("HotFixID").ToString())
Next
' 取得した KB 一覧をセット
Me.ResultTextBox.Text = builder.ToString()
Το ""ResultTextBox
στην πρώτη γραμμή είναι ένα πλαίσιο κειμένου για την εμφάνιση των ληφθέντων αποτελεσμάτων.
Το δημιουργείnew ManagementObjectSearcher
μια παρουσία της κλάσης αναζήτησης του διαχειριζόμενου αντικειμένου και ορίζει το ερώτημα WMI ως όρισμα. Η σύνταξη ενός ερωτήματος είναι σχεδόν ίση με μια πρόταση SQL, οπότε κοιτάξτε το σε σχέση με το SQL για λεπτομέρειες. Το "Win32_QuickFixEngineering" αντιπροσωπεύει μια ενημερωμένη έκδοση που ισχύει για το τρέχον λειτουργικό σύστημα.
Εκτελεί αναζήτηση στο ερώτημα WMI που καθορίστηκε προηγουμένως στο "query.Get()
και επιστρέφει τα αποτελέσματα ως ".ManagementObjectCollection
Δεδομένου ότι το "" παραθέτει τις πληροφορίες ενημέρωσης, λαμβάνουμε το "" στο προσκήνιο και γράφουμε ένα μοναδικό αναγνωριστικό από την παράμετρο "HotFixID"ManagementObjectCollection
ManagementObject
ως αποτέλεσμα.
Όταν το κάνετε αυτό, τα αναγνωριστικά ενημέρωσης παρατίθενται όπως φαίνεται στην εικόνα.
Όπως μπορείτε να δείτε όταν το εκτελείτε, είναι αργό μόνο κατά την πρώτη εκτέλεση. Μετά τη δεύτερη φορά, είναι αρκετά νωρίς.
Δεν είναι σαφές εάν το System.Management.dll είναι αργή στη φόρτωση και επεξεργασία ή η εκτέλεση ερωτημάτων WMI είναι αργή, αλλά το γεγονός ότι είναι αργή δεν αλλάζει, οπότε αν ανησυχείτε για λανθάνοντα χρόνο κατά τη χρήση του, νομίζω ότι είναι απαραίτητο να λάβετε μέτρα όπως η ασύγχρονη εκτέλεση.