- PR -

インストーラの動き、、

投稿者投稿内容
スンパ
ベテラン
会議室デビュー日: 2005/05/23
投稿数: 85
投稿日時: 2006-05-18 17:24

【状況説明】
あるプログラムがインストーラ(VB.NETで作成)により既にインストールされているが、
今回、同名のプログラムのインストーラを作成し、インストールしようとします。
事情があり、二つのインストーラのバージョンが違います。
また、ProductCode、UpgradeCode、Versionがすべて異なります。


【質問事項】
開発環境で二つのインストーラを使いインストールを行うと、必ず、
『別のバージョンの製品が既にインストールされています。このバージョンのインストールを続行できません。既にインストールされているバージョンの製品を構成、または削除するには、コントロールパネルの[]プログラムの追加と削除』アイコンを使用します。
と出てインストールが中止される。どちらか一つしかインストールできない。

しかし、Windows2000、windows XP SP1でのテストでは、
二つのプログラムがインストールされてしまいます。
これを防ぎたいです。
必ずどちらか一つのみをインストールさせたいです。
要するに、現開発環境での結果と同様にしたいが、その方法を良く分かりません。
windows XP SP2ではそういう動きをするもんですか?
もしか、プロパーティなどをいじることで済むことでしょうか?


【開発環境】
Visual Studio .net 2003
.NetFramework 1.1
windows XP SP2


宜しくお願い致します。
とっちゃん
大ベテラン
会議室デビュー日: 2005/07/19
投稿数: 203
投稿日時: 2006-05-18 17:40
とっちゃんです。

動作の違いが腑に落ちないのですが...

もしかして開発環境と確認した環境でインストーラの実行の仕方が異なるということはありませんか?

片方は、msiを直接実行しているが、もう片方はsetup.exeを経由しているとか。
あるいは、開発環境は、Visual Studio 上から実行しているとか。

インストーラの起動方法が異なると、実行条件が全く違ってしまう可能性があるため、件のエラーが出たり出なかったりというのはありえます。

が、

おそらく、原因は開発環境に既に一方のインストーラが残ったままになっているのが
原因じゃないかという感じがしますね(バージョンの異なるものが既にインストールされた状態と同じメッセージのため)。

いずれにしても、開発環境の場合、インストーラのあずかり知らぬ情報が既に「いる」状態になっています。
そのため、どういう現象が起こるかわからないというのもありますが、アンインストールとともに本来あるべきはずのものが
なくなってしまうとかということも起こりかねないということもご承知おきいただきたいと思います。

原則として、いかなる理由があろうともインストーラ(たとえ単純コピーだけであったとしても)がインストールするファイルを
開発している環境にインストールするというのはご法度です。

必ず、インストール用のテスト環境を構築してそちらで実験することをお勧めいたします。

_________________
// とっちゃん(高萩 俊行)@わんくま同盟
// とっちゃん’Blog
// MS-MVP for Developer Tools - Visual C++
// WindowsInstallerの話題はhttp://www.freeml.com/msiまで
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2006-05-18 20:35
スンちゃんパパさん、こんばんは。

引用:

今回、同名のプログラムのインストーラを作成し、インストールしようとします。
事情があり、二つのインストーラのバージョンが違います。
また、ProductCode、UpgradeCode、Versionがすべて異なります。


Windowsインストーラは、アプリケーションがインストール済みかどうかを判定するのに UpgradeCode を使用します。
ですので、RemovePreviousVersions プロパティに true を指定してインストール時に旧バージョンを削除させたり、各国語版や別エディション同士を共存させたくない場合は、UpgradeCode を変更してはいけません。

引用:

『別のバージョンの製品が既にインストールされています。このバージョンのインストールを続行できません。


UpgradeCode が異なるのであれば、こちらの挙動の方が謎です。
逆に、これらのプロパティを一切変更せずにそのまま再ビルドした場合などは、このメッセージが出ます。
スンパ
ベテラン
会議室デビュー日: 2005/05/23
投稿数: 85
投稿日時: 2006-05-18 22:48
ご返事ありがとうございます。
まず、お詫びいたします。
質問を簡潔にするため、状況説明を簡単にしてしまいました。

実は、すでに(インストーラにより)配られているプログラムが二つあり、今回が3回目です。
今回を含めた三つのProductCode、UpgradeCode、Versionがすべて異なります。

3回目のインストーラはまだ作ってはいませんが、
1回目、2回目のどのインストーラのProductCode、UpgradeCode、Versionにもあわせられないので、苦労しています。
1回目のインストーラでインストールしたユーザーもいるし、2回目のインストーラを使いインストールしたユーザーもいるからです。
今回作る3回目のインストーラはどちらも対応使用とします。
つまり、古いインストーラ(1回目、2回目の)でインストールしたプログラムが存在すればアンインストールを行ったあと、3回目のインストーラを使いインストールを行わせたいのです。もちろん、どちらもインストールされていなければ、そのままインストールを行います。また、中には二つがインストールさえているユーザーもいます。この場合は、アンインストーラを2回呼ばないといけないです。

だらだら質問が長くなってしまいましたが、
まずは、
コーディングでアンインストーラをどう呼び出せばよいのかを教えていただけますでしょうか?そのあとはまた自分なりにかんばって見ます。もしかしたらまた質問するかもしれませんが、、^^



>>もしかして開発環境と確認した環境でインストーラの実行の仕方が異なるということ>>はありませんか?

>>片方は、msiを直接実行しているが、もう片方はsetup.exeを経由しているとか。
>>あるいは、開発環境は、Visual Studio 上から実行しているとか。

いいえ、テストは作られたmsiファイルで行いました。

>>UpgradeCode を変更してはいけません。
はい、承知していますが、上記の説明の状況ですので、、

とっちゃん
大ベテラン
会議室デビュー日: 2005/07/19
投稿数: 203
投稿日時: 2006-05-19 11:50
引用:

スンちゃんパパさんの書き込み (2006-05-18 22:48) より:

実は、すでに(インストーラにより)配られているプログラムが二つあり、今回が3回目です。
今回を含めた三つのProductCode、UpgradeCode、Versionがすべて異なります。



VSセットアップではフォローしていませんが、WindowsInstaller 的には異なるUpgradeCodeであっても
アップグレード対象とすることは可能です。

詳しいことは、MSDNライブラリのPatching and Upgrades にある Major Upgrades 関係についてお調べください。

引用:

コーディングでアンインストーラをどう呼び出せばよいのかを教えていただけますでしょうか?そのあとはまた自分なりにかんばって見ます。もしかしたらまた質問するかもしれませんが、、^^



コーディングというのはプログラム的にと言うことでしょうか?それとも、msiを弄くるという意味でしょうか?
実際のところ試してみないとわからないというのはありますが、上述したように複数の UpgradeCode を対象とすること自体は可能になっています。
細かく見ていないためはっきりとはいえませんが、おそらくは複数の製品の一括アンインストールも行なえると思います。



引用:

いいえ、テストは作られたmsiファイルで行いました。



既にあるものを、ユーザーが実行するのと同じようにやってみたが、エラーが出たということですね。
msi を直接実行したのでしょうか?

もしそうであれば、エラーが出たほうのインストールセットが既にインストールされているのだと思います。
直接実行した場合、「別のバージョンの製品が既に...」のエラーが出るはずですので。

そのあたりを確認してみてはいかがでしょうか。


_________________
// とっちゃん(高萩 俊行)
// とっちゃん’Blog
// Microsoft MVP for Windows-SDK (Oct 2005 - Sept 2006)

[ メッセージ編集済み 編集者: とっちゃん 編集日時 2006-05-19 13:05 ]

[ メッセージ編集済み 編集者: とっちゃん 編集日時 2006-05-19 13:06 ]
スンパ
ベテラン
会議室デビュー日: 2005/05/23
投稿数: 85
投稿日時: 2006-05-19 12:51
>>VSセットアップではフォローしていませんが、WindowsInstaller 的には異なる>>UpgradeCodeであっても
>>アップグレード対象とすることは可能です。
>>詳しいことは、MSDNライブラリのPatching and Upgrades にある Major Upgrades 関>>係についてお調べください。
情報、有り難うございます。
調査してみて、分からなかったら、またお伺いいたしますので、宜しくお願い致します。


>>コーディングというのはプログラム的にと言うことでしょうか?それとも、msiを弄く>>るという意味でしょうか?
>>実際のところ試してみないとわからないというのはありますが、上述したように複数>>の UpgradeCode を対象とすること自体は可能になっています。
>>細かく見ていないためはっきりとはいえませんが、おそらくは複数の製品の一括アン>>インストールも行なえると思います。
これから作るインストーラ(3回目)での設定ですむ事なら良いですが、
それができなかった場合、プログラムで古いプログラムをすべて削除したあと、インストーラをCallする方法もありかなと思いましたので、お伺いしました。
頂いた情報で調べてみます。


>>既にあるものを、ユーザーが実行するのと同じようにやってみたが、エラーが出たと>>いうことですね。
はい
>>msi を直接実行したのでしょうか?
そうです。

>>もしそうであれば、エラーが出たほうのインストールセットが既にインストールされ>>ているのだと思います。
>>直接実行した場合、「別のバージョンの製品が既に...」のエラーが出るはずですの>>で。
>>そのあたりを確認してみてはいかがでしょうか。
私もそう思います。
しかし、プログラムの追加/削除でバージョンを見ますと(2回目の)古いプログラムでした。




スンパ
ベテラン
会議室デビュー日: 2005/05/23
投稿数: 85
投稿日時: 2006-05-19 12:52
とっちゃん様

お礼を忘れました。

有り難うございます。
スンパ
ベテラン
会議室デビュー日: 2005/05/23
投稿数: 85
投稿日時: 2006-05-19 12:57
とっちゃん様

『MSDNライブラリのPatching and Upgrades にある ...』のリンクが表示されませんが、、、

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