Cleaner .NET – 64-bitowy Windows i jego rejestr | DSP 2017 #3

Czas… Chyba dzięki konkursowi Daj Się Poznać zacznę go bardziej doceniać. Kiedy się do niego zgłaszałem, byłem pewny, że dam radę wygospodarować wystarczającą jego ilość na rozbudowywanie mojego projektu, jak i pisanie postów na blogu. Jednak jak to często w życiu bywa, nie przewidziałem wszystkiego… W mojej szkole ruszył projekt, mający na celu (w dużym uogólnieniu) naukę programowania. W jego ramach będę miał za zadanie stworzenie aplikacji mobilnej. Technologia, w jakiej to zrobię, jest dowolna – więc oczywiście postawię na Xamarin’a, głównie ze względu na to, że w pisaniu w C# mam już jakieś tam doświadczenie – z kolei javy, nigdy nie dotykałem. Nie zmienia to jednak faktu, że czeka mnie masa nauki. Znajomość języka, znajomością języka. Jednak pozostaje jeszcze kwestia znajomości API np. takiego Androida, sposobu działania aplikacji na platformach mobilnych, projektowanie ich designu itd… Samo się nie nauczy, a na naukę potrzeba też sporej ilości czasu. Co innego pisać w czymś, co się już w jakimś stopniu poznało, a co innego poznawać coś niemal od zera.

Pisanie Cleaner’a, prowadzenie bloga, nauka Xamarina, do tego wszystkiego jeszcze szkoła. Trochę się obładowałem… ale nikt nie mówił, że będzie łatwo. Na pewno odbije się to jakoś na szybkości rozbudowywania mojego konkursowego projektu. Zmiany, jakie będą wprowadzane z tygodnia na tydzień, nie będą tak znaczące, jak na początku zakładałem. Jednak nie będę się poddawać, konkurs trwa i nie zamierzam odpaść. Rozwój projektu będzie co prawda nieco wolniejszy niż pierwotnie zakładałem, jednak nie będę go zatrzymywać! Uff… Żeby już nie przynudzać, przejdźmy do rzeczy.

Zmiany wprowadzone od ostatniego tygodnia

Od czasu, kiedy napisałem poprzedni post udało mi się dodać obsługę czyszczenia kolejnego klucza rejestru:

  • HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache

Póki co tylko jednego… Głównie dlatego, że jego przeszukiwanie jest bardzo proste. Jakimi kluczami zajmę się jako następnymi(czy też zajmę się innymi komponentami programu) to się jeszcze okaże.

Oprócz tego wprowadziłem również pełną obsługę przeszukiwania kluczy rejestru w 64-bitowym Windowsie. O co właściwie chodzi? Już tłumaczę. Uruchamiając aplikację 32-bitową na 64-bitowym systemie, ta nie ma dostępu do całego rejestru. Przykładowo, 32-bitowa aplikacja w 64-bit systemie odwołując się do klucza:

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft

lub

  • HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft

w obydwóch przypadkach otrzyma dostęp do:

  • HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft

Czyli do jego 32-bitowego odpowiednika. Niby nie ma w tym nic złego… Jednak program czyszczący rejestr powinien czyścić wszystkie klucze, a nie tylko te przeznaczone dla aplikacji 32 lub 64-bitowych. W teorii aplikacja 32-bitowa może uzyskać dostęp do „kluczy 64-bitowych” (wiadomo o co chodzi :)). Jednak po co kombinować, skoro w .NET’cie aplikacja podczas pierwszego uruchomienia może kompilować się na natywną architekturę danego systemu. Wystarczy zaznaczyć taką opcję w Visual Studio (Platfrom target: Any CPU i odznaczyć „Prefer 32-bit). Dzięki takiemu zabiegowi, aplikacja uruchamiana na 64-bitowym systemie, zawsze będzie 64-bitowa. W rezultacie będzie miała dostęp zarówno do kluczy 64-bitowych, jak i ich 32-bit odpowiedników. Rozwiązanie w kodzie wygląda dokładnie tak(analogicznie dla innych kluczy):

Cóż… tyle udało mi się zrobić w tym tygodniu. Trochę niewiele, ale cieszę się, że przynajmniej nie stoję w miejscu. Do końca tygodnia czeka mnie jeszcze masa zajęć, a muszę napisać na blogu jeszcze jeden wpis. Nie przedłużając, więc… Do zobaczenia! 😉

126 total views, 1 views today