C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: 3つのプロジェクトを1つのインストーラとして作成について


(過去ログ 88 を表示中)

[トピック内 13 記事 (1 - 13 表示)]  << 0 >>

■52313 / inTopicNo.1)  3つのプロジェクトを1つのインストーラとして作成について
  
□投稿者/ レモン (1回)-(2010/08/05(Thu) 14:24:50)

分類:[インストーラ全般] 

開発環境:VB2005 WinXP SP3

初めまして。

VB2005のデプロイメントプロジェクトでインストーラを作成しています。
色々、ネット等調べさせてもらいましたが見当たらなかったので、こちらで質問させて頂きます。

題名の通りなのですが、現状A,B,Cというプロジェクトがあり、それぞれインストーラCDを作成しています。
それを1つのCDにまとめたいと思っております。

そこで質問です。

@現状、VB2005のデプロイメントプロジェクトでこのような事が可能でしょうか?
A@の事が可能だったとして、Aシステムの再インストールが発生した場合、B,Cのプロジェクト(システム)に対しては、インストーラが起動しないようにできるでしょうか?

以上、何か対応方法ありましたら宜しくお願い致します。

引用返信 編集キー/
■52314 / inTopicNo.2)  Re[1]: 3つのプロジェクトを1つのインストーラとして作成について
□投稿者/ 渋木宏明 (22回)-(2010/08/05(Thu) 14:59:55)
渋木宏明 さんの Web サイト
> (1)現状、VB2005のデプロイメントプロジェクトでこのような事が可能でしょうか?

可能です。

が、それをやると

> (2)(1)事が可能だったとして、Aシステムの再インストールが発生した場合、B,Cのプロジェクト(システム)に対しては、インストーラが起動しないようにできるでしょうか?

が、できません。

(2) が優先するなら、カスタムの setup.exe を作ったり、インストーラのランチャ(setup.exe もその1種と言えますが)を用意して対応します。

引用返信 編集キー/
■52316 / inTopicNo.3)  Re[2]: 3つのプロジェクトを1つのインストーラとして作成について
□投稿者/ レモン (2回)-(2010/08/05(Thu) 16:07:03)
No52314 (渋木宏明 さん) に返信

渋木宏明 さんご回答ありがとうございます。

>>(1)現状、VB2005のデプロイメントプロジェクトでこのような事が可能でしょうか?
>
> 可能です。

実際、やるとしたらどのような方法で作成するのでしょうか?
デプロイメントプロジェクト内のファイルシステム(アプリケーションフォルダ)の管理がいまいちわかりません。
3つ作成できるのでしょうか?

Aに関しましては、@を作成してみて考えたいと思います。最悪はご指摘通り、カスタムセットアップ等を検討してみます。

もう一点質問なのですが、フリーソフトのオートラン機能を使用しているのですが、これを使用してCD内に3つのシステムのセットアップを作成し、INIファイルのようなものからEXEファイル等の有無を確認して、セットアップを起動する事は可能でしょうか?
こちらが、カスタムセットアップとかになるのですかね。(汗)

度々で申し訳ございませんがよろしくお願い致します。

引用返信 編集キー/
■52326 / inTopicNo.4)  Re[3]: 3つのプロジェクトを1つのインストーラとして作成について
□投稿者/ 渋木宏明 (23回)-(2010/08/06(Fri) 02:41:57)
渋木宏明 さんの Web サイト
2010/08/06(Fri) 04:03:15 編集(投稿者)

>(2)に関しましては、@を作成してみて考えたいと思います。

本当に大丈夫ですか?

1つのインストーラにまとめてしまったら、A, B, C を個別にアンインストールすることはできません。

アンインストールを実行したら、全部まとめてアンインストールされることになります。

> 実際、やるとしたらどのような方法で作成するのでしょうか?

A, B, C を1つのソリューションに登録して、その結果を単一のインストーラプロジェクトに取り込めばいいです。

> デプロイメントプロジェクト内のファイルシステム(アプリケーションフォルダ)の管理がいまいちわかりません。
> 3つ作成できるのでしょうか?

やればできる、レベルです。

A, B, C のビルド結果を取り込む際に「xxxプロジェクトのビルド結果を取り込む(画面上の文言は多少異なるかもしれません)」ではなく、A, B, C プロジェクトのビルド結果を直接ファイル指定で取り込めば、A, B, C それぞれの構成ファイルを好きなところに配置できます。

インストーラプロジェクトの想定から少しずれた利用になので、手間がかかるのは仕方ありません。

> もう一点質問なのですが、フリーソフトのオートラン機能を使用しているのですが、これを使用してCD内に3つのシステムのセットアップを作成し、INIファイルのようなものからEXEファイル等の有無を確認して、セットアップを起動する事は可能でしょうか?

その「フリーソフトのオートラン機能」がどんなものか分からないので何とも。

setup.exe が行っているような事前チェックまで含めて、ということだと、.ini ファイルによるマイグレーション程度では実現できないような気もしますが。
引用返信 編集キー/
■52333 / inTopicNo.5)  Re[4]: 3つのプロジェクトを1つのインストーラとして作成について
□投稿者/ レモン (3回)-(2010/08/06(Fri) 09:04:14)
No52326 (渋木宏明 さん) に返信
> 2010/08/06(Fri) 04:03:15 編集(投稿者)

渋木宏明 さんご回答ありがとうございます。

> 1つのインストーラにまとめてしまったら、A, B, C を個別にアンインストールすることはできません。
> アンインストールを実行したら、全部まとめてアンインストールされることになります。

そうなってしまうんですか…最初に回答頂いた事は、この事だったのですね。

> A, B, C を1つのソリューションに登録して、その結果を単一のインストーラプロジェクトに取り込めばいいです。

> A, B, C のビルド結果を取り込む際に「xxxプロジェクトのビルド結果を取り込む(画面上の文言は多少異なるかもしれません)」ではなく、A, B, C プロジェクトのビルド結果を直接ファイル指定で取り込めば、A, B, C それぞれの構成ファイルを好きなところに配置できます。

試してみます。上の件があるのでユーザー自身でセットアップを任意に選択してもらうか、従来通り3枚配布になりそうです。

> その「フリーソフトのオートラン機能」がどんなものか分からないので何とも。
> setup.exe が行っているような事前チェックまで含めて、ということだと、.ini ファイルによるマイグレーション程度では実現できないような気もしますが。

やはりそうですか、何か判断してできるかなとも思っていましたが…もう少しこちらは、調べて検討したいと思います。

渋木宏明さん この度は丁寧なご回答ありがとうございました。


解決済み
引用返信 編集キー/
■52336 / inTopicNo.6)  Re[5]: 3つのプロジェクトを1つのインストーラとして作成について
□投稿者/ 渋木宏明 (27回)-(2010/08/06(Fri) 10:01:23)
渋木宏明 さんの Web サイト
2010/08/06(Fri) 10:34:40 編集(投稿者)
2010/08/06(Fri) 10:02:01 編集(投稿者)

>>setup.exe が行っているような事前チェックまで含めて、ということだと、.ini ファイルによるマイグレーション程度では実現できないような気もしますが。
>
> やはりそうですか、何か判断してできるかなとも思っていましたが…もう少しこちらは、調べて検討したいと思います。

アプリケーションがインストール済みかどうかは、Windows Installer API を利用すれば分かります。

けど、それをその「フリーソフトのオートラン機能」で出来るのかどうかは、僕には分かりません。

解決済み
引用返信 編集キー/
■52358 / inTopicNo.7)  Re[1]: 3つのプロジェクトを1つのインストーラとして作成について
□投稿者/ とっちゃん (538回)-(2010/08/06(Fri) 15:43:41)
とっちゃん さんの Web サイト
No52313 (レモン さん) に返信

最初に立ち返って。。。

> 題名の通りなのですが、現状A,B,Cというプロジェクトがあり、それぞれインストーラCDを作成しています。
> それを1つのCDにまとめたいと思っております。
>
なんか、題名通りじゃないような。。。

今まで3つあったものを1つのインストーラにしたいのでしょうか?
それとも3つのインストーラのまま1つのCDに格納したいのでしょうか?

前者については、すでに渋木さんとのやり取りでいくつか問題点が上がっているように正直結構大変です。

後者については、その構成にもよりますが、基本的にはディスクスペースが許す限り
サブフォルダごとに格納するあるいは、msiの名前が重複しないようにするなどで対応可能です。
あとは、どれを実行するか?という部分と、必須コンポーネントがある場合の扱いをどうするか?
というくらいですかね。

引用返信 編集キー/
■52425 / inTopicNo.8)  Re[2]: 3つのプロジェクトを1つのインストーラとして作成について
□投稿者/ レモン (4回)-(2010/08/09(Mon) 10:59:37)
渋木宏明さん、ご回答ありがとうございます。
とっちゃんさん、ご回答ありがとうございます。

何を聞きたいのか?何をしたいのか?…と、後から読むと自分でも違和感のある質問・文章でした。
> 最初に立ち返って。。。
もう一度、聞きたい/やりたい事を整理してみましたので、改めて助言いただければと思います。


※長文失礼します。

A、B、Cという3つのWindowsアプリケーションがあり、それぞれ最初の作成・配布時期は異なっています。
当初からの利用者につきましては、それぞれ順に1枚ずつCDが配布されていたので特に問題もないのですが
新規の利用者には、3枚配布しなくても、3つのWinアプリを1枚のディスクからインストールさせる事ができないか?
といった思いから、今回インストーラについて調査・勉強してみようと質問させていただきました。


現状は、A.msi,B.msi,C.msiと、それぞれ別のセットアップCDで配布されていて
それぞれ起動条件(必須コンポーネント)に、「dotnetfx」と「MDAC28」フォルダ?があります。
ですので、Framework2.0等がなければ先にそちらのインストーラが実行され、その後にA.msiが実行される形です。


(1)
これをイメージとしては、1枚のCDの中に、A.msi,B.msi,C.msi(上記必須コンポーネント含む)をセットしておき
同じく必須コンポーネントがなければ先に実行され、その後にA.msi,B.msi,C.msiが連続でインストールできないか?
という内容がまずはじめの、聞きたい/やりたい事でした。

> それとも3つのインストーラのまま1つのCDに格納したいのでしょうか?
こちらの方だと思っています。

> 後者については、その構成にもよりますが、基本的にはディスクスペースが許す限り
> サブフォルダごとに格納するあるいは、msiの名前が重複しないようにするなどで対応可能です。
> あとは、どれを実行するか?という部分と、必須コンポーネントがある場合の扱いをどうするか?
> というくらいですかね。
このあたりについて、よろしければ詳しく教えて頂きたいのですが。

ちなみに個別のmsiのまま1枚のディスクにまとめれば、それぞれ個別にアンインストールできるのでは…
とも考えていたのですが、こちらについても助言頂ければ幸いです。


※基本的にはここまでが、うまく実現できれば今の段階では十分だと思っています。


(2)
もし(1)が実現できた場合、例えば必須コンポーネントと同じようなイメージで、無ければインストールする。
といった事ができないか?という内容が次に聞きたい/やりたい事でした。
例えば単品のCDでたまたまA.exeが既にインストールされていた場合は、B.msiとC.msiだけがインストールされる。とか
A.exeだけアンインストールして、再インストールする時はA.msiだけがインストールされるといったイメージです。


(3)
もし(2)までもが実現できた場合、そもそもCDをセットした時点でA、B、Cのどれをインストールするのか
選択させることは可能か?といったことも思いついたりはしましたが…


インストーラについて調査・勉強し始めたばかりですので、(2)(3)ついてはただの思いつきだったりしますし、
上記でもまだ、聞きたい/やりたい事がうまく伝えられた自信がありませんが、よろしくお願いします。
引用返信 編集キー/
■52427 / inTopicNo.9)  Re[3]: 3つのプロジェクトを1つのインストーラとして作成について
□投稿者/ 渋木宏明 (33回)-(2010/08/09(Mon) 12:58:15)
渋木宏明 さんの Web サイト
2010/08/09(Mon) 12:58:37 編集(投稿者)

> A、B、Cという3つのWindowsアプリケーションがあり、それぞれ最初の作成・配布時期は異なっています。
> 当初からの利用者につきましては、それぞれ順に1枚ずつCDが配布されていたので特に問題もないのですが

A, B, C 間に依存関係はないんですね?
それがあったりすると、また話は大きく変わってきます。

> 現状は、A.msi,B.msi,C.msiと、それぞれ別のセットアップCDで配布されていて
> それぞれ起動条件(必須コンポーネント)に、「dotnetfx」と「MDAC28」フォルダ?があります。
> ですので、Framework2.0等がなければ先にそちらのインストーラが実行され、その後にA.msiが実行される形です。

厳密には違います。

起動条件を設定してあっても、.msi を実行しただけでは必須コンポーネントのインストールは行われません。
単純に .msi を実行すると「起動条件が満たされていない」旨のエラーダイアログが出てインストールが終了するだけです。

起動条件で指定された必須コンポーネントのインストールを行うのは、setup.exe の仕事です。

