Blog (22)
Komentarze (619)
Recenzje (0)

Vista to nie Vista, 7-ka to nie 7-ka

@alucosoftwareVista to nie Vista, 7-ka to nie 7-ka06.03.2012 13:58

I stało się... Dziś, po raz pierwszy od dłuższego czasu straciłem "programistyczną cierpliwość". Nie będę jednak wylewał tu swoich żalów - nie. Przecież nikomu nie jest to do szczęścia potrzebne. Ale każdą ludzką złość i frustrację można, przy odrobinie kombinatoryki, przedstawić w sposób nieco przyjemniejszy, z pożytkiem dla świata zawsze-młodych-duchem programistów.

Rzecz dotyczy wersji systemu Windows, jego komponentów, i takich tam...

Na potrzeby wykonywanego zawodu wybrałem system operacyjny Windows 7 Enterprise. Swego czasu z wielkim trudem przyszło mi powiedzieć "nie" tej części społeczności, która do dnia dzisiejszego wykorzystuje zasłużonego XP. Bynajmniej nie powiedziałem tego dosłownie. Po prostu projekty, nad którymi pracuję (ich przeważająca większość) z góry nie przewidują współpracy ze starszymi wersjami Windowsa. Z różnych względów... Przed 7-ką pojawiła się jednak Vista, znienawidzona przez niektórych, uwielbiana przez pozostałych. Przygotowywując oprogramowanie desktopowe programista nie może od tak sobie pominąć użytkowników tego systemu bez naprawdę dobrego powodu. Problemy pojawiają się z chwilą, w której programista wyraża chęć integracji programu z wybranym, wbudowanym komponentem systemu.

Mały przykład

Komponent ABC znajduje się w wersji systemu 7. Komponent ABC znajduje się także w wersji systemu Vista. Jednakże funkcjonalność Komponentu ABC różni się pomiędzy systemami, oferując tylko i wyłącznie pewną wspólną bazę. Jeżeli takich komponentów mamy wiele - mamy problem. Niektóre, naprawdę dobre pomysły kończą swój żywot. Oprogramowanie musi przecież być spójne w ramach danej rodziny systemów spod znaku Microsoftu. Ale co w przypadku znacznie mniejszych różnic, pojedynczych funkcji? Można przecież napisać dwie (niedługo także i trzy: Windows 8) wersje kodu, jedną dla Visty, drugą dla 7-ki. Z tym, że wersji systemu mamy więcej, znacznie więcej. Bowiem Komponentu ABC nie ma w wersjach Vista/7 Starter, a wersje Vista/7 Home Basic mają jeszcze bardziej ograniczoną funkcjonalność. O ServicePack'ach nie wspomnę.

Patrząc na problem ze szczytu tej programistycznej piramidy (tj. oczami użytkownika edycji Enterprise) łatwo stracić cierpliwość. Tym bardziej kiedy autorzy dostępnych w sieci rozmaitych kodów źródłowych błędnie przyjmują, że Windows Vista to Windows Vista, a Windows 7 to Windows 7 i nie kwapią się sprawdzić "ile rzeczywiście jest cukru w cukrze".

Widziałem już wiele "sposobów" sprawdzania wersji systemu pod kątem współpracy z wybranymi komponentami Windowsa, ale każdy miał swoje wady, większość działała połowicznie. Droga koleżanko i drogi kolego, jeżeli Twoje oprogramowanie wykorzystuje specyficzne dla danej edycji funkcje systemowe to Twoim obowiązkiem jest wiedzieć z jakim konkretnie systemem masz do czynienia - co do najmniejszych różnic!

Jeśli jesteś entuzjastą technologii .NET, możesz poddać poniższy kod drobnej modyfikacji i pozbędziesz się problemu... ekhm... "raz na zawsze" :) Użytkownicy Javy oraz innych języków będą musieli poszukać odpowiedniej implementacji WMI (Windows Management Instrumentation) dla swojej platformy programistycznej. A takie z całą pewnością są dostępne, więc głowa do góry.


private void OperatingSystemInfo()
{
	// Vista i wyżej - OSVersion nie określa zawartości cukru w cukrze
	if (System.Environment.OSVersion.Version.Major >= 6)
    {
		System.Management.ManagementObjectSearcher mos = new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem");
        System.Management.ManagementObjectCollection moc = mos.Get();

		foreach (System.Management.ManagementObject mo in moc)
		{
			foreach (System.Management.PropertyData property in mo.Properties)
            {
				Console.WriteLine("{0} {1}", property.Name, property.Value);
            }
		}
	}
}

Zwróć uwagę na pole OperatingSystemSKU, które definiuje aktualnie zainstalowaną odmianę systemu operacyjnego. Wszystkie właściwości oraz ich dokładny opis przedstawia MSDN: msdn.microsoft.com/en-us/library/windows/desktop/aa394239(v=vs.85).asp...

Jeżeli interesuje nas wyłącznie edycja Starter prościej jest wywołać funkcję systemową GetSystemMetrics, której zastosowanie nie ogranicza się wyłącznie do poniższej czynności. Więcej na MSDN: msdn.microsoft.com/en-us/library/windows/desktop/ms724385(v=vs.85).asp...


using System.Runtime.InteropServices;

[DllImport("user32.dll")]
private static extern int GetSystemMetrics(int smIndex);
private static int SM_STARTER = 88;

private bool IsStarter()
{
	return GetSystemMetrics(SM_STARTER) != 0;
}

Powodzenia!

Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.