- PR -

インストーラプロジェクトでのサービスを含む修復セットアップについて

1
投稿者投稿内容
HIRO
常連さん
会議室デビュー日: 2004/10/28
投稿数: 41
投稿日時: 2007-03-28 14:15
インストーラプロジェクトにてWindowsサービスのセットアップを行っています。

カスタム動作(インストール・確定・ロールバック・アンインストール)のすべての項目に該当サービスを登録し、インストール・アンインストールは問題なく実行できますが、修復セットアップを実行した際に「指定されたサービスは既に開始されています。」が表示され修復セットアップが失敗します。
この際、対象のサービスが一つだった場合は問題ないのですが、複数のサービスをカスタム動作に登録している場合、修復セットアップ失敗時にロールバックが実行され一つのサービス以外すべて削除されてしまいます。こうなってしまうと、削除もできなくなってしまうため、レジストリエディタにて対象のサービスを削除し、再起動→修復セットアップ→削除の手順を踏まなければうまく削除できませんでした。

カスタム動作のロールバックからサービスをすべて削除してしまえば、修復セットアップが失敗してもサービスがすべて残った状態になり削除も問題なくできますが、実際のインストール時に何らかのエラーでインストールが失敗した場合、サービスが残った状態となります。

修復セットアップを無効にできればいいのですが・・・

サービスプログラムを含むインストーラにて修復セットアップはどのように設定すればよいのでしょうか?

VS.NET 2003 SP1
WindowsXP Prp SP2
とっちゃん
大ベテラン
会議室デビュー日: 2005/07/19
投稿数: 203
投稿日時: 2007-03-28 15:56
カスタム動作は、VSセットアッププロジェクトのインストーラクラスのカスタム動作でしょうか?
だとすると、おそらくはセットアッププロジェクトの暗黙的な制約の一つではないかと思われます。

WindowsInstaller 的にはサービスの登録などは、コードで行うのではなく、ServiceInstall , ServiceControl などのテーブルを利用して事前に登録情報を設定しておいて自動的に書き込みするように設定されるのがしかるべき姿とされています。
#ただし、この方法は、VSセットアッププロジェクトではサポートされていません。

こちらであれば、複数のサービスであろうが依存関係があろうが、きちんと設定されるようになっていますが、VSのカスタム動作は互いのオブジェクト間の依存関係や複数動くことによる副作用などがなにも考慮されていないため、事実上1つしか用意できないという、矛盾を抱えています。

平たく言ってしまえば、VSセットアップで行うにはインストーラの規模が大きすぎるということです。

どうしてもVSセットアッププロジェクトでなければ困るということであれば、ORCAなどでちくちくテーブルに追記していくか、WiX あるいは、InstallShield(Not Express)に乗り換えるかのどちらかになるかとおもいます。

解決策ではなくて申し訳ありませんが、VSセットアップの機能は、本当にわずかしかありません。
サービスを2つも3つもという大きなプロジェクト(そもそもサービスがあるというだけでも十分大きなプロジェクトなんですけどね<インストーラ的にはw)をまかなうということであればやはり本格的なインストーラ作成ツールの利用を検討することをお勧めします。
_________________
// とっちゃん(高萩 俊行)@わんくま同盟
// とっちゃん’Blog
// MS-MVP for Developer Tools - Visual C++
// WindowsInstallerの話題はhttp://www.freeml.com/msiまで
HIRO
常連さん
会議室デビュー日: 2004/10/28
投稿数: 41
投稿日時: 2007-03-28 17:41
とっちゃんさん回答ありがとうございます。

引用:
カスタム動作は、VSセットアッププロジェクトのインストーラクラスのカスタム動作でしょうか?
だとすると、おそらくはセットアッププロジェクトの暗黙的な制約の一つではないかと思われます。



やはりそうですか。いまの段階ではVSセットアップでは設定しようがないのでORCAでちまちまやってたんですけど、いまいちいい案がでなくて・・・


引用:
WiX あるいは、InstallShield(Not Express)に乗り換えるかのどちらかになるかとおもいます。



Wixで乗り換えを考えてみます。ちなみに以前とっちゃんさんが連載されていた記事を読んだことがありその時に乗り換えを考えてはいたのですが、なかなか時間がとれなくてそのままになっていました。

お答いただきありがとうございました。



とっちゃん
大ベテラン
会議室デビュー日: 2005/07/19
投稿数: 203
投稿日時: 2007-03-28 18:15
複数のインストーラクラスを使ってはいけないとは書かれていませんが、使ってもいいとも書かれてないんですよねw

なので、そのあたりが暗黙的な制約を何か持っているのだろうと類推できる所以でもあります。<VSに限らずインストーラ回りは思いのほかいい加減な実装が多い...(--;

引用:

Wixで乗り換えを考えてみます。ちなみに以前とっちゃんさんが連載されていた記事を読んだことがありその時に乗り換えを考えてはいたのですが、なかなか時間がとれなくてそのままになっていました。


私の連載は本当にさわりの部分しか扱ってないので本気で取り組むのであれば、MSI-MLもご参照ください。

連載への質問なども受け付けておりますw
#もちろん、codezine でもOKですww
_________________
// とっちゃん(高萩 俊行)@わんくま同盟
// とっちゃん’Blog
// MS-MVP for Developer Tools - Visual C++
// WindowsInstallerの話題はhttp://www.freeml.com/msiまで
brave-ulysses
会議室デビュー日: 2007/04/06
投稿数: 2
投稿日時: 2007-04-09 08:28
VS2005で確認してみましたが、どうもサービス1つだけでも同様に修復セットアップが正常に動かないようです。こりゃ、完全にバグですね。
WIXに逃げるでも良いんですが、MSに文句のひとつも言っておかないと。
とっちゃん
大ベテラン
会議室デビュー日: 2005/07/19
投稿数: 203
投稿日時: 2007-04-09 12:00
Install以外の3つのグループにも全部処理コード入れてますか?

結構複雑ですよ>VSのカスタム動作の内部ロジックw

で、まぁバグだとして(おいらは確認してないので詳細不明ですw)、
日本語での一応の窓口は
http://forums.microsoft.com/MSDN-JA/ShowForum.aspx?ForumID=183&SiteID=7
となっています。
中の人は見てる「はず」ですが、MSサイドからのフィードバックがないんで、正直不明...orz

英語で、フィードバックできる場合は、http://connect.microsofot.com/ からもフィードバック可能です。
こちらは、仮に日本語であっても見てはくれます。
ただし、日本語の場合、読めないから受け付けられないといって弾かれますけどねw
#もちろん返答は英語w
_________________
// とっちゃん(高萩 俊行)@わんくま同盟
// とっちゃん’Blog
// MS-MVP for Developer Tools - Visual C++
// WindowsInstallerの話題はhttp://www.freeml.com/msiまで
brave-ulysses
会議室デビュー日: 2007/04/06
投稿数: 2
投稿日時: 2007-04-09 17:09
カスタム動作のインストール/確定/ロールバック/アンインストールのすべてにプライマリ出力を設定してます。
http://msdn2.microsoft.com/ja-jp/library/zt39148a(VS.80).aspx
の手順に寸分たがわず従ってますが、だめです。VSはVisual Studio 2005 Professional Edition Version 8.0.50727.762。MSにレポートしておきます。

Microsoft Connectionを見てみましたが、
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=108195
にexeを消すとrepairが動かんというのが出てますが、っていうことは消さないと動くのか?

どなたか、上記のMSDNのチュートリアルの手順で追試していただけませんか?
1

スキルアップ/キャリアアップ(JOB@IT)