Centrum Skrypciarzy - Systemy Operacyjne

Jak sprawdzić, która wersja oprogramowania QuickTime jest zainstalowana na komputerze?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

Jak sprawdzić, która wersja oprogramowania QuickTime jest zainstalowana na komputerze?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak sprawdzić, czy oprogramowanie QuickTime jest zainstalowane na danym komputerze, a jeśli tak, to którą wersję zainstalowano?

-- IU

Cześć Skrypciarze! Odpowiedź

Cześć, IU. Przyznamy Ci się, że wolelibyśmy pisać artykuły np. o tańcu, a nie o skryptach. Powód jest prosty – otóż żeby pisać o tańcu, nie trzeba wcale tańczyć, mielibyśmy więc mniej pracy. Ze skryptami jest inaczej – opisanie skryptu wymaga, żeby go wcześniej napisać. Nie mając więc wyjścia, napisaliśmy co następuje:

strComputer = "."



Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")



Set colItems = objWMIService.ExecQuery _

    ("Select * From Win32_Product Where Name = 'QuickTime'")



If colItems.Count = 0 Then

    Wscript.Echo "QuickTime is not installed on this computer."

Else

    For Each objItem in colItems

        Wscript.Echo "QuickTime version: " & objItem.Version

    Next

End If

Jak widać, określenie, czy na komputerze zainstalowano oprogramowanie QuickTime nie jest wcale trudne. Najpierw łączymy się z usługą WMI komputera lokalnego. Podobnie jak w większości skryptów WMI, możemy równie dobrze połączyć się z komputerem zdalnym – wystarczy, że przypiszemy nazwę komputera zdalnego (np. atl-ws-01) zmiennej strComputer:

strComputer = "atl-ws-01"

Po wykonaniu połączenia możemy użyć poniższego wiersza kodu, by pobrać listę zainstalowanego oprogramowania o wartości Name równej QuickTime:

Set colItems = objWMIService.ExecQuery _

    ("Select * From Win32_Product Where Name = 'QuickTime'")

Tak jak mówiliśmy, powoduje to zwrócenie kolekcji zawierającej wszystkie zainstalowane na komputerze aplikacje o nazwie QuickTime. Jeśli na komputerze nie mamy takich programów, otrzymamy kolekcję zawierającą zero elementów. Widać więc, że wystarczy sprawdzić liczbę elementów w kolekcji, aby się dowiedzieć, czy mamy zainstalowane oprogramowanie QuickTime. Zrobimy to, sprawdzając właściwość Count naszej kolekcji:

If colItems.Count = 0 Then

Jeśli właściwość Count będzie równa 0, będziemy wiedzieć, że nie zainstalowano QuickTime. Wyświetlimy więc odpowiedni komunikat:

Wscript.Echo "QuickTime is not installed on this computer."

Rzecz jasna, jeśli właściwość Count jest wyższa niz 0, na komputerze mamy zainstalowane oprogramowanie QuickTime. W takim wypadku uruchomimy pętlę For Each, która przejdzie przez wszystkie elementy kolekcji i wyświetli właściwość Version każdego z nich:

For Each objItem in colItems

    Wscript.Echo "QuickTime version: " & objItem.Version

Next

Będzie to wartość w postaci takiej jak poniżej:

7.1.5.120

No i właśnie – mamy już numer wersji QuickTime i wszyscy powinni być zadowoleni.

Wszyscy oprócz użytkowników Windows Server 2003. Klasa Win32_Product nie jest domyślnie instalowana w Windows 2003; jeśli nie dodaliśmy jej do systemu (można to zrobić przy pomocy okna Dodaj lub usuń programy), skrypt nie zadziała. No ale i tak większość będzie zadowolona.

