Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Allgemeines (OffTopic) » Programme verbreiten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
14.03.2007, 10:15 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Also, mittlerweile komme ich relativ gut mit WiX zu recht und werde es auch weiterhin verwenden. Ich schreib hier mal ein wenig darüber, für die, die es selbst noch nicht kennen.

WiX ist ein von Microsoft erstelltes Tool, was das .NET Framework verwenden. Es war das erste Open Source Projekt von M$ und steht unter der Common Public Licence. Es wird dazu genutzt, um MSI Packages aus XML Dateien zu erzeugen. Dazu wird der Kompiler (candle.exe) und der Linker (light.exe) benötigt.

Die ganze XML Struktur ist ziemlich verknüpft aufgebaut. Man kann <Directory> Nodes erzeugen, dieser Id's mitgeben und diese Id's dann später als Variablen verwenden. Es gibt auch einige vordefinierte Variablen, wie zum Beispiel ProgramMenuFolder (CDokumente und Einstellungen\$user\Startmenü\Programme), SystemFolder (CWINDOWS\system32) oder ProgrammFilesFolder (CProgramme). Diese nutze ich auch in meinem Beispiel. Um eine Datei mitzuliefern, muss man Unterhalb der Node <Directory> die Subnode <Component> einfügen. Diese enthällt dann eine weitere Node <File>, die den Namen, die Id und der Ort beinhaltet, wo man Sie findet. Sie wird dann in dem Ordner abgelegt, der mit <Directory> spezifiziert wurde.

Aber genug des ganzen. Die XML Datei, die ich hier kurz poste liefert ein Hello World programm mit QT4 aus. Dazu gehören ein paar Icon's, die QtCore4.dll, die QtGui4.dll und die mingwm10.dll. Die dll's werdem im system32 Ordner abgelegt und die exe in CProgramme\Hello World. Außerdem wird im Startmenu ein neuer Ordner Hello World angelegt, welcher eine Verknüpfung zu der .exe enthällt.

hello.wxs:

Code:
<?xml version='1.0'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2003/01/wi'>
    <Product Id='12345678-1234-1234-1234-123456789012' Name='Hello World' Language='1033'
        Version='1.0.0.0' Manufacturer='Microsoft Corporation'>
        <Package Id='12345678-1234-1234-1234-123456789012'
                Description='Windows Installer for QT Hello World'
            Comments='Sample MSI package for installing a Hello World programm, using QT'
            InstallerVersion='200' Compressed='yes' />

        <Media Id='1' Cabinet='product.cab' EmbedCab='yes' />

        <Directory Id='INSTALLDIR' Name='SourceDir'>
            <Directory Id='ProgramFilesFolder' Name='PFiles'>
                <Directory Id='MyDir' Name='HelloW' LongName='Hello World'>
                    <Component Id='ReadmeComponent' Guid='12345678-1234-1234-1234-123456789012'>
                        <File Id='hello' Name='hello.exe' LongName='hello.exe' DiskId='1' src='release/hello.exe'>
                            <Shortcut Id='Startmenu' Name='Hello' LongName='Hello World' Directory='MenuFolder' Icon='helloi'/>
                        </File>
                    </Component>
                </Directory>
            </Directory>
            <Directory Id='ProgramMenuFolder' Name='Menu'>
                <Directory Id='MenuFolder' Name='Hello' LongName='Hello World'/>
            </Directory>
            <Directory Id='SystemFolder'>
                <Component Id='QtCore4' Guid='12345678-1234-1234-1234-123456789013'>
                    <File Id='QtCore4.dll' Name='QtCore4.dll' DiskId='1' src='C:/Qt/4.2.2/bin/QtCore4.dll' />
                </Component>
                <Component Id='QtGui4' Guid='12345678-1234-1234-1234-123456789014'>
                    <File Id='QtGui4.dll' Name='QtGui4.dll' DiskId='1' src='C:/Qt/4.2.2/bin/QtGui4.dll' />
                </Component>
                <Component Id='mingwm10' Guid='12345678-1234-1234-1234-123456789015'>
                    <File Id='mingwm10.dll' Name='mingwm10.dll' DiskId='1' src='C:/Qt/4.2.2/bin/mingwm10.dll' />
                </Component>
            </Directory>
        </Directory>
        
        <Feature Id='Complete' Title='My 1st Feature' Display='expand' Level='1' ConfigurableDirectory='INSTALLDIR'>
            <Feature Id='MyFeature' Title='Programm' Level='1'>
                <ComponentRef Id='ReadmeComponent' />
            </Feature>
            
            <Feature Id='QtCoreFeature' Title='My Feature' Level='1'>
                <ComponentRef Id='QtCore4' />
            </Feature>
            
            <Feature Id='QtGuiFeature' Title='My GuiFeature' Level='1'>
                <ComponentRef Id='QtGui4' />
            </Feature>
            
            <Feature Id='mingwm10Feature' Title='My MinGWFeature' Level='1'>
                <ComponentRef Id='mingwm10' />
            </Feature>
        </Feature>
        <UIRef Id="WixUI_Mondo" />
        <Icon Id='helloi' SourceFile='delete.gif' />
    </Product>
</Wix>


Das <UIRef Id="WixUI_Mondo" /> bedeutet, das das komplette Packet von WixUI benötigt wird. Das wird mit WiX ausgeliefert und sorgt dafür, das man nicht jeden Button etc. selbst schreiben muss zum Verzeichniss auswählen etc. Das MSI package erstellt man mit

Code:
foo@bar ~> candle.exe hello.wxs
Microsoft (R) Windows Installer Xml Compiler version 2.0.4820.0
Copyright (C) Microsoft Corporation 2003. All rights reserved.

hello.wxs
foo@bar ~> light.exe -out hello.msi hello.wixobj wix/wixui.wixlib -loc wix/WixUI_en-us.wxl
Microsoft (R) Windows Installer Xml Linker version 2.0.4820.0
Copyright (C) Microsoft Corporation 2003. All rights reserved.

Nun haben wir eine lauffähige MSI Datei. Das -loc bedeutet, mit welchen Locales die MSI erstellt werden soll. Ich habe hier Englisch gewählt, weil bei der deutschen Datei (zumindest bei mir) die Umlaute nicht funktioniert haben.

Meiner Meinung nach ist WiX etwas, was man gut benutzen kann, um seine Programme zu verbreiten. Es ähnelt irgendwie Ant. Das einzige, was mich stört, ist die ewige angabe der GUID bei der XML Datei. Wenn man dies allerdings weglässt, schmeißt candle.exe eine Exception ...
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
15.03.2007, 22:24 Uhr
ao

(Operator)


Schönes Beispiel. Ich werd mir das Tool auch mal zu Gemüte führen. Der Name ist ja irgendwie misslungen, muss ich sagen

In der Firma hamwer wie gesagt WfWI, aber das ist kompliziert und an manchen Stellen auch "magisch", und auf sowas steh ich eigentlich nicht so. Wenn WiX da ne Alternative sein kann, solls mir recht sein.

Zitat von J-jayz-Z:
Das einzige, was mich stört, ist die ewige angabe der GUID bei der XML Datei. Wenn man dies allerdings weglässt, schmeißt candle.exe eine Exception ...

Meinst du die Product-, Package- und Component-IDs? Das ist schon OK mit der Exception. Die sind notwendig, damit der Windows Installer das MSI-Paket richtig abarbeiten kann.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ Allgemeines (OffTopic) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: