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

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

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

Re[7]: インストーラでのアップグレードに関して


(過去ログ 63 を表示中)

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

■36091 / inTopicNo.1)  インストーラでのアップグレードに関して
  
□投稿者/ まぐねしうむ (63回)-(2009/05/20(Wed) 17:17:14)

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

InstallShield2008Expressを使用して、ある製品のバージョンアップ用の
インストーラを作成しています。

V1=>V2を行う課程で、ExeとDLLを更新する必要があるのですが
実行すると、インストールが必要なファイルが展開先に存在しておりません。
そこで、Msiexecを使用しインストールのログを収集し確認した所
一度はコンポーネントを登録しているのですが、その後削除している模様です。

EXEおよびDLLのバージョン情報および
InstallShield上で製品名、製品コードともに変更していますが
ほかに変更当等が必要な項目があるのでしょうか?
教えてください。

なお、V1=>V2へのアップグレード後にV2のインストーラを起動すると
当該ファイルが存在しないと思われるため正常にファイル郡が展開されます。
引用返信 編集キー/
■36123 / inTopicNo.2)  Re[1]: インストーラでのアップグレードに関して
□投稿者/ とっちゃん (391回)-(2009/05/21(Thu) 11:14:49)
とっちゃん さんの Web サイト
No36091 (まぐねしうむ さん) に返信
> InstallShield2008Expressを使用して、ある製品のバージョンアップ用の
> インストーラを作成しています。
>
> V1=>V2を行う課程で、ExeとDLLを更新する必要があるのですが
> 実行すると、インストールが必要なファイルが展開先に存在しておりません。
> そこで、Msiexecを使用しインストールのログを収集し確認した所
> 一度はコンポーネントを登録しているのですが、その後削除している模様です。
>
展開。。。って圧縮された状態を展開?
それともインストール先のことですか?

ファイルは消えてしまうのですか?(古いのもなくなってしまう)それとも
更新されないままなのですか?

ログが収集できるということは、失敗した状況の詳細が取れるということだと思われます。
msiexec を使って動かせるなら、詳細ログ(/l*v で取れます)を取得して
失敗した(登録後削除はロールバック動作と思われる)状況を洗い出してみればよいのではないかと。

> なお、V1=>V2へのアップグレード後にV2のインストーラを起動すると
> 当該ファイルが存在しないと思われるため正常にファイル郡が展開されます。
とすると、何か別の問題がありそうな気がしなくもないですが...
そもそもアップグレードインストールするように設定してますか?

EXEやDLLのバージョンを上げ、ProductVersion を上げないとアップグレードの
対象とはなりません。
そのうえで、可能なアップグレードの選択肢(新旧の違いによりいろいろある)に応じて
ProductCode を変えるなどの対応をとります。

ただし、変えたら自動でセットされるわけではなく、それとは別にアップグレードする
という設定が必要なはずです(昔のIS(Expressじゃないですが)はそうなってました<今は知らない)。

このあたりは、「InstallShieldのヘルプ」を見てきちんと設定してください。
製品を持っていないのでどこで設定できるのかわかりませんが設定できるはずです。

引用返信 編集キー/
■36127 / inTopicNo.3)  Re[2]: インストーラでのアップグレードに関して
□投稿者/ まぐねしうむ (64回)-(2009/05/21(Thu) 15:21:13)
No36123 (とっちゃん さん) に返信
お世話なります。

>展開。。。って圧縮された状態を展開?
>それともインストール先のことですか?
すみません。
インストール先のことです。

>ファイルは消えてしまうのですか?(古いのもなくなってしまう)それとも
>更新されないままなのですか?
古いバージョンのファイルが消された状態となっております。

>msiexec を使って動かせるなら、詳細ログ(/l*v で取れます)を取得して
>失敗した(登録後削除はロールバック動作と思われる)状況を洗い出してみればよいのではないかと。
ログを確認してみましたが、内容がよくわかりません。
おそらく当該ファイルコピー後の検証でErrになっていると思うのですが
ログの見方がわかりません。
よろしければ参考になるHP等を教えていただけないでしょうか?