Nie licząc użytkowników systemu Vista. Jak się okazuje, klasa Win32_Product jest domyślnie instalowana w Windows Vista i nawet ma kilka dodatkowych właściwości. Jednak pojawiają się i problemy: czasami w ogóle nie działa (zwracając komunikat błedu), a czasami działa wolniej niż byśmy chcieli. I tak, wykonanie naszego skryptu sprawdzającego, czy zainstalowano oprogramowanie QuickTime może zająć minutę albo i więcej.

Czy istnieje więc inny sposób sprawdzenia, czy zainstalowano oprogramowanie QuickTime i jaki jest jego numer wersji? Owszem, nawet kilka. Jeśli na przykład chcemy sprawdzić to w ramach skryptu logowania, możemy użyć poniższego programiku:

On Error Resume Next



Set objQuickTime = CreateObject("QuickTimeCheckObject.QuickTimeCheck.1")



If Err <> 0 Then

    Wscript.Echo "QuickTime is not installed on this computer."

Else

    Wscript.Echo "QuickTime version: " & Hex(objQuickTime.QuickTimeVersion)

End If

Próbujemy tu utworzyć wystąpienie obiektu QuickTime.QuickTimeCheck.1. Jeśli obiektu nie da się utworzyć, znaczy to, że oprogramowania QuickTime nie ma na komputerze, więc wyświetlamy odpowiedni komunikat. Jeśli uda się utworzyć obiekt, pobieramy wartość właściwości Version, przekształcamy ją na system szesnastkowy i wywołujemy echo wyniku:

Wscript.Echo "QuickTime version: " & Hex(objQuickTime.QuickTimeVersion)

Po co przekształcamy wartość na układ szesnastkowy? Nie wiemy; po prostu tak jest i już. Numer wersji otrzymujemy w postaci podobnej do: 118849536; przekształcenie na system szesnastkowy da nam 7158000. Czy to nam pomoże? Owszem. Na maszynie testowej mamy akurat QuickTime 7.1.5.

Uwaga. Dlaczego w ten sposób otrzymujemy wartość 7.1.5.8000, podczas gdy Win32_Product zgłasza nam 7.1.5.120? Nie wiemy. Ale oficjalnym numerem widocznym w interfejsie QuickTime jest 7.1.5, więc drobniejsze różnice już nas nie interesują.

Niestety jednak z tym skryptem także jest pewien problem: obiektu QuickTime.QuickTimeCheck.1 nie da się utworzyć zdalnie. (Stąd nasza sugestia, by uruchamiać skrypt jako skrypt logowania.) Chcąc sprawdzić numer zdalnie, możemy więc zajrzeć do rejestru:

HKEY_LOCAL_MACHINE = &H80000002



strComputer = "."



Set objReg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")



strKeyPath = "Software\Apple Computer, Inc.\QuickTime"

ValueName = "Version"



objReg.GetDWORDValue HKEY_LOCAL_MACHINE, strKeyPath, ValueName, dwValue



If IsNull(dwValue) Then

    Wscript.Echo "QuickTime is not installed."

Else

    Wscript.Echo "QuickTime version: " & Hex(dwValue)

End If

Ten skrypt zadziała w każdej wersji Windows. Dlaczego więc nie zamieszczamy go dopiero teraz? No cóż, nie jesteśmy zwolennikami używania skryptów odczytujących dane bezpośrednio z rejestru. Nie ma gwarancji, że ścieżka rejestru się nie zmieni po ukazaniu się kolejnej wersji QuickTime. Nie możemy nawet zagwarantować, że skrypt zadziała ze starszymi wersjami QuickTime. Dlatego też, o ile to możliwe, lepiej używać klasy WMI, np. Win32_Product, zamiast sprawdzać dane w rejestrze. (Od redaktorki: Na moim komputerze interfejs i Win32_Product informują o wersji 7.0.3; obiekt QuickTime.QuickTimeCheck.1 podaje 7038000; wartość rejestru wynosi 7028000.). Ale, jak to mówią, jak się nie ma co się lubi, to się lubi co się nie lubi.

 Do początku strony Do początku strony

Centrum Skrypciarzy - Systemy Operacyjne