WixでVSPackageのインストールパッケージを作成する

34188 ワード

VSPackageを作成したら、どのようにパッケージしてリリースしますか?実はいろいろなパッケージがありますが、ここではVS 2008でWixでVPackageを作るインストーラだけを紹介します.まず、Wix toolset(http://wix.codeplex.com/)をダウンロードしてインストールします.
テスト用のVSPackageの作成
テスト用にVSPackageプロジェクトを新規作成します.インストール後の効果を示すために、ウィザードにMenu Commandを追加することを忘れないでください.
Wixプロジェクトの作成
次の図に示すように、プロジェクトタイプ選択Wix-』Wixプロジェクトを新規作成します.
aa
完了したソリューションの表示は次のとおりです.
image
VSPackageを登録するためのwxsファイルを生成
VSPackageを使用するには、レジストリに情報を追加する必要があります.regpkgというコマンドを使用して、これらの情報をwxsファイルに生成するのに役立ちます.
まずPackageプロジェクトをコンパイルし、VS 2008 SDKのコマンドラインでPackageのbindebugディレクトリに移動し、次の文を実行します.
regpkg /wixfile:VSPackage1.wxs /codebase "<full-path>\VSPackage1.dll"

ここで、は、E:VSPackageInstallerVSPackage 1bindebugなどのPackageプログラムセットが存在するディレクトリの全パスを表します.
このコマンドが正常に実行されると、同じディレクトリの下にVSPackage 1が生成されます.wxsのファイルは、VSPackageInstallerプロジェクトの下に追加する必要があります.なお、追加後、このファイルのBuild Actionのデフォルトはコンパイル(Compile)であり、このVSPackage 1のため、コンテンツ(Content)に変更する必要があります.wsxファイルはメインProductに含める必要がある.wsxでは、Productをコンパイルする.wsxの時にコンパイルします.次の図を示します.
image
 
インストールロジックの追加
まずVSPackageInstallerプロジェクトにWixUIExtensionを追加します.dllの参照は、次の図のようになります.
image
その後、VSPackageInstallerプロジェクトの下のProductを変更します.wxsは:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="4981e388-4c5f-4d7d-bc29-11fedb49ebea" Name="VSPackageInstaller" Language="1033" Version="1.0.0.0" Manufacturer="VSPackageInstaller" UpgradeCode="0b0867f6-f86e-4c0a-aa57-ddb1fe4165df">
        <Package InstallerVersion="200" Compressed="yes" />
 
        <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />
 
    <!--  VS2008 devenv.exe  -->
    <Property Id="DEVENV_EXE_PATH">
      <RegistrySearch Id="RegSearch_DevenvExe_Path" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\9.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
    </Property>
    
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="INSTALLLOCATION" Name="VSPackageInstaller">
                     <Component Id="ProductComponent" Guid="42a95449-0cc2-4045-a9e1-b2f4296a376a">
             <!--     -->
             <File Id="VSPackage1"
                   Source="$(var.SolutionDir)\VSPackage1\bin\debug\VSPackage1.dll" />
             <!--          -->
             <?include VSPackage1.wxs ?>
                     </Component> 
                </Directory>
            </Directory>
        </Directory>
 
        <Feature Id="ProductFeature" Title="VSPackageInstaller" Level="1">
             <ComponentRef Id="ProductComponent" /> 
        </Feature>
 
    <Property Id="WIXUI_INSTALLDIR" Value="INSTALLLOCATION" />
    <UI>
      <UIRef Id="WixUI_InstallDir" />      
    </UI>
    <InstallExecuteSequence>
      <Custom Action="CA_DeployPackage" Before="InstallFinalize" />
    </InstallExecuteSequence>
 
    <!--  devenv /setup /nosetupvstemplates,    Package   vs2008 -->
    <CustomAction Id="CA_DeployPackage" Property="DEVENV_EXE_PATH" ExeCommand="/setup /nosetupvstemplates" Impersonate="no" Execute="deferred" />
 
  </Product>
</Wix>

修正前に比べて、私たちは主にProductにいます.wxsには次のような内容が追加されています.
  • レジストリを検索し、vs 2008のdevenvを取り出す.Exceプログラムのパス
  • VSPackage.dllターゲットディレクトリ
  • にコピー
  • レジストリ情報(VSPackage 1.wxs)を
  • に含める
  • devenvを実行します.exe/setup/nosetupvstemplates(我々のテストPackageにはVSTomplateがないため、/nosetupvstemplatesパラメータを加えて速度を向上させた)
  • Productを修正します.wxsの後、VSPackage 1を修正する必要があります.wxsファイルの次の行:
    <Registry Name="CodeBase" Value="[#File_VSPackage1.dll]" Type="string" />

    次のように変更します.
    <Registry Name="CodeBase" Value="[#VSPackage1]" Type="string" />

    つまりCodeBaseのValueを
    <File Id="VSPackage1" Source="$(var.SolutionDir)\VSPackage1\bin\debug\VSPackage1.dll" />

    に表示されます.
    インストールパッケージのテスト
    ここまで、私たちのインストールパッケージはもう使えます.VSPackageInstallerプロジェクトをコンパイルし、VSPackageInstallerを実行します.msi、インストールインタフェースが出ているのが見えます.
    image
    インストールに成功したら、VSを再起動し、ツールメニューをクリックすると、Packageがインストールされていることがわかります.
    image
    このインストーラを再実行すると、Packageをアンインストールできます.
    インストールパッケージの改良
    インストールパッケージは使用できますが、いくつかの問題があります.
  • 英語の
  • です
  • ユーザーがVS 2008をインストールしていない場合、インストーラは
  • とエラーを報告します.
  • インストール時、licenseダイアログ
  • が表示されたくない
  • devenvを実行する.exe/setup/nosetupvstemplatesでは時間がかかりますが、インストーラには
  • のプロンプトはありません.
    中国語にするには、中国語のwxlファイルをダウンロードし、埋め込まれたリソースとしてVSPackageInstallerプロジェクトに追加する必要があります.その後、Productを変更します.wxsファイルは、ProductノードのLanguageを1033から2052に変更し、CodePage="936"のプロパティを追加します.その後、VSPackageInstallerのプロジェクト属性を変更し、Buildページチェックで「Cultures to build」をzh-cnに変更します.以下の図です.
    image
    VSPackageInstallerプロジェクトを再コンパイルすると、bindebugzh-cnディレクトリの下に新しくコンパイルされたmsiが見つかります.
    インストール時のlicenseダイアログボックスを削除するには、Product.wsxのUIノードの下に次の内容を追加します.
    <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="InstallDirDlg" Order="2">1</Publish>
    <Publish Dialog="InstallDirDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="2">1</Publish>

    devenvを実行したい場合は.exe/setup/nosetupvstemplatesの場合、インストーラはUIノードの下でProgressTextを指定する必要があるプロンプトを表示します.
    <ProgressText Action="CA_DeployPackage">
          Visual Studio 2008...(      )
    </ProgressText>

    インストール時にクライアントにVS 2008がインストールされているかどうかを判断するには、次のようなConditionを指定する必要があります.
    <Condition Message="[ProductName]      Visual Studio 2008 ,      Visual Studio 2008。">DEVENV_EXE_PATH</Condition>

    ここのDEVENV_EXE_PATHは私たちが検索したdevenvです.exeのパスは、ここでは、このパスが空であるか否かを判断することによってVS 2008がインストールされているか否かを決定する.
    最終的なプロジェクトwsxの内容は以下の通りです.
    <?xml version="1.0" encoding="UTF-8"?>
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
        <Product Id="4981e388-4c5f-4d7d-bc29-11fedb49ebea" Name="VSPackage1" Language="2052" Codepage="936" Version="1.0.0.0" Manufacturer="VSPackage1" UpgradeCode="0b0867f6-f86e-4c0a-aa57-ddb1fe4165df">
            <Package InstallerVersion="200" Compressed="yes" />
     
            <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />
     
        <!--  VS2008 devenv.exe  -->
        <Property Id="DEVENV_EXE_PATH">
          <RegistrySearch Id="RegSearch_DevenvExe_Path" Root="HKLM" Key="SOFTWARE\Microsoft\VisualStudio\9.0\Setup\VS" Name="EnvironmentPath" Type="raw" />
        </Property>
        <!-- Launch conditions -->
        <Condition Message="           [ProductName]    。">Privileged</Condition>
        <Condition Message="[ProductName]      Visual Studio 2008 ,      Visual Studio 2008。">DEVENV_EXE_PATH</Condition>
        
            <Directory Id="TARGETDIR" Name="SourceDir">
                <Directory Id="ProgramFilesFolder">
                    <Directory Id="INSTALLLOCATION" Name="VSPackageInstaller">
                         <Component Id="ProductComponent" Guid="42a95449-0cc2-4045-a9e1-b2f4296a376a">
                 <!--     -->
                 <File Id="VSPackage1"
                       Source="$(var.SolutionDir)\VSPackage1\bin\debug\VSPackage1.dll" />
                 <!--          -->
                 <?include VSPackage1.wxs ?>
                         </Component> 
                    </Directory>
                </Directory>
            </Directory>
     
            <Feature Id="ProductFeature" Title="VSPackageInstaller" Level="1">
                 <ComponentRef Id="ProductComponent" /> 
            </Feature>
     
        <Property Id="WIXUI_INSTALLDIR" Value="INSTALLLOCATION" />
        <UI>
          <UIRef Id="WixUI_InstallDir" />
          <!-- skip licence dialog -->
          <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="InstallDirDlg" Order="2">1</Publish>
          <Publish Dialog="InstallDirDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="2">1</Publish>
          <ProgressText Action="CA_DeployPackage">
                Visual Studio 2008...(      )
          </ProgressText>
        </UI>
        <InstallExecuteSequence>
          <Custom Action="CA_DeployPackage" Before="InstallFinalize" />
        </InstallExecuteSequence>
     
        <!--  devenv /setup /nosetupvstemplates,    Package   vs2008 -->
        <CustomAction Id="CA_DeployPackage" Property="DEVENV_EXE_PATH" ExeCommand="/setup /nosetupvstemplates" Impersonate="no" Execute="deferred" />
     
      </Product>
    </Wix>

    最終的な効果は次のとおりです.
    image
     
    ソースダウンロード:VSPackageInstaller.rar 中国語のwxlファイル