アクション 13:56:15: InstallValidate。 インストールを検証しています
MSI (s) (40:50) [13:56:15:687]: Component: aaa.exe; Installed: Absent; Request: Local; Action: Local
MSI (s) (40:50) [13:56:19:953]: Executing op: ActionStart(Name=ProcessComponents,Description=コンポーネントの登録を更新しています,)
MSI (s) (40:50) [13:56:20:046]: Executing op: ComponentRegister(ComponentId={123458-6BD6-1234-87AB-7AB833163A61},KeyPath=C:\Program Files\aaa\aaa\aaa.exe,State=3,,Disk=1,SharedDllRefCount=2,BinaryType=0)
1: {74332620-6241-4124-AC6B-1CEC31EBD870} 2: {123458-6BD6-1234-87AB-7AB833163A61} 3: C:\Program Files\aaa\aaa\aaa.exe
MSI (s) (40:50) [13:56:20:234]: Executing op: FileCopy(SourceName=aaaa~1.EXE|aaa.exe,SourceCabKey=aaa.exe,DestName=aaa.exe,Attributes=16384,FileSize=7008256,PerTick=32768,,VerifyMedia=1,,,,,CheckCRC=0,Version=3.0.0.0,Language=0,InstallMode=58982400,,,,,,,)
MSI (s) (40:50) [13:56:20:234]: File: C:\Program Files\aaa\aaa\aaa.exe; Overwrite; Won't patch; Existing file is a lower version
MSI (s) (40:50) [13:56:20:234]: Source for file 'aaa.exe' is compressed
InstallFiles: File: aaa.exe, Directory: C:\Program Files\aaa\aaa\, Size: 7008256
MSI (s) (40:50) [13:56:20:250]: Re-applying security from existing file.
MSI (s) (40:50) [13:56:20:250]: Verifying accessibility of file: aaa.exe
MSI (s) (40:50) [13:56:20:250]: Note: 1: 2318 2: C:\Program Files\aaa\aaa\aaa.exe

以下の検証で失敗している?
アクション 13:56:21: InstallValidate。 インストールを検証しています
アクション開始 13:56:21 : InstallValidate。
MSI (s) (40:DC) [13:56:21:312]: Feature: AlwaysInstall; Installed: Local; Request: Absent; Action: Absent
MSI (s) (40:DC) [13:56:21:312]: Component: __aaa.exe65; Installed: Null; Request: Absent; Action: Absent
MSI (s) (40:DC) [13:56:21:312]: Component: aaa.exe; Installed: Local; Request: Absent; Action: Absent
アクション終了 13:56:21 : InstallValidate。 戻り値 1。

検証に失敗したので削除?
アクション 13:56:25: RemoveFiles。 ファイルを削除しています
MSI (s) (40:DC) [13:56:25:843]: Executing op: FileRemove(,FileName=aaa.exe,,ComponentId={D6670A55-E688-4581-AF6C-7BA30F086794})
RemoveFiles: File: aaa.exe, Directory: C:\Program Files\aaa\aaa\
MSI (s) (40:DC) [13:56:25:843]: Verifying accessibility of file: aaa.exe

>EXEやDLLのバージョンを上げ、ProductVersion を上げないとアップグレードの
>対象とはなりません。
>そのうえで、可能なアップグレードの選択肢(新旧の違いによりいろいろある)に応じて
>ProductCode を変えるなどの対応をとります。

VS上でアップグレード対象のEXE,DLLのバージョンはあげております。
ISのHelpの「完全インストール アップグレードの作成」によると
V1=>V2へのアップグレードの場合は
製品バージョン および製品コード を変更せよと記載されていますので
上記項目をIS上で変更をおこなっています。
また、Helpでは記載されていませんでしたが、パッケージコードもISの機能で自動で
変更しているので値が変わっていると思います。
この他に変更する必要のある箇所があるのでしょうか?

>ただし、変えたら自動でセットされるわけではなく、それとは別にアップグレードする
>という設定が必要なはずです(昔のIS(Expressじゃないですが)はそうなってました<今は知らない)。
アップグレードパスのことでしょうか?
中身はアップグレードコード、最小バージョン、最大バージョン言語識別子、言語基準、
削除エラーの無視、機能の状態を移行する 等の項目があります。


引用返信 編集キー/
■36134 / inTopicNo.4)  Re[2]: インストーラでのアップグレードに関して
□投稿者/ まぐねしうむ (65回)-(2009/05/21(Thu) 16:51:27)
No36123 (とっちゃん さん) に返信
msiexec で収集した詳細ログをWiLogUtlで確認しましたが
エラーは検出されておりません。
役に立つかわかりませんが報告させていただきます。

引用返信 編集キー/
■36139 / inTopicNo.5)  Re[3]: インストーラでのアップグレードに関して
□投稿者/ とっちゃん (392回)-(2009/05/21(Thu) 18:50:54)
とっちゃん さんの Web サイト
No36134 (まぐねしうむ さん) に返信

> msiexec で収集した詳細ログをWiLogUtlで確認しましたが
> エラーは検出されておりません。
> 役に立つかわかりませんが報告させていただきます。

えっと、エラーのあるもので試すとわかりますが、日本語OSだと、いくつかの文字列がローカライズされているためエラーを検出できません。
なので、「エラー」とか「Error」とかそれっぽいので、普通にテキスト検索して探してください。
このあたりは、テキストログであるが故のものですね。詳細ログは必ず英語とかにしてくれると楽なんですけどねーw<開発としてはw


さて、本題。
部分的なログしかないですが、ログを見た感じだと、新しいバージョンのインストーラの作り方に問題があるような気がします。
アップグレードの設定をアンインストールしてからインストールに変えてみたらどうでしょう?<動き変わります。
今は、おそらくインストールしてからアンインストールという設定になっていると思います。

これだと、Component の原則を完全に理解して、設定できていないと100%に近い確率で失敗します(内部情報がコンフリクトするため)。
その辺も含めて見直してみてください。

引用返信 編集キー/
■36146 / inTopicNo.6)  Re[4]: インストーラでのアップグレードに関して
□投稿者/ まぐねしうむ (66回)-(2009/05/22(Fri) 10:06:15)
No36139 (とっちゃん さん) に返信

> えっと、エラーのあるもので試すとわかりますが、日本語OSだと、いくつかの文字列がローカライズされているためエラーを検出できません。
> なので、「エラー」とか「Error」とかそれっぽいので、普通にテキスト検索して探してください。
> このあたりは、テキストログであるが故のものですね。詳細ログは必ず英語とかにしてくれると楽なんですけどねーw<開発としてはw
ログを確認しましたが、やはりエラーっぽい物はない模様です。

> 部分的なログしかないですが、ログを見た感じだと、新しいバージョンのインストーラの作り方に問題があるような気がします。
> アップグレードの設定をアンインストールしてからインストールに変えてみたらどうでしょう?<動き変わります。
> 今は、おそらくインストールしてからアンインストールという設定になっていると思います。
調べてみたところ、Express以上のバージョンだとご指摘の機能がある模様です。

 アップグレード=>WindowsInstallerセットアップのアップグレード=>メジャーアップグレードの設定
  ・新規セットアップをインストールする前に、以前のセットアップを完全アンインストールする。
  ・セットアップをインストールし、不要なファイルを削除する。
   (インストール後に不要なファイル等を削除する)
の2種類です。

説明から推測するに、Expressではこの機能画面が提供されておりませんが
下の「セットアップをインストールし、不要なファイルを削除する。」が
デフォルトになっているのかもしれません。

ということは、Expressではこの機能を変更できないと考えるべきでしょうか?
そうすると、Component の原則を完全に理解する必要があるとのことですが
新しくソフトを購入するのは困難なので、Component の原則を完全に理解する必要があると思いますが
参考になる情報、HP等はありますでしょうか?


引用返信 編集キー/
■36152 / inTopicNo.7)  Re[5]: インストーラでのアップグレードに関して
□投稿者/ とっちゃん (393回)-(2009/05/22(Fri) 11:30:09)
とっちゃん さんの Web サイト
No36146 (まぐねしうむ さん) に返信

>>えっと、エラーのあるもので試すとわかりますが、日本語OSだと、いくつかの文字列がローカライズされているためエラーを検出できません。
>>なので、「エラー」とか「Error」とかそれっぽいので、普通にテキスト検索して探してください。
>>このあたりは、テキストログであるが故のものですね。詳細ログは必ず英語とかにしてくれると楽なんですけどねーw<開発としてはw
> ログを確認しましたが、やはりエラーっぽい物はない模様です。
>
だとすると、エラーは出ていない(形式上は)のではないかと。


>>部分的なログしかないですが、ログを見た感じだと、新しいバージョンのインストーラの作り方に問題があるような気がします。
>>アップグレードの設定をアンインストールしてからインストールに変えてみたらどうでしょう?<動き変わります。
>>今は、おそらくインストールしてからアンインストールという設定になっていると思います。
> 調べてみたところ、Express以上のバージョンだとご指摘の機能がある模様です。
>
>  アップグレード=>WindowsInstallerセットアップのアップグレード=>メジャーアップグレードの設定
>   ・新規セットアップをインストールする前に、以前のセットアップを完全アンインストールする。
>   ・セットアップをインストールし、不要なファイルを削除する。
>    (インストール後に不要なファイル等を削除する)
> の2種類です。
>
ってことは、Expressでは出来ないのかもしれませんね。持ってないし、使ったことがないのでわからんですが。


> 説明から推測するに、Expressではこの機能画面が提供されておりませんが
> 下の「セットアップをインストールし、不要なファイルを削除する。」が
> デフォルトになっているのかもしれません。
>
> ということは、Expressではこの機能を変更できないと考えるべきでしょうか?
ですね。用意されていないということは変更できないということになるかと。


> そうすると、Component の原則を完全に理解する必要があるとのことですが
> 新しくソフトを購入するのは困難なので、Component の原則を完全に理解する必要があると思いますが
> 参考になる情報、HP等はありますでしょうか?
>
えっと。。。InstallShieldのヘルプに載ってるはずです。たとえExpressでも
msi形式で作れるのなら、載せてるはず。
もし載ってないのなら...公認ガイドブックか、おいらが昔わんくま勉強会でやったセッションの資料(とビデオ)とか。。。
その程度かなぁ。。。日本語資料は。

公認ガイドブックは、msi なインストーラを作る人は例外なく手元に置いておいたほうがいいです。
少なくとも、日本語の資料としてまとまっているものは、これ以外に存在してないので。
もちろん、英語でも構わないというののなら、Windows Installer SDK にも細かく出てますし
http://www.installsite.org/ なんかもありますけど。

引用返信 編集キー/
■36156 / inTopicNo.8)  Re[6]: インストーラでのアップグレードに関して
□投稿者/ まぐねしうむ (67回)-(2009/05/22(Fri) 12:00:24)
No36152 (とっちゃん さん) に返信
> だとすると、エラーは出ていない(形式上は)のではないかと。
試しににIS2009のExpressの体験版でやってみましたが
エラー等は無く、動作も同じように見られますのでインストールの形式(設定)が
問題だと思われます。

>>ということは、Expressではこの機能を変更できないと考えるべきでしょうか?
> ですね。用意されていないということは変更できないということになるかと。
ですよね・・・

> えっと。。。InstallShieldのヘルプに載ってるはずです。たとえExpressでも
> msi形式で作れるのなら、載せてるはず。
HELPで検索した所

Component Table

Columns
Component
Identifies the component record.
Primary table key.
ComponentId
A string GUID unique to this component, version, and language.
(以下省略)

これのことでしょうか?

> もし載ってないのなら...公認ガイドブックか、おいらが昔わんくま勉強会でやったセッションの資料(とビデオ)とか。。。
> その程度かなぁ。。。日本語資料は。
公認ガイドブックと言うのはASCIIから出ている、2008/01/02発行の本でしょうか?
それなら持っています。
どの項目でしょうか?

> 公認ガイドブックは、msi なインストーラを作る人は例外なく手元に置いておいたほうがいいです。
> 少なくとも、日本語の資料としてまとまっているものは、これ以外に存在してないので。
> もちろん、英語でも構わないというののなら、Windows Installer SDK にも細かく出てますし
> http://www.installsite.org/ なんかもありますけど。
提示していただいた、資料、HPを一通り確認してみます。
>おいらが昔わんくま勉強会でやったセッションの資料(とビデオ)とか。。。
ですが、何時の勉強会でしょうか?

引用返信 編集キー/
■36165 / inTopicNo.9)  Re[6]: インストーラでのアップグレードに関して
□投稿者/ まぐねしうむ (68回)-(2009/05/22(Fri) 14:48:35)
No36152 (とっちゃん さん) に返信
お手数おかけしました。
いろいろ調べてみた所、IS2008のバグのようです。

http://wiki.makotokw.com/index.php?Programing%2FInstaller%2FInstallShield#kfe9108e
によると
 アクションのシーケンスで、RemoveExistingProductsがCostFinalizeよりもあとにあると再現することがある。
 CstInitialize-CostFinalize間で、新バージョンのインストール情報の一覧を構築するがこの時点で更新が不要だと判断されると、
 インストールリストには追加されず、しかもアンインストールだけされてしまう。

この問題はIS上でアップグレードパス=>RemoveExistingProducts を InstallFinalize の後にシーケンスする
で変更出来るのですが、ここの設定をOnにしインストールを実行すると「ランタイム エラー 2613」が
発生し終了してしまいます。

IS2009Expressのリソースノートによるとこの問題が修正されており
実際にIS2009上で作成したイメージを実行した所正常に動作しました。

リリースノートの記述
 IOC-000070377
 リリース ノート 19
 [アップグレード パス] ビューで [RemoveExistingProducts の再シーケンス] ボタンを 2 回クリックしたとき、InstallShield
 は RemoveExistingProducts を InstallInitialize アクションの前の適切な場所にシーケンスします。 以前、同じ状況下では
 RemoveExistingProducts アクションが InstallFinalize の直前にシーケンスされたために、ランタイム エラー 2613
 (RemoveExistingProducts アクションの順序が正しくありません) が発生しました。

とりあえず、IS2008のバグというのが分かりましたので
質問をクローズしたいと思います。

ありがとうございました。
解決済み
引用返信 編集キー/
■36167 / inTopicNo.10)  Re[7]: インストーラでのアップグレードに関して
□投稿者/ とっちゃん (394回)-(2009/05/22(Fri) 15:03:42)
とっちゃん さんの Web サイト
No36165 (まぐねしうむ さん) に返信
> お手数おかけしました。
> いろいろ調べてみた所、IS2008のバグのようです。
>
> http://wiki.makotokw.com/index.php?Programing%2FInstaller%2FInstallShield#kfe9108e
> によると
>  アクションのシーケンスで、RemoveExistingProductsがCostFinalizeよりもあとにあると再現することがある。
>  CstInitialize-CostFinalize間で、新バージョンのインストール情報の一覧を構築するがこの時点で更新が不要だと判断されると、
>  インストールリストには追加されず、しかもアンインストールだけされてしまう。
>
あら。。。そんなバグがあったんですね。

そりゃ気がつかないわ

えっと、せっかくなので...
勉強会の資料とビデオは http://www.wankuma.com/seminar/20070818osaka12/Default.aspx
にあります。

ちょっぴり早口の展開ですが、キーポイントだけは押さえてあるはずです。
URLとか当時のものなので、ちょっと古いですが、リンク切れはたぶんほとんどないはずです。

ま、興味があったらみてみてください。

解決済み
引用返信 編集キー/
■36170 / inTopicNo.11)  Re[7]: インストーラでのアップグレードに関して
□投稿者/ まぐねしうむ (69回)-(2009/05/22(Fri) 15:41:07)
No36165 (まぐねしうむ さん) に返信
IS2008での解決方法がわかりました。

orcaは
http://support.microsoft.com/kb/255905/ja
から入手し、orca上で
InstallExcuteSequence=>RemoveExsitingProductの値を1410に変更した所
動作確認が取れました。

参考にしたHP
http://kb.acresso.com/selfservice/microsites/search.do?cmd=displayKC&docType=kc&externalId=http--communityacressocom-archive-indexphpt-179701html&sliceId=&docTypeID=DT_MACROVISIONCOMMUNITY_1_1&dialogID=55841749&stateId=0%200%2055839593
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -