1

ソースコードがないインストーラーがあります。このインストーラーを「ラップ」するか、編集してさらにいくつかのファイルを追加する必要があります。これを行うための最良の方法は何ですか?タイトルが示すように、インストーラーはゴーストインストーラーで書かれました。

4

1 に答える 1

2

MSI ではないため、Orca を使用してインストーラー自体を編集することはできません。また、以前にも MSI インストーラー用のカスタム インストール アクションを作成したことがあります。

Ghost インストーラーを (もしあれば) あまり制御できないため、インストーラーの前または後に実行できるカスタム実行可能ファイルを作成して、インストーラーを補足することをお勧めします。これにより、顧客に配布する追加のファイルがいくつか作成されますが、全体を zip アーカイブとして配布できます。

まず、前提条件がインストールされていることを確認するために Visual Studio と同じ方法でアンマネージ ブートストラップを作成する場合は、次のようなスクリプトを使用して MSBuild を使用して作成できます。

<Project ToolsVersion="3.5" DefaultTargets="BuildBootstrapper" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <ItemGroup>
    <BootstrapperFile Include="Microsoft.Net.Framework.2.0">
      <ProductName>Microsoft .NET Framework 2.0</ProductName>
    </BootstrapperFile>
  </ItemGroup>

  <Target Name="BuildBootstrapper">
    <GenerateBootstrapper
      ApplicationFile="CustomInstallerExecutable.exe"
      ApplicationName="Pretty Title of Application Goes Here"
      BootstrapperItems="@(BootstrapperFile)"
      ComponentsLocation="Relative" />
  </Target>

</Project>

これにより、インストーラーのブートストラップの事実上のファイル名である「setup.exe」が生成されます。実際、ユーザーが誤ってブートストラッパーをスキップして直接インストーラーに移動しないようにしたい場合は、Ghost インストーラーを「bin」フォルダーまたは zip アーカイブのルートから離れた場所に隠すことができます。そうすれば、唯一の直感的なオプションは「setup.exe」です。顧客のために非常に明確にする必要がある場合は、「README.txt」も含めてください。

このブートストラッパーが行うことは、"CustomInstallerExecutable.exe" をアンマネージ言語ではなく .NET で記述できるように、前提条件としてクライアントに .NET 2.0 Framework があることを確認することです。実際、この MSBuild スクリプトは、新しく作成したブートストラップのすぐ横に .NET 2.0 Framework インストーラーを配置します ("ComponentsLocation" 属性の "Relative" 値のため)。Ghost インストーラーのダウンロードの元のダウンロード サイズが顧客に対して肥大化することを懸念している場合は、代わりにユーザーが Web 経由で .NET Framework を取得しやすくするために使用できる他の属性値があります。

これで、「CustomInstallerExecutable.exe」(美しく管理された C# で記述) は、Ghost インストーラーを実行する前 (または実行した後) に余分なファイルをマシンにドロップできます。以前に、.NET 実行可能ファイルから MSI を実行するコードをいくつか書きました。

string msiString = "blahBlah.msi";

// Kick off Update installer
ProcessStartInfo startInfo = new ProcessStartInfo(
    "cmd.exe",
    "/c start /wait msiexec.exe /i " + msiString);
startInfo.WorkingDirectory = "bin";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;

Process process = new Process
{
    StartInfo = startInfo,
    EnableRaisingEvents = true
};
process.Exited += new EventHandler(process_Exited);

process.Start();

MSI の代わりに Ghost Installer を呼び出すのと非常によく似たことができると思います。Ghost インストーラーの前にこの .NET 実行可能ファイルを実行している場合は、Ghost インストーラー プロセスを呼び出してから、"CustomInstallerExecutable.exe" プロセスを終了し、process.Exited イベントが発生するのを待つ必要はありません。このイベント待機は、「インストール後」のロジックを実行するためのものです。

頑張ってください。これがお役に立てば幸いです。

于 2009-07-13T20:30:04.737 に答える