Development z Zapomnianej Strony

..:: Paweł Hofman .NET Portal ::..

Dzisiaj wystartował mój najnowszy projekt open-source, oparty o licencję Apache 2.0. Jest nim oczywiście .NET-owa biblioteka do zapisywania/odczytywania wiadomości w formacie JSON. Kod źródłowy oraz binaria znaleźć można na codeplex.com.

Zachęcam do zerknięcia na nią okiem z powodów takich jak:

  • pełne wsparcie standardu JSON
  • mały rozmiar plików wykonywalnych (~30kb)
  • wsparcie dla .NET 2.0+, Compact Framework 2.0 oraz Mono.NET 2.6
  • prostotę i wygodę użycia API
  • wysokiej jakości kod, oparty o testy automatyczne!


Kiedy budzisz się pewnego dnia i od początku coś ci się nie układa. Nie wiesz do końca, o co chodzi, ale niektóre rzeczy dwoją i troją ci się w oczach. To jeszcze nie dowód na to, żeby odstawić mocniejsze trunki! To po prostu Visual Studio 2010 ześwirowało!

U mnie wyglądało to tak, że nie działał Backspace, Control i inne specjalne klawisze, zaś sam interfejs prezentował się tak, że każdy element menu i paska narzędziowego był zduplikowany kilka razy w pozornie losowych miejscach:

VisualStudio 2010 - podwójne menu 

VisualStudio2010 - podwójne paski narzędziowe

 

Wyglądało to na swój sposób tragicznie. Istnieje niestety tylko jedna opcja, która pozwala przywrócić IDE to stanu poprzedniego. Wszystkie innej (tj. próba zresetowania ustawień w Tools->Import/Export Settings…, czy usunięcie katalogu VisualStudio z Moich Dokumentów) spełzły na niczym.

A oto przepis, który wszystko przywraca do normalności:

devenv.exe /ResetUserData



Z radością donoszę, że konkurs organizowany razem z Wrocławską Grupą .NET doszedł do skutku. Rozpoczyna się on już dziś (choć konkretniej to wczoraj) - 15 czerwca 2010! Trwał będzie aż do 21 września 2010!

W konkursie do wygrania cenne nagrody - 3 imienne komercyjne licencje na użytkowanie najnowszej wersji PostSharp 2.0, których fundatorem jest Paweł Hofman (CodeTitans.pl). Dalsze szczegóły dostępne są na stronie organizatorów tutaj. Życzę sukcesów i dobrej zabawy!

 

 PostSharp Wroc.NET



Stało się i znów jest problem. Jednego dnia zamykamy sprawny komputer, drugiego okazuje się, że zamiast włączać się jak zawsze (powiedzmy, że bez większych problemów) nasz Windows 7 ciągle się restartuje, uruchamia tryb odzyskiwania systemu lub testuje pamięć. Objawy o tyle dziwne, że wzięły się znikąd (tzw. efekt skraplania się z powietrza), a Windows wygląda, jakby chciał działać, a jednak nie mógł. Widać bowiem i animowane logo ‘okienek’ i pasek postępu, a nagle wyskakuje dialog odzyskiwania systemu i poszukiwania zaistniałego problemu.

Poczekawszy, aż proces odzyskiwania się zakończy (co u mnie niekiedy trwało i 10 minut), z logów dowiedziałem się, że wszystko jest OK, że przeprowadzono 1000 razy próbę ratunku i że mogę wysłać wieści do Redmont. Dopiero na samym końcu widniał napis w stylu:

Plik sterownika “C:\WINDOWS\system32\drivers\sptd.sys” jest uszkodzony.

Jakiekolwiek próby automatycznego odtworzenia tego pliku się nie udawały. Windows też nie próbował pominąć tego sterownika przy starcie i po prostu uruchamiać się dalej, tkwiąc w martwym punkcie po kolejnym restarcie. Wykonane testy pamięci nie zwróciły żadnego błędu. Wyjście awaryjne w postaci cofnięcia się do jednego z Punktów Odtwarzania Systemu, również się nie powiodło. Niby komunikat przed ich wykonaniem informował, że nie można przerwać tego procesu, ale gdzieś w środku wyskakiwał błąd z magiczną wartością 0x8xxx…

