プログラミング

SFC miniのインストールがWindows Vistaで失敗する件について

2008年3月21日

現在配布中のSFC mini ver 1.0.1をWindows Vistaにインストールしようとすると、次のようなエラーが出てインストールできません。

the call to DLLRegisterServer failed with error code 0x80004005

このエラーを回避するためには、次に述べるいずれかの方法を用いてください。

1)管理者としてコマンドプロンプトを開き、SFC mini ディレクトリに移動した後に、install-AMD.vbsもしくはinstall-INTEL.vbsを実行する。
2)MakeExeを用いてinstall-AMD.vbsもしくはinstall-INTEL.vbsをexeファイルに変換した後、このexeファイルを管理者として実行する。

いずれの方法でもインストール可能なはずです。

また、Windows Vistaのバグだと思われること(下記参照)が原因で、サンプルプログラムのいくつかが動きません。VBSファイルを少し改変することで、この不具合を回避することができます。例えば、WinSockClient.vbsの場合だと、2行目あたりを次のように変更してください。

dim code
code=CreateObject("SfcMini.tools").Include("<Winsock.vbs>")
Execute code

WinForm等のライブラリを用いているスクリプトについては、ライブラリ自身のVBSファイルを変更する必要があります。これについては、時期配布バージョンで対応する予定です。

(参考)

1)この不具合についてですが、COMからの戻り値である文字列を直接Executeした場合に、Execute自体は成功するけれども、その直後に不具合が発生するという状況です。ガベージコレクタ周りの不具合では無いかと考えています。WSHのこのような利用の仕方はまれなケースなので、Windows側でこのことについて改善されるかどうかは分かりません。

2)Windows Vistaでは、wscript.exeに対してDEPを無効にすることはできないようです。WinForm等を利用するスクリプトを実行する場合は、install-AMD.vbsを利用してください。

コメント

Kat (2008年3月21日 16:29:03)

備忘メモ:

VBScriptにおいて、管理者権限でアプリケーションを実行する方法:

Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute strApplication, strArguments, "", "runas"

参考:
http://technet.microsoft.com/en-us/magazine/cc162321.aspx

Kat (2008年4月7日 12:50:07)

備忘メモ:

Windowsのバージョンをチェックするコードを発見:
http://www.microsoft.com/japan/technet/community/columns/scripts/sg0903.mspx

Set objWMIService = GetObject("winmgmts:" & _
    "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
    ("SELECT * FROM Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
    Wscript.Echo "OS Name: " & objOperatingSystem.Caption
    Wscript.Echo "Version: " & objOperatingSystem.Version
Next

実行結果:
OS Name: Microsoftr Windows VistaT Home Premium
Version: 6.0.6000

Kat (2008年4月7日 12:53:15)

WSH のバージョンは、WScript.versionで取得できる。Vistadでは、5.7を返す。

Kat (2008年10月15日 16:44:36)

コメント送信