3

インストールの前提条件を持つアプリケーションの .msi パッケージを作成しています。このタスクには Visual Studio 2005 Bootstrapper を使用しています。この目的のために、私は次のことを行いました: フォルダー C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\ を見つけ、前提条件用のフォルダーを作成しました (「dotnetfx」と同じ構造にしました)。 ; 「product.xml」と「package.xml」を作成し、適切に配置しました。インストールをテストするために、これまでxmlファイルを非常に単純に保ちました。

product.xml

<?xml version="1.0" encoding="utf-8"?>
<Product ProductCode="MyPrereq" xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper">
  <PackageFiles CopyAllPackageFiles="false">
    <PackageFile Name="MyPrereq.exe" />
  </PackageFiles>
  <InstallChecks>
  </InstallChecks>
  <Commands Reboot="None">
    <Command PackageFile="MyPrereq.exe" EstimatedInstallSeconds="90">
      <InstallConditions>
      </InstallConditions>
      <ExitCodes>
    <ExitCode Value="0" Result="Success"/>
        <DefaultExitCode Result="Fail" String="GeneralFailure" FormatMessageFromSystem="true" />
      </ExitCodes>
    </Command>
  </Commands>
</Product>

package.xml

<?xml version="1.0" encoding="utf-8"?>
<Package Name="MyPrereq" Culture="Culture" xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper">
  <Strings>
    <String Name="Culture">en</String>
    <String Name="DisplayName">MyPrereq</String>
    <String Name="GeneralFailure">A fatal error occurred. The installation failed.</String>
  </Strings>
</Package>

これで、リストから前提条件を追加して、セットアップ プロジェクトをビルドできます。

問題:

ビルド出力は、「setup.exe」、「MyApp.msi」パッケージ、および「MyPrereq.exe」を含む「MyPrereq」というサブフォルダーです。

ビルドで 'setup.exe' と 1 つの 'MyApp.msi' を作成したいと思います。この中に 'MyPrereq' が含まれ、追加のファイル/ディレクトリはありません。

.NET フレームワークが私のアプリのもう 1 つの前提条件であり、同じ .msi に含まれていることはわかっています。

どうすればこれを達成できますか?

4

2 に答える 2

4

単一の実行可能ファイルにすべてのファイルを含む IExpress (Windows に付属) などのツールを使用して、自己解凍型インストーラーを作成できます (この SO 投稿を参照)。

MSI ファイルに独自の前提条件をインストールすることはできません。1 つ目は、Windows インストーラー自体が前提条件であり (MSI 以外の exe によってインストールする必要がある)、2 つ目は、Windows インストーラーのインストールがトランザクションであり、MSI ファイルの連鎖実行をサポートしていないためです。これは基本的に、1 つの MSI インストールが別の MSI インストールを開始できないことを意味します。結果として、前提条件は別のブートストラッパーによってインストールする必要があります (ちなみに、インストールはもはやトランザクションではありません。MSI のインストールが失敗した場合、前提条件はアンインストールされません)。

ただし、ブートストラップのメカニズムについては基本的な誤解があるようです。ブートストラップは現在、Visual Studio または MSBuild によってのみ生成できます。Afaik WiXでは不可能です。MSBuild で GenerateBootstrapper タスクを探します (この SO 投稿を参照してください)。

于 2009-02-19T22:59:39.310 に答える
3

私はなんとかIExpressでそれを行うことができました。

ただし、ここで説明する小さなトリックを使用する必要があり ました。VSシェルアプリケーションのブートストラッパーの作成

残念ながら、MSBuildタスクには、ターゲットディレクトリにある前提条件インストーラーを構成リソースに使用させるオプションがないため、適切なリソースファイルを手動で更新して、サブディレクトリで前提条件を探すハードコードされたパスを削除する必要があります。同じ名前の。

  • VisualStudioのリソースエディターでSetup.exeプログラムを開きます
  • 41フォルダー内のSETUPCFGという名前のリソースをダブルクリックします
  • 「VsShell」文字列を検索し、表示される2つのオカレンスを削除します
  • リソースファイルを保存すると、Setup.exe実行可能ファイルが自動的に更新されます
  • iexpressを実行します
  • IExpressウィザードの手順に従って新しいパッケージを作成し、次のファイルを必ず含めてください。
  • MyVSShellApplication.msiファイル
  • Setup.exeブートストラップファイル
  • vs_shell_isolated.enu.exeファイル

  • 問題は、ブートストラッパーが前提条件をサブフォルダーに入れ、IExpressがサブフォルダーを認識しないことでした。'setup.exe'を編集する際にも注意する必要がありますが、最初の試行では正しく取得されませんでした。

    于 2009-02-20T02:58:21.983 に答える