ソースコードがないインストーラーがあります。このインストーラーを「ラップ」するか、編集してさらにいくつかのファイルを追加する必要があります。これを行うための最良の方法は何ですか?タイトルが示すように、インストーラーはゴーストインストーラーで書かれました。
1 に答える
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 イベントが発生するのを待つ必要はありません。このイベント待機は、「インストール後」のロジックを実行するためのものです。
頑張ってください。これがお役に立てば幸いです。