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

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

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

Re[8]: セットアップの修復機能について


(過去ログ 119 を表示中)

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

■69720 / inTopicNo.1)  セットアップの修復機能について
  
□投稿者/ 焦げ太 (4回)-(2014/01/24(Fri) 15:08:04)

分類:[.NET 全般] 

こんにちは。

VS2008のセットアッププロジェクト+ORCAでインストーラーを
作成しています。

予めレジストリに登録した内容を元にセットアップ内容を変更
しています。

起動条件でレジストリ検索し、その値をConditionで判定して
います。TransitiveはTrueで設定しています。

この状態で作成したインストーラーをWindows7でインストール
しました。

コンパネの「プログラムと機能」で「修復」をするとインスト
ール時と同じファイルが作成されるのですが、「変更」で表示
されるダイアログから修復するとレジストリ検索が行われ
ないのかインストール済みのファイルが消されてしまいます。

「変更」からでも「修復」と同等の動作が望ましいのですが、
対処方法などご存知の方、お教えいただけますでしょうか。

よろしくお願いします。
引用返信 編集キー/
■69724 / inTopicNo.2)  Re[1]: セットアップの修復機能について
□投稿者/ とっちゃん (187回)-(2014/01/24(Fri) 16:59:40)
とっちゃん さんの Web サイト
No69720 (焦げ太 さん) に返信
> コンパネの「プログラムと機能」で「修復」をするとインスト
> ール時と同じファイルが作成されるのですが、「変更」で表示
> されるダイアログから修復するとレジストリ検索が行われ
> ないのかインストール済みのファイルが消されてしまいます。
>
> 「変更」からでも「修復」と同等の動作が望ましいのですが、
> 対処方法などご存知の方、お教えいただけますでしょうか。
>
変更で、UIを出して、そこから修復を選択した場合と、直接修復で呼び出した場合で動作が異なるということですか?

何が違うのかそれだけではわかりませんが詳細ログを取る方法があるので、それで確認してみてはいかがでしょう?

変更と同じ動きでログを取るには
msiexec /I {ProductCode} /l*v <ログファイルのフルパス>

修復を直接呼び出す場合は
msiexec /f {ProductCode} /l*v <ログファイルのフルパス>

で、呼び出せます(おそらく後ろに何もつけずに処理してると思いますが、詳細は分かりません)。

ログを取得して、何か異なる動作をしていないか調査してみてください。
違いが分かれば、それを変更すれば対応できると思います。


引用返信 編集キー/
■69730 / inTopicNo.3)  Re[2]: セットアップの修復機能について
□投稿者/ 焦げ太 (5回)-(2014/01/24(Fri) 18:35:15)
No69724 (とっちゃん さん) に返信

返信ありがとうございます。
ログ取得してみたところ、レジストリからの値は取得できているようでした。

変更(うまくいかないほう)のログで下記エラーが発生していました。

DEBUG: Error 2826: Control Line1 on dialog MaintenanceForm extends beyond the boundaries of the dialog to the right by 3 pixels

DEBUG: Error 2826: Control Line1 on dialog FinishedForm extends beyond the boundaries of the dialog to the right by 3 pixels

ググってみましたが、今のところUI系のエラーということしかわかりません。
何か情報がありましたら教えていただけると助かります。

よろしくお願いいたします。
引用返信 編集キー/
■69741 / inTopicNo.4)  Re[3]: セットアップの修復機能について
□投稿者/ とっちゃん (188回)-(2014/01/26(Sun) 01:13:58)
とっちゃん さんの Web サイト
No69730 (焦げ太 さん) に返信
> ■No69724 (とっちゃん さん) に返信
>
> 返信ありがとうございます。
> ログ取得してみたところ、レジストリからの値は取得できているようでした。
>
とすると、別の何かが原因でうまくいかないみたいですね。
Conditionとか何もわからないので原因がどこにあるかはわかりかねますが。。。



> 変更(うまくいかないほう)のログで下記エラーが発生していました。
>
> DEBUG: Error 2826: Control Line1 on dialog MaintenanceForm extends beyond the boundaries of the dialog to the right by 3 pixels
>
> DEBUG: Error 2826: Control Line1 on dialog FinishedForm extends beyond the boundaries of the dialog to the right by 3 pixels
>
> ググってみましたが、今のところUI系のエラーということしかわかりません。
> 何か情報がありましたら教えていただけると助かります。
>
こちらは、2つのフォームのダイアログサイズでおかしいんじゃない?といっているものです。
無視しても問題ありません。

