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\commandFOR /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
0 件のコメント:
コメントを投稿