Zine.net online

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

Bartek Szafko

  • 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:
  • ASP .NET MVC Preview 5 - po cichu

    Dzisiaj, bez większych fanfarów, pojawił się preview 5 ASP .NET MVC.

    Tak na szybki ogląd release notes widać, że _WRESZCZIE_ dodano obsługę RenderPartial.

    Chociaż muszę przyznać, że dodany AJAX mi się nie podoba (przynajmniej na podstawie paru tutoriali, które widziałem), nadal wolę jQuery.

    Dodano też obsługę własnych binderów do atrybutu ModelBinder, co akurat cieszy.

    Release na codeplex i pełna lista zmian, niestety na razie bez source'ów.

    Jest jeszcze forum na którym można wylewać swoje żale ;)

    Bartek Szafko
    opublikowano 29 sierpnia 2008 13:02 przez bszafko | 2 komentarzy
    Filed under:
  • A to mój harmonogram na MTS 2008

    Michał był pierwszy :)

    Część z naszego wyboru się pokrywa:

    Środa

    07:30 - 09:30 Rejestracja
    09:30 - 11:00 Sesja generalna (otwierająca)
    11:00 - 11:20 Przerwa kawowa
    11:20 - 12:35 Wydajne aplikacje ASP.NET w świecie Web 2.0 Tymoteusz Chmielewski
    12:35 - 13:35 Lunch
    13:35 - 14:50 Praktyczne aspekty budowania rozwiazań klasy Enterprise z wykorzystaniem produktów Microsoft Patterns and Practices Marcin Sieradzki
    14:50 - 15:10 Przerwa kawowa
    15:10 - 16:25 .NET bez wizardów ? sposoby tworzenia i dynamicznego aktywowania komponentów w aplikacjach Bartosz Pampuch
    16:25 - 16:45 Przerwa kawowa
    16:45 - 18:00 TFS - praktyka Bartosz Celmer

    Czwartek

    07:30 - 09:00 Rejestracja
    09:00 - 10:15 Bezpieczeństwo serwisów WWW ? praktyczne uwagi o implementacji zaleceń DBTI ABW w ASP.NET Zbigniew Łapiński
    10:15 - 10:35 Przerwa kawowa
    10:35 - 11:50 Integrating Windows Presentation Foundation and Windows Communication Foundation into Your Office Business
    Applications Tim Huckaby 11:50 - 12:50 Lunch
    12:50 - 14:05 Build great software with Rosario tools Michael Juřek
    14:05 - 14:25 Przerwa kawowa
    14:25 - 15:40 Testy w Microsoft Visual Studio Team System 2008 Artur Jedynak
    15:40 - 16:00 Sesja generalna (zamykająca)

    Niestety sesja Bartka Pampucha koliduje z równie ciekawą sesją Szymona Kobalczyka o aplikacjach biznesowych w WPF :( mam nadzieję, że będzie można zobaczyć materiały wideo,  a ja oprócz tego wysyłam na nią swoich szpiegów ;)

    Co mi przypomina, że nadal nie zarezerwowałem hotelu :(
    opublikowano 19 sierpnia 2008 20:38 przez bszafko | 2 komentarzy
    Filed under:
  • Instalator w pliku msi część 1

    Zapomniane instalki

    Bardzo ważnym aspektem, każdej tworzonej aplikacji desktopowej jest instalacja. Ta część często bywa zaniedbywana przez twórców oprogramowania, a jej rola jest nie do przecenienia. Potencjalny klient szybko się zniechęca gdy nie może uruchomić, a co dopiero zainstalować aplikację. Tymczasem developerzy myślą raczej w kategoriach tworzenia aplikacji a zapewnienie prostej i powtarzalnej instalacji w ogóle nie jest umieszczane na liście funkcjonalności.

    Narzędzia

    Istnieje całkiem spora liczba narzędzi pozwalających zająć się tym problemem, spora część z nich jest komercyjna i raczej nadaje się do projektów ze sporymi budżetami. Pierwsze co przychodzi na myśl to Installshield - jest to naprawdę profesjonalne narzędzie mające wielu zwolenników, nie ma co się dziwić jest już na rynku sporo czasu.

    Windows Installer XML

    2 lata temu, gdy szukałem sensownej (również pod względem finansowym) metody zbudowania setupu dla małej aplikacji udało mi się znaleźć WiX (Windows Installer Xml). Wtedy było naprawdę trudno go znaleźć - zajęło mi to naprawdę sporo. Dla mojego projektu instalator tworzony przez visual studio 2005 w ogóle nie zdawał egzaminu. Po pierwsze instalacja była dostępna tylko po angielsku, a po drugie nie można było definiować bardziej zaawansowanych operacji ( można była wykorzystać custom action w .net, ale nie działały za dobrze).

    Mało kto wie, że WiX jest pierwszym projektem open source wydanym prze Microsoft, dzięki sporemu zaangażowaniu Roba Menschinga. Narzędzie okazało się na tyle użyteczne, że również zespoły z wewnątrz MS zaczęły go używać.

    WiX pozwala na podstawie stosunkowo prostych plików XML stworzyć pliki .msi, czyli popularne instalatory Windowsowe. WiX obsługuje praktycznie wszystko co można znaleźć w specyfikacji MSI, uwzględnia wszystkie nowinki związane z Vistą i wersją 4.0 Windows Installera. To co dla mnie okazało się szczególnie fajne to integracja z Visual Studio za pomocą wtyczki Votive.

    WiX - wersje

    W tej chwili dostępne są 2 wersje Wixa 2.0 i 3.0. Pierwsza jest uważana za stabilną, ale osobiście polecam używanie 3.0, która zawiera najnowsze funkcjonalności. Co prawda czasem zdarzają się z nią małe problemy, ale z reguły upgrade załatwia sprawę.

    Pliki .msi

    Sam plik .msi jest bazą danych, w środku zawarte są są tabele, które z kolei mają kolumny i wiersze. Można nawet na nich wykonywać proste zapytania. Istnieje fajne narzędzie - Orca, które pozwala na podglądanie i edycję zawartości plików - w sam raz dla prawdziwych eksperymentatorów. Linki:
    • Windows Installer Xml - strona główna projektu
    • WixWiki - niezłe źródło informacji
    • dzięki temu feedowi zawsze będziesz na bieżąco z Wix
    • a stąd możesz ściągnąć najaktualniejsze wersje
    • podcast - wywiad z Robem, w którym opowiada o początkach WiX
    • Orca - oficjalnie dostępna jako część windows sdk, ale w sieci można znaleźć też "luźnego" exeka
    W następnym poście pokaże jak w prosty sposób zrobić instalatora w MSI.

    Bartek Szafko
  • ASP .NET MVC Preview 4 już w tym tygodniu

    Na blogu Scotta Guthrie ukazała się notatka, że już w tym tygodniu można spodziewać się następnej wersji preview ASP .NET MVC. Post zawiera również pierwszą część opisu zmian, które raczej nie dotyczą przysłowiowych bebechów, tylko nowych funkcjonalności. Muszę przyznać, że czytając posta miałem lekkie deja-vu.

    To o czym pisze Scott to:
    • Atrybut HandleError - obsługa błędów opdowiednik Rescue z MvcContrib
    • Atrybut OutputCaheFilter - cachowanie wyników akcji, podobne propozycje można było znaleźć na wielu blogach
    • Atrybut Authorize - zabezpiecznie wywołania akcji tylko dla określonych, zalogowanych lub posiadających określoną rolę użytkowników. Zamiast tego z powodzeniem można użyć standardowego .netowego PrincipalPermissionAttribute
    • AccountController - czyli domyślny kontroler generowany z szablonem aplikacji realizujący logowanie, rejestrację i przypominanie hasła. Taką funkcję do tej pory pełnił MvcMembership , szkoda tylko że nie ma wsparcia dla Cardspace, ale widać że pewnie inna grupa się tym zajmuje
    • TempData - będzie można testować bez mockowania


    Jak widać zespół postarał się, żeby dodać wszystko czego brakowało w pudełku z MVC.

    Scott ma w następnym poście napisać o możliwościach użycia AJAXa, ciekaw jestem jak to im wyszło.

    Bartek Szafko
    opublikowano 14 lipca 2008 18:53 przez bszafko | 20 komentarzy
    Filed under:
Więcej wypowiedzi Następna strona »
W oparciu o Community Server (Personal Edition), Telligent Systems