引用返信 編集キー/
■69752 / inTopicNo.5)  Re[4]: セットアップの修復機能について
□投稿者/ 焦げ太 (6回)-(2014/01/27(Mon) 19:04:42)
No69741 (とっちゃん さん) に返信
返信ありがとうございます。

> Conditionとか何もわからないので原因がどこにあるかはわかりかねますが。。。

レジストリには予め値が設定されています。
レジストリエディタで確認済みです。

パス:HKLM\SOFTWARE\Test\TestA\Text1
値 :1
※値は0か1のいずれかです

レジストリ値の取得はセットアッププロジェクトの起動条件で検索しています。
Property : REGISTRY_TEST
Regkey : SOFTWARE\Test\TestA
Root : vsdrrHKLM
Value : Test1

Conditionには以下のように記述しています。
値が0の場合はインストール対象外とし、値が1の場合はインストールさせようと
しています。

REGISTRY_TEST="#1"

Transitive は True で設定しています。

ログに下記出力がありましたので、取得できていると判断しました。

PROPERTY CHANGE: Adding REGISTRY_TEST property. Its value is '#1'.


>>
>>DEBUG: Error 2826: Control Line1 on dialog MaintenanceForm extends beyond the boundaries of the dialog to the right by 3 pixels
>>DEBUG: Error 2826: Control Line1 on dialog FinishedForm extends beyond the boundaries of the dialog to the right by 3 pixels
>>
> こちらは、2つのフォームのダイアログサイズでおかしいんじゃない?といっているものです。
> 無視しても問題ありません。

情報ありがとうございます。このエラーに関しては放置することにします。


ログで気になるところがありまして…
「Component:…」と出力されている個所ですが、、、

Conditionの結果がFALSEのものはどちらも同様にログが書かれていました。
Conditionの結果がTRUEのものはActionが「Local」と「Absent」で異なる内容が書かれていました。

【正常に動作する修復】
Component: C__2DXXX; Installed: Local; Request: Null; Action: Null <--Conditionの結果がFALSEのもの
Component: C__30XXX; Installed: Local; Request: Local; Action: Local <--Conditionの結果がTRUEのもの

【削除されてしまう修復】
Component: C__2DXXX; Installed: Local; Request: Null; Action: Null <--Conditionの結果がFALSEのもの
Component: C__30XXX; Installed: Local; Request: Local; Action: Absent <--Conditionの結果がTRUEのもの

調べるとAction: Absentはアンインストール時に出力され、
RequestとActionは基本同じになるはずと…

"削除されてしまう修復"のほうでは Request: Local; Action: Absentと
RequestとActionで内容が異なります。

なぜこういう事象になってしまうのかが判らず、どういう手段で原因を突き止めたら
よいかも判らずにいます。

行き詰った状態で困っております。
何でも構いませんのでアドバイスをいただけると大変助かります。
よろしくお願いいたします。

引用返信 編集キー/
■69765 / inTopicNo.6)  Re[5]: セットアップの修復機能について
□投稿者/ 焦げ太 (7回)-(2014/01/28(Tue) 16:53:47)
No69752 (焦げ太) に返信

結局原因がわからないため、「プログラムの追加」に表示される
「変更」を非表示にする方向でいくことにしました。

ORCAでPropertyテーブルのレコードに下記を追加することで
「変更」を非表示にしました。

Property:ARPNOMODIFY
Value:""

msiファイル直接起動時の対応は考えていません。

とっちゃんさん、ご対応ありがとうございました。
解決済み
引用返信 編集キー/
■69776 / inTopicNo.7)  Re[5]: セットアップの修復機能について
□投稿者/ とっちゃん (189回)-(2014/01/29(Wed) 11:32:48)
とっちゃん さんの Web サイト
No69765 (焦げ太 さん) に返信


> 結局原因がわからないため、「プログラムの追加」に表示される
> 「変更」を非表示にする方向でいくことにしました。
>
数値が格納されているなら(REG_DWORDのエントリーを検索したなら)
#1 などという形でプロパティに取り込まれるはずなんですけどねぇ。。。

http://social.msdn.microsoft.com/Forums/vstudio/ja-JP/3e4e02e3-5c7e-4d15-adc6-08406a38d423/condition?forum=vsgeneralja

VS2005の頃のものですが、同じような質問に回答していたのがあったのでリンクを張っておきます。
参考にはならなそうですけど。。。

あと、レジストリ検索に関する部分のリファレンスも
http://msdn.microsoft.com/en-us/library/aa371171.aspx


Condition に、REGISTRY_TEST="#1" と書いていて、うまくいかないとなるとおそらくVSセットアップでは設定できないような
状態判定が必要になると考えられますが、それがなにかについては正直わかりません。

このあたりまで来ると、おそらく現物と状況を照らし合わせてガチで調査しないと解決には持っていけない気がします。
(そしてそのレベルになるといろいろ知らなくていい情報まで入ってきてしまうので掲示板では実現不可)

あと、修復を直接呼び出した場合は、UIシーケンスが動きません。
もしかすると、UIシーケンスが動いた場合だけうまくいかない何かがあるのかもしれません。




> ログで気になるところがありまして…
> 「Component:…」と出力されている個所ですが、、、
>
> Conditionの結果がFALSEのものはどちらも同様にログが書かれていました。
> Conditionの結果がTRUEのものはActionが「Local」と「Absent」で異なる内容が書かれていました。
>
> 【正常に動作する修復】
> Component: C__2DXXX; Installed: Local; Request: Null; Action: Null <--Conditionの結果がFALSEのもの
> Component: C__30XXX; Installed: Local; Request: Local; Action: Local <--Conditionの結果がTRUEのもの
>
> 【削除されてしまう修復】
> Component: C__2DXXX; Installed: Local; Request: Null; Action: Null <--Conditionの結果がFALSEのもの
> Component: C__30XXX; Installed: Local; Request: Local; Action: Absent <--Conditionの結果がTRUEのもの
>
> 調べるとAction: Absentはアンインストール時に出力され、
> RequestとActionは基本同じになるはずと…
>
> "削除されてしまう修復"のほうでは Request: Local; Action: Absentと
> RequestとActionで内容が異なります。
>
> なぜこういう事象になってしまうのかが判らず、どういう手段で原因を突き止めたら
> よいかも判らずにいます。
>
こちらだけ。


> Component: C__2DXXX; Installed: Local; Request: Null; Action: Null <--Conditionの結果がFALSEのもの
ここの読み方とパターンを書いておきます。

Component: <コンポーネント名>; Installed: <現在の状態>; Request: <次にどうしたいか>; Action: <実際に行う内容>
となります。

これらの値は、MsiGetComponentState の結果と、これから実行しようとするリクエストをログに表示したものとなります。
仕様としては、Null(INSTALLSTATE_ABSENT) や、Local(INSTALLSTATE_LOCAL) のほかにも値は存在しますが
VSセットアップの場合でログとして出てくるのは、Installed と Request については、Null(未インストール),Local(インストール済み)の2種類
Action については、Null(何もしない)、Local(インストールする)、Absent(アンインストールする) の3種類になります。

解決済み
引用返信 編集キー/
■69777 / inTopicNo.8)  Re[6]: セットアップの修復機能について
□投稿者/ 焦げ太 (8回)-(2014/01/29(Wed) 12:08:01)
No69776 (とっちゃん さん) に返信

情報ありがとうございます。

> 数値が格納されているなら(REG_DWORDのエントリーを検索したなら)
> #1 などという形でプロパティに取り込まれるはずなんですけどねぇ。。。
>
> http://social.msdn.microsoft.com/Forums/vstudio/ja-JP/3e4e02e3-5c7e-4d15-adc6-08406a38d423/condition?forum=vsgeneralja
>
> VS2005の頃のものですが、同じような質問に回答していたのがあったのでリンクを張っておきます。
> 参考にはならなそうですけど。。。

当初Condition への記述方法がわからず上記サイトを参考にしておりました。
また、念のためレジストリの値を確認したところ「REG_DWORD」になっていました。

> このあたりまで来ると、おそらく現物と状況を照らし合わせてガチで調査しないと解決には持っていけない気がします。
> (そしてそのレベルになるといろいろ知らなくていい情報まで入ってきてしまうので掲示板では実現不可)

正直、私ではこれ以上手に負えない感があるのと、作業時間の都合もあり
「変更」を非表示にする方向でいくことにしました。

> Component: <コンポーネント名>; Installed: <現在の状態>; Request: <次にどうしたいか>; Action: <実際に行う内容>
> となります。
>
> これらの値は、MsiGetComponentState の結果と、これから実行しようとするリクエストをログに表示したものとなります。
> 仕様としては、Null(INSTALLSTATE_ABSENT) や、Local(INSTALLSTATE_LOCAL) のほかにも値は存在しますが
> VSセットアップの場合でログとして出てくるのは、Installed と Request については、Null(未インストール),Local(インストール済み)の2種類
> Action については、Null(何もしない)、Local(インストールする)、Absent(アンインストールする) の3種類になります。

勉強になります。

すでにVS2012ではセットアッププロジェクトがなくなってしまいましたので
時間のあるときにでもWiXへの移行を考えようかなと思っています。
またその時は質問がいろいろと出てきそうですのでお世話になるかと思います。

とっちゃんさん ありがとうございました。
解決済み
引用返信 編集キー/
■69779 / inTopicNo.9)  Re[7]: セットアップの修復機能について
□投稿者/ とっちゃん (190回)-(2014/01/29(Wed) 13:27:01)
とっちゃん さんの Web サイト
No69777 (焦げ太 さん) に返信

>>このあたりまで来ると、おそらく現物と状況を照らし合わせてガチで調査しないと解決には持っていけない気がします。
>>(そしてそのレベルになるといろいろ知らなくていい情報まで入ってきてしまうので掲示板では実現不可)
>
> 正直、私ではこれ以上手に負えない感があるのと、作業時間の都合もあり
> 「変更」を非表示にする方向でいくことにしました。
>
それでも問題ないと思います。
変更からできることは、修復とアンインストールの二つしかありませんし
どちらも、別途呼び出す手段を持っていますので。



> すでにVS2012ではセットアッププロジェクトがなくなってしまいましたので
> 時間のあるときにでもWiXへの移行を考えようかなと思っています。
> またその時は質問がいろいろと出てきそうですのでお世話になるかと思います。
>
あまり情報は多くありませんが、InstallShield Limited Edition を利用するという選択肢もあります。
こちらは、vdproj からのコンバート機能も持っています。

また、VS2013(2012は未確認)の機能拡張に、vdproj からwixに変換するツールやGUIで作成できるIsWIXなどもあります。

いずれも、日本国内にサポート拠点はありませんが、ユーザーフォーラムなどもあるので、それらを軸にいろいろ探ってみてもよいと思いますよ。

国内のユーザーコミュニティとしては、http://www.freeml.com/msi があります。
WiXやISなど、WindowsInstaller関係なら何でもありで扱ってるML(Web上でのやり取りも可能)です。

解決済み
引用返信 編集キー/
■69784 / inTopicNo.10)  Re[8]: セットアップの修復機能について
□投稿者/ 焦げ太 (9回)-(2014/01/29(Wed) 16:04:41)
No69779 (とっちゃん さん) に返信

>>すでにVS2012ではセットアッププロジェクトがなくなってしまいましたので
>>時間のあるときにでもWiXへの移行を考えようかなと思っています。
>>またその時は質問がいろいろと出てきそうですのでお世話になるかと思います。
>>
> あまり情報は多くありませんが、InstallShield Limited Edition を利用するという選択肢もあります。
> こちらは、vdproj からのコンバート機能も持っています。
>
> また、VS2013(2012は未確認)の機能拡張に、vdproj からwixに変換するツールやGUIで作成できるIsWIXなどもあります。
>
> いずれも、日本国内にサポート拠点はありませんが、ユーザーフォーラムなどもあるので、それらを軸にいろいろ探ってみてもよいと思いますよ。
>
> 国内のユーザーコミュニティとしては、http://www.freeml.com/msi があります。
> WiXやISなど、WindowsInstaller関係なら何でもありで扱ってるML(Web上でのやり取りも可能)です。

情報ありがとうございます。
1からWiXはハードルが高そうですので vdproj から変換しようと思います。
教えていただいたサイトも参考にさせていただきます。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -