treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

CubePDFのアップデート確認設定をバッチファイルで変更する

前回まででレジストリキーの場所が判明しましたので、今回はそのレジストリキーを元にバッチファイルを作ってみましたのでご報告です。

CubePDFを企業で自動展開している場合、使えるんじゃないかと。

レジストリの表示を確認

前回調べて判明したレジストリキー、それをコマンドラインで表示させてみることにします。

例えばCubePDF Utilityのキー「HKEY_CURRENT_USER\SOFTWARE\CubeSoft\CubePDF Utility2」をreg queryコマンドで表示させてみます。

アップデート設定が
--------------------------------------------------------------
C:\>reg query "HKEY_CURRENT_USER\SOFTWARE\CubeSoft\CubePDF Utility2" /v "CheckUpdate"

HKEY_CURRENT_USER\SOFTWARE\CubeSoft\CubePDF Utility2
CheckUpdate REG_DWORD 0x1
--------------------------------------------------------------

こういう感じでコマンドプロンプト画面に表示されます。

抜き出すにはパイプシンボル(|)に続けて「find "0x1"」を付けて抜き出します。
--------------------------------------------------------------
C:\>reg query "HKEY_CURRENT_USER\SOFTWARE\CubeSoft\CubePDF Utility2" /v "CheckUpdate" | find "0x1"
CheckUpdate REG_DWORD 0x1
--------------------------------------------------------------

なんとなく判定に使えそうになってきました。

現在の設定を元に判定して処理を分岐するには

以前、

blog.treedown.net

でやったときみたいに、
if %ERRORLEVEL% == 1 goto 処理
if %ERRORLEVEL% == 0 goto 処理
で判定させるとうまく出来そうです。
findで指定した条件で戻り値をERRORLEVELで判定すると、条件を満たせばERRORLEVELは0に、条件外の場合にはERRORLEVELは1で判定できます。

例えば、「find "0x1"」でCheckUpdateキーが「1(※アップデート確認有効)」ならレジストリキーを書き換えるようにするには、
--------------------------------------------------------------
if %ERRORLEVEL% == 0 reg add "HKEY_CURRENT_USER\SOFTWARE\CubeSoft\CubePDF Utility2" /f /v "CheckUpdate" /t REG_DWORD /d 0
if %ERRORLEVEL% == 1 goto end
--------------------------------------------------------------
という具合に、reg addコマンドでCheckUpdateキーに「0(※アップデート確認無効)」を書き込む処理を入れてしまえば目的は達成出来そうです。

バッチファイルを形にしてみる。

さっそく、テスト用のecho文で画面に確認用メッセージを表示するようにして処理の途中を確認してみたバッチファイルを作ってみました。

--------------------------------------------------------------
@echo off

echo 0x1で動作確認
reg query "HKEY_CURRENT_USER\SOFTWARE\CubeSoft\CubePDF Utility2" /v "CheckUpdate" | find "0x1"
rem echo 0x0で動作確認
rem reg query "HKEY_CURRENT_USER\SOFTWARE\CubeSoft\CubePDF Utility2" /v "CheckUpdate" | find "0x0"

rem 条件を満たせばERRORLEVELは0に、条件外の場合にはERRORLEVELは1になる
if %ERRORLEVEL% == 0 goto NoUpdSet
if %ERRORLEVEL% == 1 goto Confirmation

:NoUpdSet
echo "ERRORLEVELは"%ERRORLEVEL%
echo アップデート確認がされるようになっています。変更します。
reg add "HKEY_CURRENT_USER\SOFTWARE\CubeSoft\CubePDF Utility2" /f /v "CheckUpdate" /t REG_DWORD /d 0
echo 以下のように変更しました。
reg query "HKEY_CURRENT_USER\SOFTWARE\CubeSoft\CubePDF Utility2" /v "CheckUpdate"
goto end

:Confirmation
echo "ERRORLEVELは"%ERRORLEVEL%
echo もう一回0x0で動作確認
reg query "HKEY_CURRENT_USER\SOFTWARE\CubeSoft\CubePDF Utility2" /v "CheckUpdate" | find "0x0"
echo "ERRORLEVELは"%ERRORLEVEL%
echo なので、アップデートは確認されない「0」です
if %ERRORLEVEL% == 0 goto end
if %ERRORLEVEL% == 1 goto exception
goto end

:exception
rem echo 「0」や「1」以外の想定外の値が検出されたため、記録して終了します。
rem reg query "HKEY_CURRENT_USER\SOFTWARE\CubeSoft\CubePDF Utility2" /v "CheckUpdate">>%DATE:/=%.txt
goto end

