2011-11-08 17 views
2

私は現在取り組んでいるプロジェクトのためにC#のインストールと設定アプリケーションを開発しています。すべてを内部的に整理する最良の方法はなんですか?インストーラウィザードの構造

要件:

  • 展開のための単一の実行、それにバンドルされていない他のファイル。
  • 最後に生成されたXML設定ファイルに寄与する、各パネルでカスタム設定ステップをサポートしなければなりません。
  • インストーラフロー内の特定の選択に基づいて、特定の手順をスキップすることができます。
  • 私のライブラリの1つのクラスからフィードバックされた情報に基づいて動的な設定画面をサポートしなければなりません。パネル・コントロールの束と

    • 大きなフォーム、ウィザードの各代表する一つの「画面」:

    は、ここに私のプロトタイプの説明です。それぞれの名前は適切です。

  • 私が定義した基底型から派生した各 "スクリーン"のクラス。特定のイベントが発生した場合、具体的な方法(例:EnterBackForward)を呼び出します。
  • 状態はDictionary<string,object>として保存され、各画面に渡されます。最後の画面(実際の "インストール中"画面)は、これから設定を読み込み、XMLファイルにダンプします。
  • 各画面のコードは「次へ」および「前へ」ボタンの操作を担当しているため、現在の画面の設定に基づいてどこにジャンプするかを制御できます。
  • 私のライブラリにはいくつかのモジュールが保存されており、必要な追加の設定手順についての情報が提供されています。私は反映と自動化されたUI生成を通じてこれを実装しています。
  • アセットは、実行可能ファイルのリソースに格納されます。

ロジックが完全にカスタムであり、自分のクラスライブラリの1つを呼び出しているため、InstallShieldなどの汎用インストーラパッケージを使用したくありません。私が知りたいのは、私はこれを本当に控え目な方法で設定していますか?ウィザードスタイルのアプリケーションには、より簡単で標準的な方法がありますか?

+0

InstallShield、WiX、NSIS - これらのインストーラはすべてカスタムライブラリを呼び出すことができます。また、カスタムのインストール手順やあなたが持つ可能性のある狂ったロジックも処理できます。 –

答えて

4

ここで短い答えです:それはカスタムインストールUIとダイナミックなXMLファイルの両方をサポートしているので

商用ツールは、あなたが必要なものに最適です。それ以外のものは、多くの学習と労力が必要です。

と長い説明:

カスタムインストールUIは簡単な作業ではありません。 Windowsインストーラにはダイアログとコントロールが組み込まれているので、通常は最適なソリューションです。独自のインストールエンジンを試すこともできますが、それを学ぶ必要があります。

また、カスタムコードとクラスですべてを制御しようとすると、誤ったアプローチをとっています。ほとんどのセットアップオーサリングツールは、インストールUIとXMLファイルの処理を直接サポートしています。なぜホイールを改革しようとしますか?

基本的には、セットアップオーサリングツールを見つける必要があります。一般的なリストは次のとおりです。 http://en.wikipedia.org/wiki/List_of_installation_software

ツールはMSIベースまたはプロプライエタリのいずれかです。個人的に私はWindows Installer(MSIパッケージ)を好みます。

カスタムコードですべてのタスクを実装しようとするのは価値がありません。

-1

展開用に1つの実行可能ファイルがあり、他のファイルはバンドルされていません。

あなたにいくつかの関心のこのかもしれない:http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx

+0

私は全然望んでいない。私は簡単にリソース内のDLLをバンドルし、libを私のインストーラプロジェクトのバイナリにilmergeすることができます。これは問題ありません。私が興味を持っているのは、インストーラウィザードの実際のアーキテクチャと、それを設定する最良の方法です。 – Polynomial

0

のInstallShieldまたはMSIインストーラを使用してください。真剣に。ジェネリックインストーラウィザードは、あらゆる種類のカスタムロジック(指定したコードを含む)をサポートできることに加えて、プログラムや機能でインストールされたアプリケーションの一覧表示や修復インストールの実行など、考えていないことも実行します/アンインストールします。

あなたが見ているカスタムロジックのレベルでは、私は最新のInstallShieldインストーラビルダーをフォークアウトします。 VSインストールプロジェクトはかなり単純なダイアログセットになっています。

EDIT:十分に公正で、前にその位置にいました。

上記の理由から、VSのインストールプロジェクトのような一般的なインストーラツールを使用することを強くお勧めします。インストールパッケージは、あなたのデザインであなたが考えていないものを行い、あなたはそれをすべて無料で入手します。

XML設定ファイルをインストーラにカスタマイズする代わりに、インストール後にアプリケーションを起動したときにユーザーに表示される「実行時」構成ウィザードとして、実行可能ファイルに配置する方法はありますか?実際のアプリケーションもWinFormsのアプリケーションであればうまくいくはずです(そうでない場合でもコンフィグレータを別のアプリケーションにコンパイルし、メインアプリケーションを起動させることができますXMLファイルがない場合はコンフィギュレータ)。

+0

残念ながら、私の予算はこれでゼロです。InstallShieldと他のものは、そのコストでは非常に高価です。 – Polynomial

1

Windowsにソフトウェアをインストールする唯一の正しい方法は、ターゲットプラットフォームであると私はWindows Installerを使用しています。ビットシンプル化Windowsインストーラは、トランザクション方法でシステムに追加または削除できるインストールパッケージ(データベースファイル)の概念に基づいています。

独自のインストールロジックを作成した場合、ソフトウェアインストールのトランザクション処理に参加することはできません。アンインストーラが削除された場合、ユーザーはソフトウェアをアンインストールできません。また、Windowsインストーラは、あなたが気づいていないかもしれないWindowsの癖についてたくさん知っています。

Windowsインストーラはパッケージを作成するために幾分cryptic APIを提供しますが、非常に強力なオープンソースWiX toolsetまたはInstallShieldのような商用インストーラを使用することもできます。

可能であれば、カスタムインストーラーを避けるようにWindowsインストーラーの方法を検討してください。カスタムアクションは、カスタムインストーラと同じ "トランザクションロールバック"問題を抱えています。カスタムアクションのロールバック/アンインストールのコードをDLLに作成し、そのDLLが失われた場合、Windowsインストーラがカスタムアクションを元に戻すことはできません。

Windowsインストーラは実際には非常に強力です。あなたはあなたがする必要がある "カスタムのもの"についての特定の情報を与えられていないが、おそらくWindowsインストーラはそれのためのテーブルを持っていますか?

+0

"カスタムのもの"は、基本的にリフレクションを使用して、自分のライブラリ内の特定の基本クラスから派生したクラスをリストし、それぞれのカスタム設定ステップを呼び出します。ユーザは、特別なconfig.xmlファイルを生成するために使用される構成に関する質問(Apacheインストーラ/コンフィギュレータの動作方法など)を提示する必要があります。このファイルには、自動生成された(しかし、特定のジョブの情報。問題は、ジェネリックインストーラが私に本当のカスタムUIを提供する能力を与えないということです。インストールされているすべてのサービスが一覧表示されます。 – Polynomial

+0

インストーラではなく設定ツールを作成しようとしているようですね。それが本当であれば私は本当にそれが本当に適用されないので私の答えを削除する必要があります。 –

+0

それは両方です。構成はインストール時に行う必要があります。 – Polynomial