カテゴリ:スクリプティング( 3 )

e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇

環境変数からシステムフォルダのドライブパスが得られない!!!対策

VBSにて、システムフォルダやシステムドライブのパスを取得する方法が見つからない。
環境変数から持ってこようと思ったけど、SysremDrive が空。
SystemRoot も空。
windir は、 %SystemRoot% という文字が返ってくる。

Set shell = CreateObject("Wscript.Shell")
Set env = shell.Environment("System")
msgbox env("SysremDrive") ' 空
msgbox env("SystemRoot") ' 空
msgbox env("windir") ' %SystemRoot%


やっと見つけた解決方法が、これ。

sysdrv = Left(shell.SpecialFolders("Fonts"), 3)

[PR]
by isoq | 2008-11-14 16:46 | スクリプティング
e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇

VBスクリプトで、コマンド実行結果をリダイレクト

VBスクリプトで、コマンド実行結果をリダイレクトするには、
コマンド(cmd.exe)を実行してリダイレクトさせないといけない。
ただ exe パスを指定して > を入れても、リダイレクト出来ない。

Option Explicit
Dim shell
Set shell= WScript.CreateObject("WScript.Shell")
shell.Run "%ComSpec% /c dir > c:\dir.txt"

[PR]
by isoq | 2008-11-14 09:49 | スクリプティング
e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇

カスタム動作にインストールパスを渡す方法

WScript.ScriptFullName をコールした瞬間、スクリプト処理が停止して、ロールバックしてしまう。

カスタム動作の「インストール」でも「確定」でもだめ。

実際には、ファイルからではなく、インストーラ内のバイナリテーブルから直接呼び出されているノかもしれません。

このスクリプトで、インストール先のファイル操作などをしたいのですが、インストール先ディレクトリパスを取得する方法が有りません。
(このとき、スクリプトのカレントディレクトリは、システムディレクトリになっている。。。)

なんなんだ、これは。
困り果てました。

追記

結局、インストーラでインストール先ディレクトリを レジストリに書き込んで、VBS側では、そのパスを読み込んで使用する方法で落ち着きました。


Set shell = CreateObject("WScript.Shell")
target = shell.RegRead("HKCU\Software\Company\Product\TARGETDIR")

shell.Run "regsvr32 /s """ & target & "\xx_ocx\xxx.ocx""",,True


そもそも、インストーラ側でOCXの登録順が制御出来ないからこんな事になっているのです。

追記2

ちなみに、shell.Run で実行したプログラムが失敗を示す終了コードで終了すると、
どうやら VBS のエラーが発生する(?仕組みは不明)らしく、インストーラが
カスタム動作の失敗と認識してしまい、インストールプロセスがロールバックしてしまいます。

また、アンインストール時のカスタム動作が失敗すると、
アンインストール出来ない状態(!)になってしまいます。
この場合でも、VBS ファイルをインストール先に書き込むようにしてあれば、
スクリプトファイルを編集してデバッグが可能です。

どうしようもない時には、スクリプトファイルを空にして、無理矢理アンインストールを
成功させる手も使えます。
[PR]
by isoq | 2008-11-13 17:08 | スクリプティング
e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