:end
echo 処理を終了します。
--------------------------------------------------------------
最初にCheckUpdateキーの値が0/1かを判定して、1なら0に書き換え、それ以外なら追加の確認で0かそれ以外かを確認し、0なら何もせず終了、それ以外なら(上記バッチではコメントアウトしていますけど)ファイルにレジストリ値を書き出して終了しています。
単純にアップデート確認の有効を無効に書き換えるだけなので、他の値だった場合にはあまりいじりたくない。
レジストリキーが見つからない場合でも

f:id:treedown:20200731015026p:plain
特にレジストリキーを変更することなく終了します。CubePDFやUtilityが未導入の環境で誤って実行してしまったとしても、判定を入れ子にして最終的に何もせず終了するようになっています。

また、HKCU(HKEY_CURRENT_USER)のレジストリキーなので、管理者権限は不要、ユーザの権限でバッチファイルを実行するだけでよさそうです。
さらに、CubePDFに使うには実際に上記のバッチの"HKEY_CURRENT_USER\SOFTWARE\CubeSoft\CubePDF Utility2"を"HKEY_CURRENT_USER\SOFTWARE\CubeSoft\CubePDF\v2"に置き換えればそのまま使えます。

どっちもアップデート確認の無効化

今回の環境ではCubePDFとCubePDF Utilityの両方を利用している環境だったので、単純に両方をツラツラと書き連ねることにしました。
テスト用に使っていた余計なecho文は除いて、実行したいコマンドだけを判定して実行するように書き換えています。

--------------------------------------------------------------
@echo off

reg query "HKEY_CURRENT_USER\SOFTWARE\CubeSoft\CubePDF\v2" /v "CheckUpdate" | find "0x1"
if %ERRORLEVEL% == 0 goto NoUpdSet
if %ERRORLEVEL% == 1 goto Confirmation

:NoUpdSet
reg add "HKEY_CURRENT_USER\SOFTWARE\CubeSoft\CubePDF\v2" /f /v "CheckUpdate" /t REG_DWORD /d 0
goto nextkey

:Confirmation
reg query "HKEY_CURRENT_USER\SOFTWARE\CubeSoft\CubePDF\v2" /v "CheckUpdate" | find "0x0"
if %ERRORLEVEL% == 0 goto nextkey
if %ERRORLEVEL% == 1 goto exception
goto nextkey

:exception
rem echo 「0」や「1」以外の想定外の値が検出されたため、記録して終了します。
rem reg query "HKEY_CURRENT_USER\SOFTWARE\CubeSoft\CubePDF\v2" /v "CheckUpdate">>%DATE:/=%.txt
goto nextkey

:nextkey
reg query "HKEY_CURRENT_USER\SOFTWARE\CubeSoft\CubePDF Utility2" /v "CheckUpdate" | find "0x1"
if %ERRORLEVEL% == 0 goto NoUpdSetU
if %ERRORLEVEL% == 1 goto ConfirmationU

:NoUpdSetU
reg add "HKEY_CURRENT_USER\SOFTWARE\CubeSoft\CubePDF Utility2" /f /v "CheckUpdate" /t REG_DWORD /d 0
goto end

:ConfirmationU
reg query "HKEY_CURRENT_USER\SOFTWARE\CubeSoft\CubePDF Utility2" /v "CheckUpdate" | find "0x0"
if %ERRORLEVEL% == 0 goto end
if %ERRORLEVEL% == 1 goto exceptionU
goto end

:exceptionU
rem echo 「0」や「1」以外の想定外の値が検出されたため、記録して終了します。
rem reg query "HKEY_CURRENT_USER\SOFTWARE\CubeSoft\CubePDF Utility2" /v "CheckUpdate">>%DATE:/=%.txt
goto end

:end
echo 処理を終了します。
--------------------------------------------------------------

単純に、"HKEY_CURRENT_USER\SOFTWARE\CubeSoft\CubePDF Utility2"と"HKEY_CURRENT_USER\SOFTWARE\CubeSoft\CubePDF\v2"の配下にある二つのCheckUpdateを確認して、1なら0に書き換える、それ以外なら何もしない、という単純な処理のバッチファイルです。

なんか、もうちょっとスリムにイケてる風に出来そうな気もしますけど…。

ただ、ユーザに
「○○の画面を開いて、○○の箇所のチェックボックスをOFFにしてください」
という説明の手順をアナウンスするのは結構な労力です。バッチファイルを実行するだけならダブルクリックするだけなのでハードルは低くなります。
※加えて、バッチファイルを自動実行する環境があるので、仕掛けてユーザに意識させないうちに、設定値を変えてしまうんですけど。

ちょっとしたことですが、やはりバッチファイルは便利。