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

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

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

Re[4]: Install Shield カスタムアクション機能について


(過去ログ 90 を表示中)

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

■53888 / inTopicNo.1)  Install Shield カスタムアクション機能について
  
□投稿者/ ヒロ (1回)-(2010/09/29(Wed) 12:15:47)

分類:[その他の言語] 

Install Shield 2008について質問です。

カスタムアクションでVBスクリプトを実行して、その結果次第で次のアクションを分岐したい場合、
VBスクリプトのパラメータをインストーラ側に渡す方法はあるでしょうか?


VBスクリプト側にパラメータを渡す方法(Session.Property("XXXX"))は存じてますが、
VBスクリプトからインストーラ側にパラメータを渡す方法がわかりません。
プロパティーマネージャに自作の変数を作成して、それをVBスクリプト側から上書きなどできれば一番よいのですが・・・
方法をご存知の方がいましたらご教授お願いできないでしょうか?

念のため実装したいこと表記しますと、VBスクリプトでレジストリの値を取得して、
値によってインストールシーケンスのUI表示を変更することをしたいと思っています。
引用返信 編集キー/
■53890 / inTopicNo.2)  Re[1]: Install Shield カスタムアクション機能について
□投稿者/ とっちゃん (544回)-(2010/09/29(Wed) 12:54:26)
とっちゃん さんの Web サイト
No53888 (ヒロ さん) に返信
> VBスクリプト側にパラメータを渡す方法(Session.Property("XXXX"))は存じてますが、
> VBスクリプトからインストーラ側にパラメータを渡す方法がわかりません。
> プロパティーマネージャに自作の変数を作成して、それをVBスクリプト側から上書きなどできれば一番よいのですが・・・
> 方法をご存知の方がいましたらご教授お願いできないでしょうか?
>
Session.Property("XXXX")はリードオンリーではなかったと思いますけど?

書き込みできるかどうか試してみましたか?

> 念のため実装したいこと表記しますと、VBスクリプトでレジストリの値を取得して、
> 値によってインストールシーケンスのUI表示を変更することをしたいと思っています。
レジストリデータをプロパティに取り込む機能があります。

「システムの検索」をキーワードにヘルプを探してみてください。
IS9のころは、動作とロジックのツリーの下にありましたが、IS2008でどこにあるのかはわかりません。

もしかしたらそっちの仕組みを使ってプロパティに取り込んでしまえば事足りるかもしれませんよ。


引用返信 編集キー/
■53904 / inTopicNo.3)  Re[2]: Install Shield カスタムアクション機能について
□投稿者/ ヒロ (2回)-(2010/09/29(Wed) 19:49:41)
丁寧な返信ありがとうございます。

> レジストリデータをプロパティに取り込む機能があります。

確認しました。「システムの検索」でレジストリの値を取得できました。
このレジストリの値というのは、setup.exeが起動したときのレジストリの値になりました。
先ほど質問では記述していませんでしたが、レジストリ値の取得前に
カスタムアクションで別exeファイルを実行して、結果を一時的にレジストリ値に書き込み、
その値を取得しようとしています。このためVBスクリプト(カスタムアクション実行時)に動的に
レジストリ値を読み込む方法になると思います。



> Session.Property("XXXX")はリードオンリーではなかったと思いますけど?

詳しく知らなかったため、調べてみて以下のコードでカスタムアクションを作成してみましたが、
うまくMSI側のプロパティーマネージャの変数に反映することはできませんでした・・・
"ReInstallProhibition"がプロパティマネージャ側の変数になります。間違いがわかりましたら
教えていただけないでしょうか?


Option Explicit
On Error Resume Next

Dim objWshShell ' WshShell オブジェクト
Dim nReInstallVal
Dim strMsg

nReInstallVal = 0

Set objWshShell = CreateObject("WScript.Shell")
If Err.Number = 0 Then
nReInstallVal = objWshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\XXXX\XXXX\Val")
Else
msgbox( "エラー" )
End If

'デバック
strMsg = "reinstall flg == " & nReInstallVal
msgbox( strMsg )

'nReInstallValの値をインストーラ側に知らせる
Session.Property("ReInstallProhibition") = nReInstallVal
'Property("ReInstallProhibition") = nReInstallVal
'Session.TargetPath("ReInstallProhibition") = nReInstallVal

Set objWshShell = Nothing
引用返信 編集キー/
■53906 / inTopicNo.4)  Re[3]: Install Shield カスタムアクション機能について
□投稿者/ ヒロ (4回)-(2010/09/29(Wed) 21:19:14)
解決しました。
Session.Property("ReInstallProhibition") = nReInstallVal
の箇所を文字として入力を行わないと、MSI側のプロパティに反映されないようです。

ありがとうございました。
解決済み
引用返信 編集キー/
■53916 / inTopicNo.5)  Re[4]: Install Shield カスタムアクション機能について
□投稿者/ とっちゃん (545回)-(2010/09/30(Thu) 10:03:20)
とっちゃん さんの Web サイト
No53906 (ヒロ さん) に返信
> 解決しました。
> Session.Property("ReInstallProhibition") = nReInstallVal
> の箇所を文字として入力を行わないと、MSI側のプロパティに反映されないようです。
>
Property でやり取りできるのは、文字列または、数値(整数)のいずれかのはずです。

nReInstallVal の型を規定していないので、VARIANT型になっており
objWshShell.RegRead() の戻り値を数値または文字列として認識していない状態で
受け取っているから、エラーになっているのだと思います。

いずれにしても、変数の型を規定せずに記述しないように心がけることで
このようなエラーは発生しなくなりますよ。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -