Zine.net online

Witaj na Zine.net online Zaloguj się | Rejestracja | Pomoc
w Szukaj

Bartek Szafko

  • WixEdit – łatwe edytowanie WxS

    image

    Podczas moich prezentacji o WiX często pada pytanie: xml jest fajny, ale nie chce od niego zaczynać  - czy nie ma czegoś wizualnego? Okazuje się, że istnieje conajmniej jeden produkt komercyjny, który jest obiektem flamewara ze strony Roba Menschinga. Ja postanowiłem poszukać trochę głębiej. Okazuje się, że na sourceforge jest projekt o nazwie WiXEdit. Do tej pory nie miałem doświadczenia z żadnymi narzędziami graficznymi do WiX, więc postanowiłem spróbować.

    image

    Całość działa bardzo sprawnie, pozwala modyfikować główną strukturę, dodawać foldery pliki, itp. Jedna poważna wada to, gdy dodamy element UIRef i dodamy referencje do dialogów zdefiniowancyh w wixuiextension.dll w zakładce Dialogs nie można podglądać tych okienek. Dopiero gdy mamy źródła .wxs odpowiednich dialogów można je przeglądać. Fajna funkcjonalność to, że pokazuje się też jak będzie ostatecznie wyglądać okno.

    image 

    Jak dla mnie oczywistą wadą jest brak obsługi zmiennych z Votiva, bo działa poza środowiskiem Visual studio. Trzeba więc samemu ustawić odpowiednie wartości zmiennych np: $(var.SolutionDir) w Build Settings.

    works-on-my-machine-starburst

    Myślę, że WixEdit w pełny zasłużył na znak “Works on my machine” i mogę zdecydowanie polecić do używania szczególnie początkującym z WiX.

    Inne ciekawe linki do projektów związanych z WiX, które ostatnio znalazłem:

    • WiX FileVersion Preprocessor Extension – extension, który pozwala na wyciągnięcie właściwości z assembly(ProductName, CompanyName, ProductVersion) i użycie ich do ustawienie odpowiednich wartości instalatora. UPDATE Rob zwrócił uwagę na tzw binder variables, które mogą zostać użyte w podobnym celu
    • WixTrim – inny edytor graficzny do skryptów WxS, wygląda ok ale jakoś rzadko był pobierany, ma bardzo podobny układ ekrany do visual studio – ktoś chętny żeby spróbować ? PLZ dajcie znać jakie mieliście wrażenia


    Inne podobne artykuły:

    Bartek SzafkoTen artykuł pochodzi z bloga Bartka Szafko i pozostaje własnością autora. Wszelkie użycie bez zgody jest niedozwolone.
    © Copyright by Bartek Szafko
    81401c6e400a1ca19bd490938dc3548e)
  • Dlaczego Entity Framework będzie rządzić światem

    Nadrabiając ostatnio zaległości w słuchaniu DotNetRocks w odcinku #411 o ORM-ach Ward Bell podniósł ciekawą kwestię, a mianowicie, że Entity Framework będzie dominującym mapperem obiektowo relacyjnym na rynku. Myśl całkiem przewrotna, szczególnie biorąc pod uwagę “Vote of No Confidence”(Alt.NET podcast – hej tutaj też Ward Bell) ze strony społeczności. Jednak warto odsunąć flamewar i love to hate relationship do MS na bok i spojrzeć na fakty.

    Po pierwsze zasoby

    Microsoft inwestuje w EF nieprawdopodobne zasoby, takie o których np.: NHibernate może tylko pomarzyć. Oczywiście jak zwykle V1 pozostawia trochę do życzenia, ale MS już wielokrotnie dowiódł(patrz Vista –> Windows 7), że jednak potrafi się uczyć na błędach i słuchać klientów, więc następne wersje zapewne będą już o wiele lepsze.

    Po drugie literatura

    Ward podniósł też ciekawy argument – ile jest opublikowanych książek dotyczących NHibernate – okazuje się, że jest parę ;) natomiast już w tej chwili są dostępne conajmniej 3 książki na ten temat.Tutaj ciekawostka – link do bloga Julie Lerman, która sama jest autorką spoooorej książki o Entity Framework.

    O EF na C2C

    c2c logo male

    Julie Lerman będzie prelegentem na konferencji Communities2Communities więc będzie okazja, aby posłuchać o EF prosto z ust ekspertki. Na zeszłorocznej edycji C2C temat EF również był obecny pod postacią prelekcji Jarka Kowalskiego.


    Inne podobne artykuły:

    Bartek SzafkoTen artykuł pochodzi z bloga Bartka Szafko i pozostaje własnością autora. Wszelkie użycie bez zgody jest niedozwolone.
    © Copyright by Bartek Szafko
    81401c6e400a1ca19bd490938dc3548e)
    opublikowano 24 stycznia 2009 18:16 przez bszafko | 0 komentarzy
    Filed under:
  • WiX w Visual Studio 2010 w praktyce

    O Windows Installer Xml w Visual Studio 2010 pisałem już jakiś czas temu, ale tylko w teorii. Teraz zdecydowałem się zobaczyć jak wygląda w praktyce.

    Wpierw należy pobrać maszynę wirtualną z windows server 2008 oraz ctp visual studio 2010. Zaraz po pobraniu i rozpakowaniu maszyny wirtualnej trzeba wyłączyć synchronizację czasu z maszyną hostującą, ponieważ vs2010 ma bombę czasową i przestaje działać po 1 stycznia 2009. Opisał to Ben Armstrong na swoim blogu.

    Po tych zabiegach możemy odpalić maszynę i VS 2010, już na pierwszy rzut oka na splash screenie pojawia się WiX, tak jak np w VS2008 z zainstalowaną wtyczką Votive:

    01 

    Zajrzałem też do C:\Program FIles, zamiast “Windows Installer XML” jest folder “Visual Studio 2010 Windows Installer XML Toolkit CTP””

    04

    Są też tylko wtyczki WixIISExtension, WixNetFxExtension, WixSqlExtension, WixUIExtension, WixUtilExtension, WixVSExtension. Reszta ma podobno znaleźć się w wersji BETA. Postanowiłem też sprawdzić jaka wersja WiX jest zawarta w CTP – okazuje się, że jest to 3.0.4325.0 – w chwili pisania najnowsza dostępna jest 3.0.4909.0. Z tego co czytałem na blogach RTM VS2010 ma już zawierać najnowszą wersję dostępną w momencie tworzenia release.

    05

    Dalej już po staremu w VS dostępna jest znana grupa projektów Wix, co ciekawe nadal jest dostępna grupa ze starymi typami projektów seupowych – pewnie raczej w celach zachowania zgodności wstecz.

    02

    03

    Dalej już wszystko po staremu np budując prosty instalator z UI, o którym już kiedyś pisałem. Co cieszy dostępna jest Polska lokalizacja odrazu z paczki.

    06 

    Konkurs na blog roku

    Jeśli spodobał Ci się ten wpis, chciałbyś okazać mi wsparcie i zachęcić do dalszego pisania proszę zagłosuj na mnie w konkursie na blog roku organizowanym przez Onet byłbym bardzo wdzięczny. Wystarczy wysłać smsa B00023( to są zera ) na numer  7144, koszt smsa to 1,22 zł a cały zysk przekazywany jest na organizowanie turnusów rehabilitacyjnych dla dzieci z porażeniem mózgowym – zrobisz 2 dobre uczynki.

    image

    C2C

    Spróbuje również przygotować webcasta o WiX na konkurs speaker idol na konferencję C2C własnie przy pomocy 2010 – żeby być na bleeding edge. Zobaczymy jak wyjdzie nagrywanie ekranu w maszynie wirtualnej – oby dało radę i obym został wybrany – trzymajcie kciuki.


    Inne podobne artykuły:

    Bartek SzafkoTen artykuł pochodzi z bloga Bartka Szafko i pozostaje własnością autora. Wszelkie użycie bez zgody jest niedozwolone.
    © Copyright by Bartek Szafko
    81401c6e400a1ca19bd490938dc3548e)
  • Wizardy w AERO

    W viście są dosyć fajnie dopracowane kontrolki – to już wiecie. Moją szczególną uwagę zwróciły wizardy w aero, taki jak na przykład przy dodawaniu nowej drukarki:

    image image

    To co głównie wyróżnia tego wizarda to przycisk wstecz w lewym górnym rogu i olbrzymi pasek tytułowy ( jak na mój gust nawet za duży).

    Szukałem sposobu w jaki by można zrobić takiego wizarda we własnej aplikacji, który byłby zgodny z systemowym. Okazuje się, że istnieje nawet przykład, który pokazuje jak to zrobić w .NET, oczywiście jak zwykle w msdnie sprawa nie jest banalna i wpierw należy pobrać Vista Bridge Controls. Po skompilowaniu wszystkiego możemy zacząć używać fajnych aero wizardów w WPF:

    image

    image

    Zrobienie czegoś takiego wymaga dosyć prostego xamla:

    <v:AeroWizard x:Class="Wizard.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:v="clr-namespace:Microsoft.SDK.Samples.VistaBridge.Controls;assembly=VistaBridgeControls"
        xmlns:l="clr-namespace:Wizard"
        MainInstruction="AERO Wizard Test"
        Title="Connect to a workplace"
        >
      <v:AeroWizard.Pages>
        <Page>
          <StackPanel>
            <v:CommandLinkWPF Link="Choice One"  Note="(Recommended)"  Click="OnClick" />
            <v:CommandLinkWPF Link="Choice Two"  Note="(Not Recommended)" Click="OnClick" />
            <v:CommandLinkWPF Link="Choice Three"  Note="(Never Use)" />
          </StackPanel>
        </Page>
        <Page>
          <StackPanel>
            <v:CommandLinkWPF Link="Some Other Link text"  Note="This is a lot of descriptive text, which will enable the user to make a better choice."  Click="OnClick" />
          </StackPanel>
        </Page>
      </v:AeroWizard.Pages>
    </v:AeroWizard>
    

    Bardzo poważna wadą takiego rozwiązania to że będzie działać jedynie na Viście, na xp pojawi się komunikat o braku biblioteki dwmapi.dll. Żeby rozwiązać problem trzeba by napisać własną abstrakcję wizarda, która na viscie używałaby aero a na xp jakiegoś domyślnego wyglądu.


    Inne podobne artykuły:

    Bartek SzafkoTen artykuł pochodzi z bloga Bartka Szafko i pozostaje własnością autora. Wszelkie użycie bez zgody jest niedozwolone.
    © Copyright by Bartek Szafko
    81401c6e400a1ca19bd490938dc3548e

    opublikowano 10 stycznia 2009 15:24 przez bszafko | 0 komentarzy
    Filed under:
  • Instalator w pliku msi część 4

    W poprzedniej części stworzyłem instalator z interfejsem użytkownika. W tej części zbrandujemy instalator. Po pierwsze wymienię standardowe tło dla okna startowego:

    image

    W tym celu należ stworzyć własną bitmapę( niestety obsługiwany jest tylko format .bmp) koniecznie o rozmiarze 493 na 312, można również zmodyfikować istniejącą. Nowa bitmapa będzie stanowiła tło całego okna, poza paskiem przycisków.

    Aby powiedzieć WiX, żeby podmienić tło należy zmodyfikować wartość zmiennej WixUIDialogBmp:

    <WixVariable Id="WixUIDialogBmp" Value="WixUI_Bmp_Dialog.bmp" /> 

    Następnie dodam własną licencję użytkownika i wymienię nagłówek okna (biały pasek z brązową płytką cd):

    image

    W tym celu stworzę bitmapę o rozmiarze 493 na 58 oraz plik Rich Text Format z tekstem mojej licencji. Podobnie jak w poprzednim przypadku muszę tylko ustawić odpowiednie zmienne:

    <WixVariable Id="WixUILicenseRtf" Value="license.rtf" />
    <WixVariable Id="WixUIBannerBmp" Value="WixUI_Bmp_Banner.bmp" />

    Po skompilowaniu okna mogą wyglądać np tak:

    image

    image

    Jak dodatkowy bonus dodam możliwość uruchomienia instalowanej aplikacji na samym końcu:

    image

    W tym celu trzeba po pierwsze dodać odpowiedni checkbox na ostatnim oknie:

    <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Skonfiguruj i uruchom aplikację"/>
    <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1"/>

    Stworzę również akcję odpowidzialną za uruchomienie aplikacji:

    <CustomAction Id="Uruchom" Directory="INSTALLLOCATION"
    ExeCommand="[INSTALLLOCATION]WindowsFormsApplication1.exe"
    Return="asyncNoWait"/>

    Ważne jest pole Return i wartość asyncNoWait, która oznacza że instalator nie musi czekać na wynik działania aplikacji i może kontynuować normalne działanie..

    Na koniec podepnę zdarzenie do przycisku “Zakończ” na ostanim oknie polegające na uruchomieniu akcji, ale tylko gdy zaznaczony jest checkbox:

    <UI>
      <Publish Dialog="ExitDialog" Control="Finish" Order="2" Event="DoAction" Value="Uruchom">
        WIXUI_EXITDIALOGOPTIONALCHECKBOX
      </Publish>
    </UI>

    Wszystko jeszcze raz można zobaczyć na filmie


    Inne podobne artykuły:

    Bartek SzafkoTen artykuł pochodzi z bloga Bartka Szafko
    )
  • 14. spotkanie PG.NET

    xiv-spotkanie_www

    Po mocnym końcu listopada, mocny początek grudnia!

    Będziemy gościć Mariusz Jarzębowskiego z Microsoft, który przedstawi Historię wstążki.Jeśli widziałeś sesję otwierającą Microsoft Techonology Summit 2008 to zapewne wiesz o czym piszę. Według mnie to była jedna z najlepszych (również pod względem przygotowania) prezentacji na MTS 2008. Jestem bardzo zadwolony, że udało mi się ściągnąć Mariusza na nasze spotkanie.

    Drugim prelegentem bedzie Darek Tarczyński. Darek już od dłuższego czasu bywał u nas na spotkaniach, od jakiegoś czasu prowadzi również bardzo interesującego bloga. Tematem wystapienia Darka będzie budowanie nowoczesnych aplikacji w ASP.NET. Darek ma dużo do powiedzenia w tym temacie, ponieważ pracuje w Cafe News, który zbudował serwis agregujący newsy właśnie w oparciu o .NET.

    Do rozdania mamy sporo licencji, które rozlosujemy wśród osób, które wypełnią ankiety.

    Kudos: do Marcina Samelaka za piękny zimowy bannerek!

    Strona spotkania jest dostępna tutaj


    Inne podobne artykuły:

    Bartek SzafkoTen artykuł pochodzi z bloga Bartka Szafko
    opublikowano 29 listopada 2008 20:52 przez bszafko | 0 komentarzy
    Filed under:
  • O wstążce w pryzmacie (Ribbon + Prism)

    Wstążka (Ribbon)

    Jakiś czas temu Micorosoft opublikował biblioteki ze wstążką znane z Office 2007 pozwalające na użycie w aplikacjach WPF. Okazuje się, że uzyskanie tych bibliotek wymaga jednak trochę zachodu:

    1. Trzeba się udać na stronę “Office UI Licensing” i skorzystać z linku “License the Office UI”, następnie trzeba się zalogować przy pomocy live Id i zaakceptować licencję. Przyznam się szczerze, że nawet nie wiem na co się zgodziłem :P Na końcu tego kroku będzie można pobrać WPFRibbonCTP – bibliotekę ze wstążką dla WPF.
    2. Najlepiej też pobrać Hands-On-Lab:What’s Coming in WPF: Datagrid, Ribbon, and VSM, który pokazuje jak stworzyć wstążkę. W ćwiczeniu 2 zawarta jest świetna aplikacja demonstracyjna:

    image

    Podłączamy Prism

    O Prism opowiadał Szymon Kobalczyk na 12. spotkaniu PG .NET – jego wystąpienie zainspirowało mnie i zachęciło do eksperymentów. Postanowiłem dodać region pozwalający na dodawanie zakładek do wstążki przez moduły. Po bliższym obejrzeniu kodu źródłowego Prisma okazało się, że trzeba tylko stworzyć własny RegionAdapter:

        public class RibbonControlRegionAdapter : RegionAdapterBase
        {
            private Ribbon m_regionTarget;
    
            protected override void Adapt(IRegion region, Ribbon regionTarget)
            {
                m_regionTarget = regionTarget;
                regionTarget.Tabs.Clear();
                region.ActiveViews.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(OnActiveViewsChanged);
                foreach ( RibbonTab v in region.ActiveViews)
                    regionTarget.Tabs.Add(v);
            }
    
            private void OnActiveViewsChanged(object sender, NotifyCollectionChangedEventArgs e)
            {
                switch (e.Action)
                {
                    case NotifyCollectionChangedAction.Add:
                        foreach (RibbonTab v in e.NewItems)
                            m_regionTarget.Tabs.Add(v);
                        break;
    
                    case NotifyCollectionChangedAction.Remove:
                        foreach (RibbonTab v in e.NewItems)
                            m_regionTarget.Tabs.Remove(v);
                        break;
    
                }
            }
    
            protected override IRegion CreateRegion()
            {
                return new AllActiveRegion();
            }
        }

    Tak wygląda shell przed podłączeniem modułu ( wiem – brzydki, ale nie o to chodzi:P ):

    image

    A tak po włączeniu modułu Module1, który używa regionu we wstążce:

    image

    Rozwój

    W tym przykładzie adapter jest tak zbudowany, że pozwala tylko na dodawanie całych zakładek. Można sobie wyobrazić sytuację, w której na istniejących już zakładkach można dodawać nowe przyciski/grupy/menu lub nawet nowe pozycje do głównego menu.
    Inne podobne artykuły:

    Bartek SzafkoTen artykuł pochodzi z bloga Bartka Szafko
    opublikowano 24 listopada 2008 08:50 przez bszafko | 2 komentarzy
    Filed under:
  • PG.NET razem z PLSSUG na koniec listopada


    PG.NET będzie miało mocny koniec listopada.

    Już jutro w czwartek 20.11 rozpoczynamy 70-536 study group. Na pomysł uruchomienia study group wpadłem już jakiś czas temu, nie ukrywam że między innymi pod kątem naszych wewnętrznych firmowych potrzeb. Nic tak nie motywuje jak działanie w zespole ! Oprócz tego udało mi się ściągnąć Michała Żylińskiego, żeby opowiedział o programie BizSpark, który wystartował w Polsce zaledwie przedwczoraj - jak dla mnie bardzo interesująca propozycja. Spotkanie nosi numer 12,5 - bo nie można nazwać tego pełnym - będzie trwało tylko maksymalnie godzinę. Spotkanie odbędzie się u nas, w firmie Advisor przy ul. Św. Wincentego 7.

    A za tydzień w czwartek 27.11 13. (szczęśliwe) spotkanie PG.NET tym razem 2 duże tematy EpiServer oraz prelekcja inagurująca PLSSUG(Polish Sql Server User Group) w Poznaniu. Zdecydowałem się wspólnie z Marcinem pomóc Stefanowi w wystartowaniu grupy, ponieważ uważamy, że w Poznaniu brakuje inicjatyw związanych z technologiami Microsoftowymi. Mam nadzieję, że w związku z tym częściej będzie nas odwiedzał  Papież polskiego SQLa - czyli Paweł Potasiński :) .

    Kudos do Marcina Samelaka za jak zwykle rewelacyjny bannerek, który jest na górze posta :D

    Inne podobne artykuły:

    Bartek Szafko Ten artykuł pochodzi z bloga Bartka Szafko
    opublikowano 19 listopada 2008 11:55 przez bszafko | 5 komentarzy
    Filed under: ,
  • Team Media Portal 1.00 RC3

    O team media portal już kiedyś pisałem, w międzyczasie pojawiła się wersja 1.00 RC3.

    Jest to oprogramowanie, które zastępuje Windows Media Center, jest przy tym całkowicie darmowe i budowane na zasadach open source.

    Aplikacją bardzo wygodnie steruje się za pomocą pilota.

    Media portal używam praktycznie do odtwarzania wszystkich plików wideo – w tej chwili na przykład oglądam materiały wideo z PDC 2008.

    Największa zmiana to nowy szablon wyglądu – Blue3, na razie jest tylko wersja na ekrany 4:3, ale już niedługo będzie 16:9.

    image

    Ciekawą funkcjonalnością jest TV-Server: wkładasz w serwer karty tv albo wideo(na przykład od satelitarnej tv cyfrowej) i we wszystkich komputerach w domu możesz oglądać telewizję przez sieć – jeszcze z tym nie eksperymentowałem, ale będę musiał spróbować( ciekaw jestem, czy to zadziała razem z Windows Home Server).

    Bartek Szafko

  • Instalator w pliku msi część 3

    W poprzednim artykule zbudowałem podstawowy instalator w MSI za pomocą Windows Installer Xml. Jego wygląd pozostawiał bardzo wiele od życzenia – nie wyświetlał nic oprócz nudnego progress bara, a użytkownik nie miał możliwości np wyboru folderu docelowego.

    W tym poście dodam interfejs użytkownika pozwalający na wybór typu instalacji, ustawienie folderu docelowego oraz wybór feature. Dodatkowo przy ponownym uruchomieniu zainstalowanego już produktu pojawi się okienko dające nam możliwość usunięcia, naprawienia albo zmiany parametrów instalacji.

    WiX domyślnie zawiera mechanizmy pozwalające na szybkie dodanie interefejsu użytkownika. Biblioteka WiXUiExtension.dll  zawiera skompilowane skrypty wxs definiujące okna dialogowe. Nawiasem mówiąc podczas mojej prezentacji w Krakowie wywiązała się ciekawa dyskusja na temat czy jest to natywna biblioteka czy nie. Okazuje się że jest to assembly .netowe i w resourcach umieszczona jest skompilowana biblioteka wixlib, która jest dołączana do wynikowego instalatora.

    Żeby wzbogacić instalatora z poprzedniego artykułu należy najpierw dodać referencje do WixUiExtension.dll:

    wixcz0301

    wixcz0302

    Jedyne, co tak naprawdę musimy dodać to element UIRef:

    1. <UIRef Id="WixUI_Mondo"/>  

    Wix wspiera parę rodzajow interfejsów użytkownika:

    • WixUI_Mondo – pełny interfejs z możliwością określenia rodzaju instalacji(pełna, domyślna, użytkownika), określeniem foldru docelowego(jeśli na to zezwoliśmy)
    • WixUI_FeatureTree – pozwala na wybór feature
    • WixUI_InstallDir – pozwalający tylko na wybór docelowego folderu
    • WixUI_Minimal – tylko zgoda na licencje oprogramowania

    Ostatecznie zmodyfkownay skrypt jest poniżej zwróć uwagę na ustawienia codepage oraz language:

    1. <?xml version="1.0" encoding="windows-1250"?>  
    2.   <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">  
    3.   
    4.     <Product Id="5c899cab-095c-4f4e-a57e-9b03dc4cd322" Name="WixDemo2" Language="1045" Codepage="1250" Version="1.0.0.0"   
    5.   
    6.            Manufacturer="WixDemo2" UpgradeCode="994dbe73-b654-482d-8dfd-3dcdc54d0f30">  
    7.   
    8.         <Package InstallerVersion="200" Compressed="yes" />  
    9.   
    10.         <Media Id="1" Cabinet="WixDemo2.cab" EmbedCab="yes" />  
    11.   
    12.         <Directory Id="TARGETDIR" Name="SourceDir">  
    13.   
    14.             <Directory Id="ProgramFilesFolder">  
    15.   
    16.                 <Directory Id="INSTALLLOCATION" Name="WixDemo2">                                        <Component Id="ProductComponent" Guid="53f6485a-8034-4022-9386-ca83dbe3cc07">  
    17.   
    18.             <File Id="Exe" Source="..\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.exe"/>  
    19.   
    20.                     </Component>  
    21.   
    22.                 </Directory>  
    23.   
    24.             </Directory>  
    25.   
    26.         </Directory>  
    27.   
    28.         <Feature Id="ProductFeature" Title="WixDemo2" Level="1" ConfigurableDirectory="INSTALLLOCATION">  
    29.   
    30.             <ComponentRef Id="ProductComponent" />  
    31.   
    32.         </Feature>  
    33.   
    34.     <UIRef Id="WixUI_Mondo"/>  
    35.   
    36.     </Product>  
    37.   
    38. </Wix>  

    Warto też skorzystać z ustawień projektu i zmienić domyślny język na pl-PL będziemy wtedy mieli instalator po polsku. Na szczęście WiX zawiera domyślnie polskie lokalizacje więc nie  musimy się martwić o tłumaczenie:

    wixcz0303

    Po tych operacjach instalator będzie miał interfejs i polskie teksty, jak to wygląda można zobaczyć na filmie:


    wix część 3 - user interface from bartek szafko on Vimeo.



    Bartek Szafko
  • XII spotkanie pg.net - prism + ironpython

    pozdotnet_logo

    Na XII spotkaniu już za tydzień w czwartek 29.10 będziemy gościć Szymona Kobalczyka, który specjalnie przyjedzie do Poznania żeby opowiedzieć o budowaniu Composite Applications w WPF (określanego również kodową nazwą PRISM) - zapowiada się bardzo ciekawie. Już od dawna chciałem wypróbować jak buduje się composite applications, więc mam nadzieję, że to mi da dodatkowego kopa ;)

    Druga prelekcja Aleksandra Sumowskiego będzie dotyczyć IronPythona - czyli implementacji pythona w oparciu o dynamic language runtime. Szczerze mówiąc o pythonie wiem niewiele więc z zainteresowaniem posłucham. Aleksander pracuje w firmie Cognifide, która użycza nam lokalu do spotkań.

    Gorąco zapraszam do rejestracji - tym razem wystarczy tylko mieć konto na msgroups.pl.

    kgd_logo_male_jpg

    W środę natomiast będzie można mnie zobaczyć na 40. spotkaniu krakowskiej grupy .net. Będę odpracowywał wizytę Szymona  :) Tym razem będę miał przyjemność pokazać w jaki sposób zbudować natywne instalatory dla windows za pomocą Windows Installer Xml. Prawie cały weekend rezerwuje na przygotowanie demówek, a chce ich zmieścić jak najwięcej w ciągu godziny. Jeszcze nie zdecydowałem, ale chyba pójdę za przykładem Bartka Pampucha i przygotuje filmy -  to naprawdę oszczędza czas!

     spotkaniebig

    A już w sobotę barcamp, na który się wybieram, może tylko będę lekko spóźniony od rana spalam rogale świętomarcińskie na zapas ;) jeśli będzie okazja chętnie podyskutuje o blogowaniu i finansowaniu blogowania.

    Oj dzieje się ostatnio...

    Bartek Szafko

    opublikowano 22 października 2008 23:20 przez bszafko | 0 komentarzy
    Filed under:
  • Po MTS 2008

    Na blogach już jest bardzo dużo relacji po MTSowych:

    Z którymi mogę się podpisać obiema rękami.

    Speaker Idol

    Zdecydowanie fajnie jest występować przed publicznością. Prezentacje faktycznie były dosyć interesujące, jednak trzeba było poświęcić chwilę na przygotowanie się - czas był niestety nieubłagany, czego sam doświadczyłem. Dla wszystkich należą się ogromne brawa za odwagę!

    Jeśli chodzi o występ na zamykającej sesji generalnej zasłużone zwycięstwo Kuby, prezentacja “by the book” zgodnie ze wszystkimi arkanami sztuki - ciekawe o czym będzie opowiadał na następnym MTS ( za 2??? lata).

    Dla mnie było to zdecydowanie fajne przeżycie - zawsze można wyciągnąć pewne wnioski na przyszłość.

    Pozwoliłem sobie nagrywać komórką przekaz na żywo - na qiku, nie pisałem o tym wcześniej, nie wiedziałem co z tego wyjdzie i czy wogóle będzie sięgać wi-fi. Jakość filmów jest bardzo niska, do dźwięku też mam spore zastrzeżenia, ale co tam i tak opublikuje:

    http://qik.com/bszafko

    Udostępniam też moją prezentację, może się komuś przyda:

    Speaker Idol Asp .Net Mvc
    View SlideShare presentation or Upload your own.

    W realu

    Bardzo miło było spotkać w realu ludzi, których zna się tylko z blogów. Sorry jeśli kogoś nie poznałem, ale powiązanie twarzy z urlem czasem przychodzi trudno ;)

    Bartek Szafko

    opublikowano 12 października 2008 11:51 przez bszafko | 5 komentarzy
    Filed under:
  • MSBuild Community Tasks - wszystko czego brakuje w MSBuild

    http://msbuildtasks.tigris.org/ to ciekawy projekt dodający  taski do msbuilda pozwalające wykonywać naprawdę interesujące rzeczy podczas budowania projektów i co dla mnie najważniejsze bez dużego nakładu pracy. Taski, które szczególnie zwróciły moją uwagę to: Bartek Szafko
    opublikowano 28 września 2008 20:37 przez bszafko | 0 komentarzy
    Filed under:
  • Instalator w pliku msi część 2

    Po krótkim wstępie teoretycznym w poprzednim artykule w tej części pokażę jak stworzyć swój pierwszy(prosty;)) instalator za pomocą Windows Installer XML.

    Po zainstalowaniu Wixa np stąd w Visual Studio pojawi się nowy typ projektu(jeśli używasz jeszcze wersji 2005 nie zapomnij o ProjectAgregator.msi, a najlepiej przerzuć się na 2008):



    W tym momencie posłużę się typem Wix Project.

    Domyślnie projekt zawiera tylko jeden plik WixProject.wxs:
    <?xml version="1.0" encoding="UTF-8"?>
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
            <Product Id="b9351b34-7683-4640-8fdf-dc34c12c3fa1"
                 Name="PUT-PRODUCT-NAME-HERE"
                 Language="1033"
                 Version="1.0.0.0"
                 Manufacturer="PUT-COMPANY-NAME-HERE"
                 UpgradeCode="077c926e-d3f7-40dd-a6cf-5c5cc82893f2">
            <Package InstallerVersion="200" Compressed="yes" />
    
            <Media Id="1" Cabinet="WixProject.cab" EmbedCab="yes" />
    
            <Directory Id="TARGETDIR" Name="SourceDir">
                <Directory Id="ProgramFilesFolder">
                    <Directory Id="INSTALLLOCATION" Name="PUT-APPLICATION-DIRECTORY-HERE">
    
                        <Component Id="ProductComponent" Guid="ee728cb7-f2b3-41d0-9ea5-59ebf659f8d2">
                            <!-- TODO: Insert your files, registry keys, and other resources here. -->
                        </Component>
    
                    </Directory>
                </Directory>
            </Directory>
    
            <Feature Id="ProductFeature" Title="PUT-FEATURE-TITLE-HERE" Level="1">
                <ComponentRef Id="ProductComponent" />
            </Feature>
        </Product>
    </Wix>

    XmlNs

    Warto zwrócić uwagę na namespace, ponieważ pozwala szybko określić czy skrypt został utworzony dla wersji 3.0 (http://schemas.microsoft.com/wix/2006/wi), czy 2.0 (http://schemas.microsoft.com/wix/2003/01/wi).

    Element Product

    Atrybuty wpisane w tym elemencie zapisywane są w tabeli Property i służą do identyfikowania instalatorów. Niektóre są wymagane:
    • Id - unikalny identyfikator instalatora, dla każdej wersji powinien być inny; odpowiada wartości o nazwie ProductCode z tabeli Property
    • Name - nazwa produktu, po prostu jakiś string opisujący Twoją aplikację odpowiada ProductName
    • Language - język, w którym zbudowany jest instalator; jest to kod LCID języka, domyślna wartość to 1033 czyli język angielski; to pole ma znaczenie przy tworzeniu lokalizowanych instalatorów (o tym później); odpowiada ProductLanguage
    • Version - znany z .net symbol wersji w formacie major.minor.build.revision, ciekawostką, jest że .revision jest pomijane; odpowiada ProductVersion
    • Manufacturer - producent oprogramowania, albo twoje imię i nazwisko; odpowiada Manufacturer(tak samo)
    • UpgradeCode - po tym guidzie wyszukiwane są produkty do podniesienia wersji; jeśli tworzysz wiele instalatorów dla różnych wersji i chcesz żeby bezproblemowo można było dokonać upgradu to trzeba pamiętać, że ten GUID powinien pozostać stały. Zapobiega to wielokrotnemu pojawianiu się elementów w Dodaj/Usuń programy w panelu sterowania

    Element Package

    Wymagane są tylko 2 pola:
    • InstallerVersion - określa wersje wymaganego WindowsInstallera zgodnie z wzorem: major*100 + minor
    • Compressed - określa czy pliki zawarte w instalatorze mają podlegać kompresji
    Reszta pól jest dziedziczona z elementu Product. Cała zawartość elementu Package ląduje w strumieniu Summary Information, który może być odczytywany bezpośrednie z windows explorera.

    Element Media

    Pozwala na podanie zbioru zawierającego instalowane pliki(atrybut Cabinet) i podania czy wejdzie w skład instalatora(EmbedCab). Jeśli nie podamy żadnego z tych elementów instalator nie będzie zawierał plików źródłowych, trzeba je będzie normalnie skopiować do lokalizacji pliku .msi, ale tego byśmy raczej nie chcieli ;)

    Element(y) Directory

    Służą do określenia struktury folderów, w której ma zostać zainstalowana aplikacja. Poszczególne zagnieżdżenia pokazują jak foldery są tworzone w głąb. Pierwszy wpis( TARGETDIR, SourceDir) jest wirtualny i służy do definiowania korzenia struktury folderów. W atrybucie ID podaje się nazwę właściwości (pisana w WiX dużymi literami), która może być później używana w innych miejscach w instalatorze. Istnieją predefiniowane wartości parametru ID pozwalające na odwołanie się do standardowych lokalizacji:ProgramFilesFolder, ProgramMenuFolder, DesktopFolder. Pełna lista znajduje się tutaj. Atrybut Id często jest używany do odwołań w innych miejscach, więc należy zadbać żeby był unikalny.

    Warto stosować spójny system wartości ID w całym skrypcie np.: wszystkie katalogi nazywać D_NAZWAFOLDERU.

    Zalecana struktura folderów to "/Program Files/Firma/Produkt", chociaż w praktyce spotyka się "/Program Files/Firma Produkt".

    Element(y) Component

    Zagnieżdżony w elemencie Directory. To kluczowy element skryptu Wix i najczęstsze źródło błędów podczas instalacji. Komponent jest najmniejszym zestawem "rzeczy", które mogą zostać zainstalowane: plików, skrótów, rejestrów. W skrypcie może istnieć wiele komponentów, najważniejsze żeby były niezależne:
    • w 2 komponentach nie mogą być zawarte te same pliki w tych samych lokalizacjach
    • odinstalowanie komponentu, nie powinno zostawiać żadnych śmieci,
    • odinstalowanie komponentu nie może mieć wpływu na inne komponenty
    Komponenty to klocki z których składami konkretne funkcjonalności, czyli działającą aplikację. Jeden komponent powinien zawierać elementy, które tworzą wspólną całość. Komponenty mogą być współdzielone przez funkcjonalności np.: gdy mamy 2 aplikacje, które obie korzystają z narzędzia do raportowania (np CrystalReports) i wymagają odpowiednich zarejestrowanych bibliotek.

    Oczywiście należy zwrócić uwagę na nazewnictwo - pole Id musi być unikalne, ale w miarę proste do użycia w innych miejscach. Ja stosuję nazewnictwo typy C_NazwaKomponentu. Pole Guid musi być unikalne.

    Przykładowa zawartość komponentu może wyglądać tak:
    <Component Id="C_GlownaAplikacja" Guid="ac45b2d6-7e95-487f-a2e2-f56877f16076">
      <File Id="DetalExe" Name="Detal.exe" Source="$(var.Sln.Path)\Detal\bin\$(var.Conf)\Detal.exe" />
      <File Id="DetalExeConfig" Name="Detal.exe.config" Source="$(var.Sln.Path)\Detal\bin\$(var.Conf)\Detal.exe.config" />
    </Component>
    Spowoduje to zainstalowanie 2 plików, przy okazji użyłem zmiennych preprocesora, ale w celach testowych można spokojnie hardcodować ścieżki.

    Element Feature

    Pozwala operować na wyższym poziomie i spiąć komponenty w funkcjonalności(feature). Funkcjonalność to jest to co użytkownik będzie miał dostępne do wyboru podczas instalacji ( o ile będziemy mieli wogóle UI;) ) W atrybucie Title wpisujemy przyjazną nazwę jak np.: aplikacja Detal.

    Jako dzieci używamy elementów ComponentRef, które zainstalują odpowiednie komponenty.

    Instalator

    Omówione elementy to podstawy WiXa z ich pomocą można stworzyć podstawowy instalator Na przykład taki:
    <?xml version="1.0" encoding="UTF-8"?>
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    	<Product Id="bda85c5c-a6bb-4212-a213-9fe00ba2d7c4"
               Name="Moja aplikacja" Language="1033" Version="1.0.0.0"
               Manufacturer="bartekszafko.pl" UpgradeCode="6f2d912a-9409-433b-bd5f-bf82ad362291">
    		<Package InstallerVersion="200" Compressed="yes" />
    
    		<Media Id="1" Cabinet="WixProject1.cab" EmbedCab="yes" />
    
    		<Directory Id="TARGETDIR" Name="SourceDir">
    			<Directory Id="ProgramFilesFolder">
    				<Directory Id="INSTALLLOCATION" Name="Moja aplikacja">
    					<Component Id="C_MojaAplikacja" Guid="45eee2b7-829c-457b-ab37-ce957f56d1a6">
                <File Id="F_WindowsFormsApplication1" Name="WindowsFormsApplication1.exe"
                      Source="..\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.exe" />
              </Component>
    				</Directory>
    			</Directory>
    		</Directory>
    
    		<Feature Id="ProductFeature" Title="Moja aplikacja" Level="1">
    			<ComponentRef Id="C_MojaAplikacja" />
    		</Feature>
    	</Product>
    </Wix>
    Jako tip: warto dodać do projektu WiX właściwą aplikację jako referencje lub ustawić odpowiedni build order, wtedy zawsze będzie pakować się najnowsza wersja aplikacji. Po uruchomieniu tak przygotownego pliku .msi będdziemy mogli zobaczyć znajome okienko:



    A po wejściu do "Dodaj/usun programy" będzie można usunąć aplikację.

  • Carpool na ZineDay 2008 z Poznania

    6 września(sobota) wybieram się na ZineDay 2008 .

    Mam jeszcze 3 wolne miejsca w samochodzie.

    Wyjazd w okolicach 5:30 powrót około 21. Zapraszam do kontaktu.

    Update: Jadę z Poznania.

    Bartek Szafko
    opublikowano 2 września 2008 21:09 przez bszafko | 0 komentarzy
    Filed under:
Więcej wypowiedzi Następna strona »
W oparciu o Community Server (Personal Edition), Telligent Systems