ページ

2013年8月5日月曜日

FDT.exeがインストールされているか自動判定する


PCと接続されている機器のファームウェアのバージョンアップを自動化したいという要求は多々あると


Renesas FDT.exe

レジストリのUninstallリストを見る方法

レジストリのUninstallプログラムリストを見れば、既にインストールされているプログラムの一覧を取得できる。
以下がそのレジストリ名。

  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{プロダクトID}

FDTのプロダクトIDを調査した。

  • V409 {376379F3-E708-453E-B5C1-FB60675C513C}
  • V408 {0776792E-F51C-4CE5-A4FB-86E126DB9C81}
  • V403 {29170013-CC82-4D81-BEB3-970662DD7A98}
  • V401 {287BC16B-9185-4E2B-B713-557A1ADF9590}
手元にあるいくつかのバージョンを
ということで、各バージョンのプロダクトIDが異なるため、全てのバージョンをのプロダクトIDを事前に調べて、全部を検知するのは、賢いやり方では無さそう。


関連付けファイルの情報などのレジストリを見る方法

そこで、別の方法を考えてみる。
FDTのインストール時にデフォルトでは拡張子に関連付け処理が適応される。
ということは、関連ファイルが起動される際の、起動プログラム情報がレジストリに追加されているはずである。
レジストリを調査していると、以下のレジストリ名を発見した。

  • HKEY_CLASSES_ROOT\FDT4.Config\shell\open\command

この中を見ると

  • "C:\Program Files\Renesas\FDT4.09\fdt.exe" "/DISCRETESTARTUP" "w4fRun \"%1\""

と書いてあった。バージョンによってフォルダ名が違うものの、インストールされた痕跡はこれで分かる。痕跡と書いたが、アンインストールされてもこの情報は残っている為、実態があるかどうかは別途調べなければならない。

レジストリの値を抽出する方法

バッチファイルでレジストリの値を抽出すること自体はとても簡単。

【レジストリの値を抽出する】

SET FDT_REG_KEY_CONF=HKEY_CLASSES_ROOT\FDT4.Config\shell\open\command
FOR /F "TOKENS=2,3,* delims= " %%I IN ('REG QUERY "%FDT_REG_KEY_CONF%"') DO (
IF "%%I"=="REG_SZ" SET FDT_EXE_CMD_VALUE=%%J
)


ここまでは簡単。
しかし環境変数FDT_EXE_CMD_VALUEに入る文字列は

  • C:\Program Files\Renesas\FDT4.09\fdt.exe"

となっている。最後のダブルクォーテーションが余分だ。

文字列からダブルクォーテーションを削除する方法

色々試してみたが、テキストのテンポラリファイルに一旦掃き出すがのもっとも簡単だと思われる。

ECHO %FDT_EXE_CMD_VALUE%>tmp.txt
などで、テキストに掃き出してから以下のバッチファイルを呼び出す。

【ダブルクォーテーションを削除する.bat】

REM BATファイルのパラメータ
REM %1 対象テキストファイル名
if "%1"=="" goto end
set fname=%~1
copy %fname% org >nul
type nul >%fname%
for /f "delims=" %%a in ( org ) do (set line=%%a&& call :sub)

del /f org
goto end

:sub
set l=%line:"=%
>>%fname% echo %l%
goto :EOF

:end





バッチファイルで文字列からダブルクォーテーションを削除する。


バッチファイルで文字列からダブルクォーテーションを削除する。

バッチファイル制御を試みると、この問題にぶち当たることがあります。
例えばレジストリの内容を見て、プログラムフォルダを検索するなど、PATH名に空白がある場合は文字列がダブルクォーテーションで囲まれている。
そこにプログラムパラメーター等の文字列がさらに書き込まれている場合、for文で区切り文字処理がうまくできず、片方だけダブルクォーテーションが残ってしまってガックリ来たりします。
そうなると意外に面倒くさい。
ダブルクォーテーションが残ってしまった文字列をテキストファイルに吐き出して、そのテキストファイルから、ダブルクォーテーションを削除するバッチファイルを作成してみた。