Lenovo ThinkPadにSystem Interface Foundationがインストールできない。
インストーラはインストールに成功したというがコントロールパネルのプログラムと機能には現れない。
インストールが完了したところで、インストーラを終了する前に%TEMP%\is-PH9SO.tmpを見ると、ServiceTotal_inst.cmdというファイルがあったので調べてみた。
%TEMP%\is-PH9SO.tmp\ServiceTotal_inst.cmdの一部
::Begin to install all components
::
set Key="HKLM\System\CurrentControlSet\Control\Nls\Language"
for /F "tokens=3" %%a in ('reg query %Key% ^| find /i "Default"') do set /a
findというコマンドを実行しているが、このPCにはcygwinを入れているので、C:\WINDOWS\system32\find.exe
ではなく、cygwinのfindが実行され、結果的にこのスクリプトがうまく動いていない。
一時的に環境変数PATHからcygwinを消してインストーラを実行したら、正しくインストールできた。
いろいろな環境で実行されるプログラムでは、勝手な前提をせず、内部でPATH変数を設定するなりフルパスで書くなりする必要があるという例。
参考:
シェルスクリプト :: シェルスクリプトのセキュリティーを高める
シェルスクリプトを書くときに気をつける9箇条
シェルスクリプトを書く時に気をつけている事など