Na szczęście naciśnięcie F8 przy uruchamianiu komputera na płytach Asusa wyświetla menu z listą dysków twardych. Mogłem uruchomić dzięki temu inny z moich systemów operacyjnych i próbować szukać rozwiązania. W tym samym czasie skanowanie powierzchni partycji z systemem Windows 7 nie wykazało najmniejszego problemu. Sprzęt sprawny, komputer dzień wcześniej działał, to o co chodzi? Ano o to, że sterownik sptd.sys to: SCSI Pass Through Direct, czyli jeden z wielu sterowników dostępu do danych przestał działać! Jest on używany między innymi przez Daemon-Tools do świadczenia swoich usług i potwierdzania swojej ‘fizyczności’. No ale Daemony miałem zainstalowane od miesięcy i wszystko działało…ot złośliwość losu… Zmiana nazwy pliku ISO, który był włożony do wirtualnej stacji oczywiście też nie poprawiła sytuacji i system się nadal nie uruchamiał.

Rozwiązanie:

  1. Po zakończonej próbie automatycznego odzyskiwania, wybieramy ‘zaawansowane’ opcje (widoczne jako niebieski odnośnik na dole głównego okna programu).
  2. Wpisujemy login i hasło dla administratora komputera.
  3. Uruchamiamy terminal (potocznie znany tryb MS-DOS lub konsolą), w którym nawigujemy do katalogu system32/drivers i zmieniamy nazwę pliku sptd.sys, na jakąkolwiek inną (odsyłam do pomocy poleceń: cd, cp, del).
  4. Uruchamiamy komputer ponownie i tym razem uruchomi się bez najmniejszego problemu. Wszystko będzie działać prócz wirtualnej stacji DVD.
  5. Ze strony autorów sterownika SPTD (www.duplexsecure.com) pobieramy najnowszą wersję, którą dzisiaj jest v1.69 i instalujemy.
  6. Koniec. Wszystko wraca do normy.


Na szczęście autorzy Subversion przewidzieli, że potrzeba czasem przenieść repozytorium z jednej lokalizacji do drugiej z zachowaniem pełnej historii.

Pobieramy i zapisyjemy w pliku 'repo.dump' istniejące rewizje poleceniem:

svnadmin dump <ścieżka_do_źródłowego_repozytorium> > repo.dump

Na ekranie zobaczymy postęp w formie:

* Dumped revision 0.
* Dumped revision 1.
* Dumped revision 2.
* Dumped revision 3.
* Dumped revision 4.
* Dumped revision 5.
* Dumped revision 6.
* Dumped revision 7.
......

 

Odtwarzamy dane w nowym repozytorium poleceniem:

svnadmin load <ścieżka_do_nowego_repozytorium> < repo.dump

Co się objawi poprzez serie komunikatów o zaaplikowanych zmianach dla konkretnej wersji i może trwać dość długo (jeśli weźmiemy pod uwagę fakt, że robimy to na dość wolnym urządzeniu, które skonfigurowaliśmy uprzednio tutaj).

     * adding path :  ... done.
     * adding path :  ... done. 
     * adding path :  ... done                                                             .

------- Committed revision 18 >>>



Na początku serii porad o zarządzaniu i operacjach z serwerem SVN pokażę najprostszą rzecz – a mianowicie utworzenie nowego repozytorium. Zakładam jednocześnie, że będzie ono hostowane na naszym lokalnym routerze z systemem OpenWRT BackFire 10.03 oraz, że w chcemy mieć do niego dostęp przy użyciu protokołów svn:// i svn+ssh://, zależnie od tego, z której strony się łączymy.

Prawdopodobnie Subversion nie jest jeszcze zainstalowany w ogóle. Dlatego, aby się upewnić sprawdzamy listę zainstalowanych dodatków:

opkg update
opkg list-installed | grep subversion

Jeśli w wyniku zobaczymy na ekranie wpisy o SVN, to znak, że wszystko jest OK. W przeciwnym wypadku najlepiej pobrać już przygotowaną oficjalną dystrybucję ze strony openwrt.org i spróbować ją zainstalować. Służy do tego polecenie:

opkg update
opkg install subversion-server subversion-client

Następnie wracamy do meritum sprawy i tworzymy repozytorium poleceniem:

svnadmin create -fs-type fsfs /sciezka_do_repozytorium

Nowe repozytorium (z rewizją 0.) momentalnie zostanie stworzone. Dalej, edytujemy pliki konfiguracyjne, aby umożliwić sobie zdalny dostęp oraz minimum bezpieczeństwa:

  • w katalogu /etc/config edytujemy plik subversion:

    config subversion
            option path     '/ścieżka_do_repozytorium'
            option port     '3690'
  • w katalogu /ścieżka_do_repozytorium/conf edytujemy plik svnserve.conf:

    ustawiając brak możliwości logowania anonimowego, dając pełnię praw do zapisu zalogowanym poprawnie użytkownikom oraz wskazujemy plik, gdzie znajduje się lista użytkowników i ich haseł

    anon-access = none
    auth-access = write
    password-db = passwd
  • w końcu definiujemy użytkowników w pliku passwd (pozostając nadal w folderze conf naszego repozytorium). Cóż, plik ten nie jest w żaden sposób zabezpieczony. Także gdy już inny zły użytkownik znajdzie ten folder lokalnie, to nie będzie miał żadnego problemu z odzyskaniem i podmianą haseł, dlatego lepiej NIE używać tutaj hasła roota i podobnych.
  • na sam koniec uruchamiamy usługę subversion odpowiednim poleceniem tak, aby włączała się ona automatycznie po restarcie systemu (i gwarantowała dostęp po niezabezpieczonym protokole svn://):

    /etc/init.d/subversion start
    /etc/init.d/subversion enable


    (podpowiedź: po prostu startuje to proces svnserve na porcie 3690 oraz tworzy odpowiednie dowiązanie symboliczne S50subversion w katalogu /etc/rc.d, co powoduje, że będzie on włączany podczas ładowania systemu)

    W ramach testu możemy w tym miejscu posłużyć się TortoiseSVN i w Przeglądarce Repozytorium wypróbować adres: svn://openwrt/ (zamiast ‘openwrt’ należy wstawić nazwę nadaną naszemu routerowi lub po prostu jego adres IP z sieci wewnętrznej). Powinniśmy momentalnie zobaczyć monit o podanie nazwy użytkownika i hasła. Jeśli trwa to dłużej, to coś jest zepsute.
  • dodatkowo, w zależności od tego, z której strony routera chcemy się dostawać do repozytorium (od środka sieci lokalnej, czy z zewnątrz od WAN) tworzymy lub nie dziurę na porcie 3690 w firewallu. Sposób jak tego dokonać opisano tutaj. Pamiętajmy jednak, że przesyłane dane NIE będą w żaden sposób zabezpieczone ani zaszyfrowane. Jeśli zależy nam na bezpieczeństwie, to zalecane jest w tym momencie nie używanie tego połączenia z zewnątrz naszej sieci i czytanie dalej.

Gwarancję bezpiecznego dostępu do danych w naszym repozytorium zapewni nam tunelowanie. Tzn. w naszym przypadku skupimy się na przesyłaniu niezaszyfrowanych danych protokołem svn:// po szyfrowanym tunelu SSH. W ten sposób już nikt nie podsłucha tak łatwo wymiany danych z serwerem. Tutaj kroki, aby zaczęło to działać są nieco bardziej skomplikowane, bo najpierw:

  • zakładamy nowego użytkownika lokalnego, który będzie używany do logowania się na router. Mocno odradzam używania root’a w tym celu. Opis jak założyć użytkownika znajduje się tutaj. Pamiętajmy, aby użytkownik ten miał zdefiniowany poprawny katalog domowy oraz hasło! Hasło można nadać wykonując polecenie:

    passwd <nazwa_użytkownika>

    (uwaga: od tej pory, logując się do SVN przez SSH, plik z hasłami definiowany w katalogu conf repozytorium będzie ignorowany i SVN będzie zakładało, że poprawna autoryzacja SSH jest wystarczająca, a wszystkie zmiany będą odbywały się w kontekście właśnie tego użytkownika!)
  • otwieramy port 22 od strony połączenia WAN, co umożliwi nam zdalne logowanie SSH (jako dodatkowe zabezpieczenie możemy otworzyć inny port, który tylko my będziemy znać i robić przekierowanie na port 22 lub zmienić port nasłuchiwania usługi SSH)
  • jako test w tym momencie możemy wykonać na dowolnym innym komputerze podłączonym do naszej sieci:

    ssh <nazwa_użytkownika>@<IP routera od strony WAN>

    lub

    ssh –p <number_portu_jeśli_inny_niż_22> <nazwa_użytkownika>@<IP routera od strony WAN>

    lub wykorzystać program Putty, gdy testujemy z Windowsa.
  • tworzymy jeszcze tylko dowiązanie symboliczne na routerze, abyśmy nie musieli pamiętać ścieżki do repozytorium i mieli je zawsze dostępne pod hasłem “repo”

    ln –s /ścieżka_do_repozytorium /repo
  • na sam koniec przechodzimy do konfigurowania klienta, gdzie musimy zdefiniować odpowiedni ‘tunel’. Na moim komputerze wygląda to tak, że w katalogu “~/.subversion” należy edytować plik config i dodać tam w sekcji “[tunnels]” następującą linijkę (wszystko w jednej linii!):

    ssh = $SVN_SSH ssh –q –p <numer_port_od_strony_WAN_dla_SSH>
                          –l <nazwa_użytkownika_do_logowania_SSH>
  • Gotowe! Od tej pory pobieramy repozytorium poprzez nieco zmodyfikowany adres:

    svn co svn+ssh://<adres_publiczny_naszego_routera>/repo <lokalny_folder_gdzie_zapisać_pliki>

    Jeśli nie utworzyliśmy dowiązania ‘repo’ to w jego miejscu musimy wpisać całą ścieżkę lokalną do repozytorium, co nie musi być zawsze oczywiste.

    Jedyny mankament to to, iż za każdym razem, gdy mamy odwiedzić repozytorium musimy wielokrotnie wpisać hasło. Mi to nie przeszkadza, ale mimo wszystko to też da się obejść. Odsyłam do popularnego tematu w google ‘automatyczne logowanie SSH’.

Od tej pory wersjonowanie plików stało się jeszcze przyjemniejsze!



Słowem wstępu – jak to już wcześniej opisałem udało mi się reanimować router. Model całkiem niezły i radość tym większa, że teraz mając dwa, na jednym można poeksperymentować. Jak zatem da się go jakoś mądrze wykorzystać? Otóż w sieci domowej miło jest mieć jakiś serwerek, gdzie poprzez zwykłe otoczenie w Windowsie można by trzymać kopie swoich dokumentów, zdjęć, filmów i mieć do nich zawsze dostęp. Lub też utrzymywać inne repozytorium (jak SVN, git czy mercurial) albo uderzyć z zupełnie innej strony i postawić sobie stronkę WWW na własne potrzeby. Małe uwagi w tym miejscu:

  • ta dobra – opisywany model ma dwa wyjścia USB, także w teorii na brak miejsca nie musimy narzekać, bo zawsze można jakiegoś pendrive’a, czy dysk podpiąć
  • ta lepsza – w porównaniu do normalnego PC, który musiałby pełnić podobną rolę, router nie ma w ogóle wentylatorów, czyli nie hałasuje oraz nie zużywa tyle prądu!
  • i w końcu ta zła – na standardowym firmware’rze tego nie osiągniemy i trzeba się nieco nagimnastykować, aby wgrać alternatywne oprogramowanie.

Przeglądając Internet natrafimy na takie zastępcze firmware’y jak: OpenWrt, DD-Wrt, Tomato, Oleg czy dziesiątki tysięcy ich klonów, które jedyne co wniosły, to odbiły się w którymś momencie od głównej gałęzi kodu, wypuściły serię koszulek czy kubków z nazwą nowego projektu i zamarły...

Po krótkiej analizie zdecydowałem się na OpenWRT. Głównie z tej przyczyny, iż jest on ciągle rozwijany i niedawno wyszła nowa wersja (o kryptonimie BackFire 10.03). Ponadto posiada bardzo dużą ilość pakietów, które realizują w zasadzie wszystkie funkcjonalności, których wymagałem, a ilość pomocy i poradników na jego temat jest przeogromna.

A zatem po kolei:

  1. Zaznajamiamy się z tematem. Polecam poczytanie przewodników – jak wypalić, co i gdzie zmieniać, jak zachowywać się w przypadku błędów, czy jak dogrywać pakiety. Mnogość informacji znajduje się na stronie samego OpenWRT, jego polskim portalu oraz tego oto jednego zapaleńca z eko.one.pl.
  2. Kompilujemy! Nic bardziej mylnego! To jest największy złodziej czasu oraz sprawca zepsutego humoru! Niestety po instalacji Debiana na maszynie wirtualnej, zaaplikowaniu pakietów z narzędziami dla developera oraz ściągnięciu źródeł samego OpenWRT (z ich SVNa oraz później poprzez make download) i po 3-ch zmarnowanych wieczorach poddałem się. Za każdym razem coś się nie chciało skompilować. Ponadto budowanie równoległe (make –j3) dawało jeszcze bardziej dziwaczne błędy. W dodatku cały czas istnieje obawa, że nie mamy doświadczenia i, że czegoś zapomnimy dodać, marnując jeszcze więcej czasu przy konfiguracji. Dlatego też skierowałem się w inną stronę...
  3. Instalujemy gotowy plik obrazu firmware’u *.trx, który już ktoś dla nas przygotował. Tutaj kolejna uwaga: na pewno nie ten ze strony OpenWRT :) Powód jest prozaiczny – te obrazy nie zawierają standardowo wkompilowanego w kernel wsparcia do USB. Niby nic wielkiego, bo przecież można to później dograć. Jednak nie pozwoli to na wykonanie jednej sztuczki, zwiększającej pamięć, o której mowa w następnych punktach. Tutaj znajdziemy odpowiednio skompilowane wersje.
  4. Poprzez panel sterowania Windowsa 7 dodajemy sobie nową funkcję – program tftp.
  5. Wprowadzamy router Asusa w stan gotowości do wgrania firmware’u (trzymając wciśnięty przycisk reset przez 10sek zaraz po włożeniu kabla zasilającego).
  6. Ustawiamy ręcznie adres IP swojej karty sieciowej tak, aby widziała ona router (czyli 192.168.1.20/255.255.255.0; często też jeśli wcześniej zmieniliśmy adres podsieci wymagana może być zmiana ‘1’ na inną wartość)
  7. Wykonujemy polecenie:

    tftp –i 192.168.1.1 PUT openwrt-brcm47xx-squashfs.trx

    czekamy aż wszystko się wyśle, później router się uruchomi sam ponownie i aż będziemy się mogli zalogować poprzez usługę telnet.
  8. Wymieniona wersja nie posiada oczywiście żadnego interfejsu graficznego (czy też konfiguracji poprzez www), dlatego wszystko od tej pory wykonujemy na konsoli, edytując wartości w plikach konfiguracyjnych. Dodatkowymi atutami będą: znajomość poleceń systemu Linux oraz programów telnet, Putty.
  9. Po zalogowaniu zmieniamy hasło (poleceniem passwd) po czym logujemy się ponownie używając Putty.
  10. Teraz widząc, że nasz router ma tylko 32MB pamięci RAM  – rozszerzamy ją dodając pamięć wirtualną swap. Wszystko opisane jest bardzo przystępnie tutaj. Polega to głównie na sformatowaniu pendrive’a i podzieleniu go na dwie partycje: (1) pliku wymiany swap o pojemności 256MB oraz (2) danych.
  11. Teraz widzimy, że router ma nie więcej niż 4MB przestrzeni, na którą możemy coś wgrać. Jest to stanowczo za mało nawet na nasze pakiety (tj.: obsługę polskiego kodowania, moduły do Subversion, Pythona, Mercuriala, Sambę itp). Plus jest taki, że już mamy pendrive’a podpiętego do USB (koniecznie obsługa USB musi być wkompilowana w kernel – zachęcam do poczytania o partycji ‘overlay’ oraz jak działa system plików squashfs oraz jffs). Teraz też możemy pokazać mu, że można wykorzystać drugą partycję, aby to ona stała się ‘fizyczną’ pamięcią zapisywalną routera. Robimy zatem wszystko zgodnie z tym poradnikiem. Pamiętajmy jednak, że zmiana podstawowej partycji do zapisu danych spowoduje, że wszystkie ustawienia, które do tej pory zmieniliśmy na routerze zostaną zastąpione tymi, które są zapisane na pendrive’ie i jeśli był on pusty wcześniej tzn. że zostaną użyte domyślne i całą konfigurację trzeba przeprowadzić od nowa.
  12. Dwie ostatnie rady są o tyle dobre, że nie trzeba już nic robić, aby przekierowywać instalowane pakiety, czy w ogóle martwić się o miejsce na samą konfigurację routera. Wszystkie sztuczki z modyfikowaniem ‘destination’ dla opkg, czy dodawaniem nowych folderów do zmiennej środowiskowej $PATH idą do lamusa.
  13. Dodatkowo dodajemy i tak dysk na USB albo drugi pendrive, na którym będziemy przechowywać faktycznie pliki z danymi!

O samej konfiguracji serwisów wpis niebawem. Trzymam kciuki, że ten poradnik w takiej formie ocali komuś trochę czasu!



Jakiś czas temu awarii uległ mój router Asus WL-500gP. Sam moment zejścia trwał dość długo, bo około miesiąca i objawiał się dosyć dziwnie, w różnych etapach żywotności. Aż w końcu pewnego dnia, umarł, a później cudownie ożył! Ale po kolei.

Najpierw zastałem go resetującego się raz po raz. Było to o tyle ciekawe, iż na pierwszy rzut oka wpływ na to miało uruchamianie się WiFi. Zazwyczaj to po zapaleniu tej lampki następował restart. Dla tego routera dostępna jest cała gama nieoficjalnych firmwarów, więc pierwsze co w tym momencie przychodzi do głowy, to wgrać inny. W oryginalnym zapewne był błąd, który akurat mnie dopadł (po 2-ch latach użytkowania, ale zawsze). Spróbowałem openWRT i Oleg dla Asus WL-500gX. Router pochodził jeszcze tydzień i znów zaczął zachowywać się niestabilnie.

Tym razem objawy były dużo bardziej zaskakujące. Zaraz po podłączeniu do prądu zapalały się wszystkie lampki (all lights on) od tej z zasilaniem poprzez połączenia sieciowe (mimo, że kable nie były włożone) i WiFi. Dalej nie robiło się już nic. I tutaj się trochę poddałem, bo wszystko wskazywało na jakieś uszkodzenie sprzętowe. Po rozkręceniu obudowy, napięcia jakoś wyglądały, kondensatory się ładowały, zatem to musiała być pamięć FLASH, gdzie zapisany był bootloader lub sam firmware i nic nie jest uruchamiane, bo nic się nie da odczytać. Wszystko idzie w krzaki. W takim stanie router ten przeleżał dłuższy czas, aż w forum Asusa znalazłem potencjalną przyczynę mojego problemu – uszkodzony zasilacz!

Otóż oryginalny zasilacz (POWER SUPPLY UMEC UP0181B-05PE; +5V, 2.5A = 12.5W) ma tę własność, iż psuje się dobitnie tak, że daje podczas pracy zbyt niskie parametry prądu. To co jest najciekawsze to to, iż daje on w ogóle jakieś napięcie i natężenie, ale zbyt małe, aby pozwolić routerowi na poprawne uruchomienie. Wyjściem okazała się tutaj wymiana tego elementu, co kosztuje nieco ponad 20 PLN (wliczając dostawę do domu). Oprócz napięć, ważny jest typ końcówki, który w tym wypadku ma wymiary 2.1/5.5. Wiele innych modeli dLink oraz Linksys również używa tego zasilacza, dlatego jego zakup nie jest trudny.

Wszystko wróciło do porządku (i początku)!



VisualSVN oprócz wersji klienta SVN, od niedawna udostępnia również instalator, który pomaga w łatwy i przyjemny sposób udostępniać usługę SVN-serwer na własnych serwerach developerskich poprzez HTTP/HTTPS. Razem z binariami do zarządzania repozytorium, instalowany jest serwer Apache (lub to co jest z niego wymagane) oraz autorski panel administracyjny. Poprzez niego zakładane są repozytoria, przypisywane uprawnienia użytkowników oraz generowane (przypinane) certyfikaty SSL dla połączeń HTTPS.

