Wix 打包工具


0 序言

  前一段時間微軟禁止使用盜版軟件,於是把Visual Studio、Office及Installshield等盜版軟件卸載了,換上了免費的版本。VS有免費的社區版,Office有WPS可代替,唯獨 Installshield 沒有找到合適的替代者(個人用慣了Installshield所以不考慮nsis等),於是把目光轉向Wix工具集

  Wix(Windows Installer XML)是微軟提供的一套免費的打包工具集,功能十分強大,但是體驗不太好——需要自己編寫 Product.wxs 文件。用戶需要閱讀Wix的xml文件規范,然后根據個人需要添加相應的模塊到Product.wxs文件中。

  對於程序開發者而言閱讀文檔不是難事,難就難在要不厭其煩的做同樣的事情。就拿添加文件來舉例:wxs文件中,添加文件需要經歷三步:

第一步,創建文件目錄結構

 
         
<!-- Step 1: Define the directory structure -->
<DirectoryId="TARGETDIR"Name="SourceDir">
    <DirectoryId="ProgramFilesFolder">
        <DirectoryId="APPLICATIONROOTDIRECTORY"Name="My Application Name"/>
    </Directory>
</Directory>

第二步,添加文件到目錄中

<!-- Step 2: Add files to your installer package -->
<DirectoryRef Id="APPLICATIONROOTDIRECTORY">
    <Component Id="myapplication.exe" Guid="PUT-GUID-HERE">
        <File Id="myapplication.exe" Source="MySourceFiles\MyApplication.exe" KeyPath="yes" Checksum="yes"/>
    </Component>
    <Component Id="documentation.html" Guid="PUT-GUID-HERE">
        <File Id="documentation.html" Source="MySourceFiles\documentation.html" KeyPath="yes"/>
    </Component>
</DirectoryRef>

第三部,告知wix安裝

<!-- Step 3: Tell WiX to install the files -->
<Feature Id="MainApplication" Title="Main Application" Level="1">
    <ComponentRef Id="myapplication.exe" />
    <ComponentRef Id="documentation.html" />
</Feature>

  由此可見,如果要添加多個文件,工作量可想而知。為此有一個國外的開發者專門編寫了一套開源的WixEdit的軟件,該軟件提供了一套UI供用戶編輯與編譯wxs文件,但是后來他覺得編寫這個軟件花費了他太多的時間(大概是6個月的樣子),因此沒有維護了。我個人也下載了這個軟件,總體下來體驗不太好,主要有以下幾點:

首先,對最新的Wix 3.x工具集支持不是很好。WixEdit 使用的是老的wix格式;

其次,軟件操作有些繁瑣。添加文件時,容易卡死。且沒有提供模板修改文件屬性,用戶需要對每個文件的屬性進行編輯;

最后,需要編輯的地方太多。對於緊需要基本模塊的用戶而言不太友好。

  當然,WixEidt的功能還是很完善的,Wix文檔里邊描述的模塊幾乎都可以通過UI操作添加到wxs文件中。但個人不太喜歡用這種功能全但體驗不好的軟件,於是決定自己編寫一款簡單的wxs文件編輯器軟件——WixFileEditor。

1 WixFileEditor 軟件簡介

  WixFileEditor 是一款針對Wix setup工程文件 Product.wxs 的編輯器,其只提供簡單的編輯功能,不提供編譯功能(編譯需要在Visual Studio IDE中完成)。

  WixFileEditor包含三大模塊:產品、文件與安裝,軟件自動添加快捷方式、注冊表信息及卸載操作功能代碼。考慮到簡單性原則,本軟件只提供基本的打包工作,用戶若要使用安裝界面設置等高級功能,可自行對Product.wxs文件進行修改以滿足各自的需求。

  下面對軟件進行一個簡單的介紹,詳細介紹可參見軟件的用戶手冊(下載軟件后的幫助文檔):

1.1 產品信息

  產品信息提供了產品名稱、版本、公司、ID及平台的編輯,如圖1所示。

 

                圖1 WixFileEditor軟件的產品模塊

1.2 文件

  文件提供 ProgramFilesFolder、AppDataFolder、PersonalFolder、CommonAppDataFolder、CommonFilesFolder及LocalAppDataFolder 6個系統目錄,用戶可以往里邊添加安裝文件與文件夾。

 

                 圖2 WixFileEditor軟件文件模塊

1.3 安裝

  添加完文件(包含可執行文件與圖標)后,在“安裝”標簽頁的“可執行文件”與“圖標”組合框中選擇相應的文件名,還可以勾選“安裝后運行”復選框實現當軟件安裝完畢后運行的效果。

 

                   圖3 WixFileEditor 安裝模塊

   當完成以上3部后,點擊保存就完成了Product.wxs文件的編輯工作,可以利用Visual Studio 工具編譯生成安裝包了,是不是很簡單呢。

WixFileEditor 生成的Product.wxs文件模板如下:

<?xml version="1.0"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="5385DB4F-662F-4E88-95D5-F0664F59BD88" Name="MyProduct" Codepage="1252" Language="2052" Version="1.0.0" Manufacturer="MyCompany" UpgradeCode="0A657DFC-BBDA-46D6-B225-EFBD13F00EA8">
        <!-- <?Abbreviation ?> -->
        <Package Keywords="Installer" Platform="x86" InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
        <MajorUpgrade DowngradeErrorMessage="A newer version of MyProduct is already installed." />
        <MediaTemplate EmbedCab="yes" />
        <Feature Id="ProductFeature" Title="MyProduct_setup" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
        </Feature>
        <Icon Id="WINDOWS.ICO" SourceFile="E:\workspace\WixFileEditor\bin\resources\icons\wix.ico" />
        <Property Id="ARPPRODUCTICON" Value="WINDOWS.ICO" />
        <Property Id="WIXUI_INSTALLDIR" Value="WIX_0" />
        <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1" />
        <UI>
            <UIRef Id="WixUI_InstallDir" />
            <Publish Dialog="ExitDialog" Control="Finish" Event="DoAction" Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
        </UI>
        <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="運行 MyProduct" />
        <Property Id="WixShellExecTarget" Value="[#WIX_1]" />
        <CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" />
    </Product>
    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="WIX_3" Name="MyCompany">
                    <Directory Id="WIX_0" Name="MyProduct">
                        <Directory Id="WIX_4" Name="resources">
                            <Directory Id="WIX_5" Name="doc" />
                            <Directory Id="WIX_7" Name="icons" />
                            <Directory Id="WIX_9" Name="images" />
                            <Directory Id="WIX_11" Name="internat">
                                <Directory Id="WIX_12" Name="zh_CN" />
                            </Directory>
                        </Directory>
                    </Directory>
                </Directory>
            </Directory>
            <Directory Id="ProgramMenuFolder">
                <Directory Id="ApplicationProgramsFolder" Name="MyProduct" />
            </Directory>
            <Directory Id="DesktopFolder" Name="Desktop" />
        </Directory>
    </Fragment>
    <Fragment>
        <ComponentGroup Id="ProductComponents">
            <Component Id="WIX_6" Directory="WIX_5" Guid="EA78BFE3-0E37-4220-BF59-E484EC39E6FA">
                <File Id="WIX_6" Source="E:\workspace\WixFileEditor\bin\resources\doc\help.chm" ProcessorArchitecture="x86" KeyPath="yes" />
            </Component>
            <Component Id="WIX_8" Directory="WIX_7" Guid="3D126CBA-840B-411B-BD55-516EA95B49A0">
                <File Id="WIX_8" Source="E:\workspace\WixFileEditor\bin\resources\icons\wix.ico" ProcessorArchitecture="x86" KeyPath="yes" />
            </Component>
            <Component Id="WIX_10" Directory="WIX_9" Guid="82A12587-0630-4BF7-8C0F-4EDE928AF083">
                <File Id="WIX_10" Source="E:\workspace\WixFileEditor\bin\resources\images\wix.bmp" ProcessorArchitecture="x86" KeyPath="yes" />
            </Component>
            <Component Id="WIX_13" Directory="WIX_12" Guid="574FDF31-CEED-4CE7-AC10-896B19449904">
                <File Id="WIX_13" Source="E:\workspace\WixFileEditor\bin\resources\internat\zh_CN\WixFileEditor.mo" ProcessorArchitecture="x86" KeyPath="yes" />
            </Component>
            <Component Id="WIX_1" Directory="WIX_0" Guid="2EC6FF4C-ECC2-4F01-BF1F-6D5473788A51">
                <File Id="WIX_1" Source="E:\workspace\WixFileEditor\bin\WixFileEditor.exe" ProcessorArchitecture="x86" KeyPath="yes" />
            </Component>
            <Component Id="ApplicationShortcut" Directory="ApplicationProgramsFolder" Guid="05CA50FE-E71F-4C69-B0B7-171F4932EF51">
                <Shortcut Id="ApplicationStartMenuShortcut" Name="MyProduct" Description="MyProduct is a dispensing software" Target="[#WIX_1]" WorkingDirectory="APPLICATIONROOTDIRECTORY" />
                <Shortcut Id="UninstallProduct" Name="卸載 MyProduct" Target="[SystemFolder]msiexec.exe" Arguments="/x [ProductCode]" Description="MyProduct" />
                <Shortcut Id="DesktopShortcut" Directory="DesktopFolder" Name="MyProduct" Target="[#WIX_1]" WorkingDirectory="APPLICATIONROOTDIRECTORY" />
                <RemoveFolder Id="CleanUpShortCut" Directory="ApplicationProgramsFolder" On="uninstall" />
                <RegistryValue Root="HKCU" Key="Software\MyProduct" Name="installed" Type="integer" Value="1" KeyPath="yes" />
            </Component>
        </ComponentGroup>
    </Fragment>
</Wix>
Product.wxs

軟件的下載地址:https://download.csdn.net/download/lyyanziyu/14968464

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM