treedown’s Report

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

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

バッチファイルでVisio Viewer2010から2016へバージョンアップ

Visio VewerというVisioファイルをブラウザで閲覧することが出来るMicrosoft提供の無償ツールがあります。
Office2010バージョンがサポート終了に伴い、2016にバージョンアップしたのでご報告です。

バッチファイルの話題が多いような気がしますが、Microsoftのサービス終了がこの秋(10月くらいから冬に掛けて)に多くあるため、入れ替え作業でバッチ処理を多用しているせいです。

Office2010のサポートが終了

Office2010が2020年10月13日で終了します。延長サポートフェーズの終了日なので、これ以降は一切セキュリティアップデートが提供されなくなる「完全終了」の日になります。
※つまり翌月の更新プログラム提供日まではロスタイム?みたいな期間ってことになります。

それに伴って何台かそのままで残されてきたOfficeのバージョンアップ作業を実施しているのですが、ふと、気づいたのがVisio Viewerが2010でした。
Microsoftダウンロードセンターでダウンロードして自由に使えるツールなので、とりあえず入れておけという感じでインストールしていたのですが、これも2010ってことはバージョンアップしないといけない、ということに気づきました。
Visioって高級品なので、Visio図面を見るだけならMicrosoftダウンロードセンターから無償でダウンロード可能なVisio Viewerを使うのが便利です。

■Microsoft Visio 2016 Viewer
https://www.microsoft.com/ja-jp/download/details.aspx?id=51188

ここから入手可能です。

アンインストールとインストール

今回のバッチファイル処理対象は、Visio Viewer。
バージョン2010をアンインストールして2016をインストールします。

さっそくダウンロードしたファイルに「/?」オプションを付けて実行してみることで、インストールオプションが利用可能かどうかを確認してみることにします。

すると、こんな感じの画面が表示されます。

f:id:treedown:20201004041854p:plain

---------------------------
Microsoft Visio Viewer 2016
---------------------------
使い方:
/extract:path このパッケージの内容をこのパス フォルダーに解凍します。
/log[:ログファイルのパス] 更新のインストール時に詳細なログを記録します。
/lang:lcid パッケージで複数のロケールを使用できる場合に、ユーザー インターフェイスを特定のロケールに設定します。
/quiet このパッケージをサイレント モードで実行します。
/passive ユーザーによる操作なしで更新を実行します。
/norestart マシンの再起動が必要な場合に、ユーザーに確認メッセージを表示しないようにします。
/forcerestart 更新が完了したら、マシンを強制的に再起動します。
/? このヘルプ メッセージを表示します。
---------------------------
OK
---------------------------

「/quiet」を使えばできそうということが分りました。

Visio Viewer 2010アンインストール

アンインストールは、レジストリキーからVisio ViewerのUninstallStringを探し出すことでバッチファイルに組み込むコマンドが発見できます。

探すと、
「MsiExec.exe /I{95140000-0052-0411-0000-0000000FF1CE} 」
というキーが発見できました。
MsiExecのヘルプから、アンインストールは「/uninstall」さらにサイレントでは「/quiet」オプションが利用できるので、この二つを付与したコマンドライン

MsiExec.exe /uninstall {95140000-0052-0411-0000-0000000FF1CE} /quiet

を実行することでアンインストールが実行可能であることが分ります。

対象の環境(動作条件)

対象のWindows環境はWindows10と8.1の混在環境ですがすべて64ビットOSで統一されています。そのため、32ビットOSは現状では存在していないことから(パスの判定に手間が掛かることを考慮して)32ビットOSは判定して何もせず終了させてしまうことにします。

あとは、Visio Viewer 2010がインストールされている環境だけを対象としてアンインストールを動作させ、インストールされていない環境ではVisio Viewer 2016のインストールだけを実行して終了させることにします。

処理待ち=timeoutコマンド

今回処理待ちに始めてtimeoutコマンドを使ってみました。
コマンドプロンプトで「timeout /?」とすると使い方の説明を確認出来ます。実際使ってみると

f:id:treedown:20201004042632p:plain

ちょっとした待ちを入れるのに便利そうです。アンインストールとインストールの間に(確実に両方を実行させるために)ちょっとした待ち時間をいれたかったので、これを使ってみることにします。

バッチファイル

テストでは上手く実行できました。まだファイルサーバの共有フォルダ経由ではやっていないのですが、パスの文字列がUNCに変わるだけだから動作するだろうと思っています。

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

rem 判定対象ファイル名の入力(フルパス)
set ExistingFile=C:\Program Files (x86)\Microsoft Office\Office14\VPREVIEW.EXE
set Putfile=C:\Program Files\Microsoft Office\Office16\VPREVIEW.EXE
rem set APRGDir=\\FileServer\ShareF
set APRGDir=C:\temp
set InstFile=visioviewer2016_4339-1001_x64_ja-jp.exe

rem 対象バージョンの確認
rem OSビット数判定:32ビットOSは対象外のため何もせず終了させる
if "%PROCESSOR_ARCHITECTURE%" EQU "AMD64" goto ChkExecfile
if "%PROCESSOR_ARCHITECTURE%" EQU "x86" goto end

:ChkExecfile
if exist "%ExistingFile%" goto uninst2010
rem ファイルが存在しない場合
goto inst2016

:uninst2010
rem アンインストール実行、10秒待つ
MsiExec.exe /uninstall {95140000-0052-0411-0000-0000000FF1CE} /quiet
timeout /t 10 > nul

:inst2016
rem インストール済みならそのまま終了
if exist "%Putfile%" goto end
rem インストール実行
%APRGDir%\%InstFile% /quiet

:end
set ExistingFile=
set Putfile=
set APRGDir=
set InstFile=

--------------------------------------------------------------
ここまで
C:\tempにこのバッチファイルとセットアップファイルである「visioviewer2016_4339-1001_x64_ja-jp.exe」を格納してバッチファイルをワンクリックでサイレント実行ができました。

f:id:treedown:20201004042045p:plain
格納場所などは変数にしてあるので、実際の環境に合わせてパスを書き換える感じです。