To co ucieszyć może domorosłych programistów i administratorów to fakt, iż nawet darmowa wersja pozwala na wykorzystanie go w pracach nad komercyjnymi produktami. Dodatkowym atutem jest fakt, iż bardzo łatwo integruje się z domeną Active Diretory.



Zadanie na dzisiaj: instalacja programu MediaGo na komputerze z systemem Windows XP SP3 PL, a dokładniej – próba instalacji pomimo błędu:

Installing Microsoft Windows Imaging Component
One or more features could not be installed. The installation has been stopped.
Click Cancel to exit.


Installing Microsoft Windows Imaging Component

Okazuje się, że Sony Ericsson przy pisaniu tego instalatora dał plamę na całej linii. Niezależnie od tego, co byśmy robili, instalacja zakończy się błędem w najmniej oczekiwanym momencie – podczas aktualizacji komponentu Windows Imaging. Można go również bezpośrednio pobrać tutaj i spróbować aktualizować samodzielnie.

Przy własnoręcznej próbie instalacji tego komponentu dowiemy się w końcu, gdzie tkwi błąd. Otóż w systemie jest już zainstalowana nowsza wersja (dokładniej, to o jakieś dwa lata) i jej nadpisanie nie jest dopuszczalne. Aby obejść ten problem należy wykonać trzy proste kroki:

  1. założyć nowy folder i przenieść do niego następujące pliki z katalogu C:\Windows\System32:

    windowscodecs.dll
    windowscodecsext.dll
    photometadatahandler.dll
    WMPhoto.dll
  2. ponownie uruchamiamy instalator MediaGo (tym razem wszystko się powiedzie)


    Installing MediaGo
  3. przywracamy przeniesione pliki w kroku (1) na ich właściwe miejsce w C:\Windows\System32, nadpisując te, które wgrał tam instalator.

Odtąd możemy cieszyć się naszą aplikacją i kopiować zdjęcia oraz wideo na telefon.



Autor

Paweł Hofman [CodeTitans]

ASP.NET
C/C++, C#, Objective-C
SQL

License and Disclaimer

Moje Gry i Aplikacje

Zobacz mnie na GoldenLine

Zobacz mnie na LinkedIn
Supported by Polish SQL Server User Group (PLSSUG)

Supported by WrocNet.org

Zine.net.pl

Wpisy

Projekty

Moje projekty open-source:

Sign in