2009-07-09 13 views
1

私にはソースコードがないインストーラがあります。私はこのインストーラを "ラップ"するか、それを編集していくつかのファイルを追加する必要があります。これを行う最善の方法は何ですか?タイトルに記載されているように、インストーラはghost installerで書かれています。ghost-installerで作成されたインストーラをリバースエンジニアリングするにはどうすればよいですか?

答えて

2

MSIではないので、Orca to edit the installer itselfは使用できません。私はMSIインストーラの前にcustom install actionsと書いています。

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

<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> 

この意志:あなたは同じようにVisual Studioが前提条件がインストールされていることを確認しない管理対象外のブートストラップを作成したい場合は、すべての

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

このブートストラップもまた、 "CustomInstallerExecutable.exe"が管理対象言語ではなく.NETで記述できるように、クライアントに.NET 2.0 Frameworkが必須であることを確認します。実際、このMSBuildスクリプトは、(ComponentsLocation属性の相対的な値のため)新しく作成したブートストラップの横に.NET 2.0 Frameworkインストーラを表示します。 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を呼び出すことが非常によく似た何かをすることができると思います。この.NET実行可能ファイルをGhostインストーラよりも前に実行している場合は、Ghostインストーラプロセスを起動して「CustomInstallerExecutable.exe」プロセスを終了し、process.Exitedイベントが発生するまで待つことができます。このイベント待機は、「インストール後」ロジックを実行するためにより多くなります。

幸運にもこれは役に立ちます。

関連する問題