> ちなみに個別のmsiのまま1枚のディスクにまとめれば、それぞれ個別にアンインストールできるのでは…
> とも考えていたのですが、こちらについても助言頂ければ幸いです。

できます。
が、1回のユーザ操作で A, B, C を連続的にインストールするのは、デプロイメントプロジェクトの設定をいじる程度では無理です。

以前書いたように

>(2) が優先するなら、カスタムの setup.exe を作ったり、インストーラのランチャ(setup.exe もその1種と言えますが)を用意して対応します。

というのがよくあるパターンです。

> もし(1)が実現できた場合、例えば必須コンポーネントと同じようなイメージで、無ければインストールする。
> といった事ができないか?という内容が次に聞きたい/やりたい事でした。

できます。
カスタムの setup.exe/ランチャで、アプリケーションのインストーラを実行する前に必須コンポーネントの有無を調べて、無ければ必須コンポーネントのインストールを行えばいいです。

> もし(2)までもが実現できた場合、そもそもCDをセットした時点でA、B、Cのどれをインストールするのか
> 選択させることは可能か?といったことも思いついたりはしましたが…

可能です。
カスタムの setup.exe/ランチャ起動時にアプリケーションのインストール状況を調べて、選択画面に反映させればいいです。

引用返信 編集キー/
■52435 / inTopicNo.10)  Re[4]: 3つのプロジェクトを1つのインストーラとして作成について
□投稿者/ レモン (5回)-(2010/08/09(Mon) 15:24:51)
渋木宏明さん、ご回答ありがとうございます。

> A, B, C 間に依存関係はないんですね?
> それがあったりすると、また話は大きく変わってきます。
AがないとBが起動しない…といったような感じの事でしょうか?
業務的に若干の関連性があるため、結果的にA, B, C ともインストールしている利用者が多いですが
実際にはそれぞれ独立した小規模なWinアプリです。1つだけインストールしても単独で起動します。

> 厳密には違います。
>
> 起動条件を設定してあっても、.msi を実行しただけでは必須コンポーネントのインストールは行われません。
> 単純に .msi を実行すると「起動条件が満たされていない」旨のエラーダイアログが出てインストールが終了するだけです。
>
> 起動条件で指定された必須コンポーネントのインストールを行うのは、setup.exe の仕事です。
そうでした。本当に記述不足ばかりで申し訳ありません。現状、例えばアプリAの場合…
・A.msi
・Setup.exe
・dotnetfx
・MDAC28
・autorun.inf
・ShellExec.exe
以上のファイルがCDに書き込まれていました。CDセット後に autoran.inf が Setup.exe を自動起動して・・・前述の流れのようです。
autorun.inf と ShellExec.exe を自動起動用に追加してCDに書き込んでいるようです。


今回の場合は、上記ファイルに、B.msi, C.msi が追加された状態で
・autoran.inf が Setup.exe を自動起動
・必須コンポーネント(dotnetfx, MDAC28)が無ければインストール
・A.msi, B.msi, C.msi を続けてインストール
という動作を目的とすると、これまで教えて頂いた以下の内容から、カスタムのsetup.exeを作成する必要がある事は分かりました。

> (2) が優先するなら、カスタムの setup.exe を作ったり、インストーラのランチャ(setup.exe もその1種と言えますが)を用意して対応します。

> カスタムの setup.exe/ランチャで、アプリケーションのインストーラを実行する前に必須コンポーネントの有無を調べて、無ければ必須コンポーネントのインストールを行えばいいです。

> カスタムの setup.exe/ランチャ起動時にアプリケーションのインストール状況を調べて、選択画面に反映させればいいです。

ですが、この場合のカスタムの Setup.exe とは、具体的にどのように作成するのでしょうか?
Setup.exeの中身自体がどのような物か分かっていない事もありますが、専用のツールが必要とかあるでしょうか?

たくさん質問してしまい申し訳ありませんが、よろしくお願いします。

引用返信 編集キー/
■52445 / inTopicNo.11)  Re[5]: 3つのプロジェクトを1つのインストーラとして作成について
□投稿者/ 渋木宏明 (36回)-(2010/08/09(Mon) 20:05:54)
渋木宏明 さんの Web サイト
>>A, B, C 間に依存関係はないんですね?
>>それがあったりすると、また話は大きく変わってきます。
> AがないとBが起動しない…といったような感じの事でしょうか?

そうです。

> 実際にはそれぞれ独立した小規模なWinアプリです。1つだけインストールしても単独で起動します。

であれば、A,B,C のインストーラを1枚のメディアにまとめること自体には大きな問題はなさそうです。

とっちゃんが書いていたように

>後者については、その構成にもよりますが、基本的にはディスクスペースが許す限り
>サブフォルダごとに格納するあるいは、msiの名前が重複しないようにするなどで対応可能です。

で達成できます。

あと、考えるべきる問題は

>あとは、どれを実行するか?という部分と、必須コンポーネントがある場合の扱いをどうするか?
>というくらいですかね。

くらいです。

> ですが、この場合のカスタムの Setup.exe とは、具体的にどのように作成するのでしょうか?

デプロイメントプロジェクトが生成するものに毛が生えた程度のものなら、.NET の標準クラスライブラリに setup.exe を生成するクラス(名前覚えてません)があるので、それを使います。

ですが、今回のように A,B,C のインストーラを状況に応じて云々だと、それでは対応しきれないでしょう。

VC++ など、最小のランタイムで動作する処理系を使って、必要な機能を盛り込んだ「メニューソフトのようなもの」を自作してください。

「メニューソフトのようなもの」で、必須コンポーネントのチェックを自分でするのが面倒なら、サブフォルダに配置した A, B, C それぞれの setup.exe を呼び出してもいいんじゃないでしょうか。

あるいは、Install Shield なんかには、その手のメニューソフトを作るツールが同梱されていたような気がしますが、自分では使ったことがないので詳細は知りません。
引用返信 編集キー/
■52447 / inTopicNo.12)  Re[6]: 3つのプロジェクトを1つのインストーラとして作成について
□投稿者/ レモン (6回)-(2010/08/09(Mon) 21:51:29)
渋木宏明さん、何度もご親切な回答本当にありがとうございます。

> デプロイメントプロジェクトが生成するものに毛が生えた程度のものなら、.NET の標準クラスライブラリに setup.exe を生成するクラス(名前覚えてません)があるので、それを使います。
>
> ですが、今回のように A,B,C のインストーラを状況に応じて云々だと、それでは対応しきれないでしょう。
>
> VC++ など、最小のランタイムで動作する処理系を使って、必要な機能を盛り込んだ「メニューソフトのようなもの」を自作してください。
>
> 「メニューソフトのようなもの」で、必須コンポーネントのチェックを自分でするのが面倒なら、サブフォルダに配置した A, B, C それぞれの setup.exe を呼び出してもいいんじゃないでしょうか。
>
> あるいは、Install Shield なんかには、その手のメニューソフトを作るツールが同梱されていたような気がしますが、自分では使ったことがないので詳細は知りません。
ご丁寧な説明をいただきありがとうございます。どこから手を付けて良いかも分からない状態の中、
少なくともやるべき事は見えてきましたので助かります。今の知識・自力では実現までには時間が
かかりそうな印象も受けましたが、元々未体験な事なのでじっくりやってみます。
引用返信 編集キー/
■52469 / inTopicNo.13)  Re[7]: 3つのプロジェクトを1つのインストーラとして作成について
□投稿者/ とっちゃん (539回)-(2010/08/10(Tue) 12:50:42)
とっちゃん さんの Web サイト
No52447 (レモン さん) に返信
>>デプロイメントプロジェクトが生成するものに毛が生えた程度のものなら、.NET の標準クラスライブラリに setup.exe を生成するクラス(名前覚えてません)があるので、それを使います。
>>
前に作って遊んだことをBlogに書いたなー。。。と思って検索してきました。
http://blogs.wankuma.com/tocchann/archive/2007/03/07/65459.aspx
Blogの記事そのものがずぼらな書き方なので、詳しくはMSDNライブラリで調べてくださいね。

>>ですが、今回のように A,B,C のインストーラを状況に応じて云々だと、それでは対応しきれないでしょう。
>>
>>VC++ など、最小のランタイムで動作する処理系を使って、必要な機能を盛り込んだ「メニューソフトのようなもの」を自作してください。
>>
>>「メニューソフトのようなもの」で、必須コンポーネントのチェックを自分でするのが面倒なら、サブフォルダに配置した A, B, C それぞれの setup.exe を呼び出してもいいんじゃないでしょうか。
>>
上のブートストラップで、最後に起動するものをメニューEXEにすると、メニューEXEを起動する前に
.NET Framework などの必須コンポーネントをインストールしておくことができます。
#実際それに近いものを作ったことがあります。

そうすると、メニューEXEを .NET Framework で作成することも不可能ではなくなりますよ。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -