先日、Microsoftの標準ブラウザである「Edge」のインストール先(実行ファイルの場所)をコマンドやスクリプトから取得しようとしてやり方がすぐに見つからず苦労したので、記事にしておこうと思います。
Edgeのインストール先は3通り
Edgeは、Windows10以上のOSについては標準でインストールされていますが、Windows7からバージョンアップした場合や、そもそもWindows7を未だに使用している環境だと、インストーラーでインストールをして導入しているケースもあります。
その場合、インストール先はOSのアーキテクチャの種類や管理者権限でインストーラーを実行したか否かによって、以下の3パターンに分かれます。
管理者権限実行 | アーキテクチャ | インストール先 |
---|---|---|
有り | 32bit | C:\Program Files\Microsoft\Edge\Application\msedge.exe |
64bit | C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe | |
無し | 32bit/64bit | C:\Users\ログインユーザー名\AppData\Local\Microsoft\msedge.exe |
管理者権限でインストールした場合は、32bit環境用のパスと64bit環境用のパスに別れるだけなのでわかりやすいのですが、ユーザー権限でインストールした場合は、ログインユーザー配下のパスにインストールされることになります。
この場合、例えばEdgeの実行ファイルをフルパスで指定して起動引数を渡してEdgeを起動したいケースなどで、Program Files配下に決め打ちでパスを指定することができなくなります。
以下の記事で紹介しているようなことをやろうとすると困ります。
デスクトップなどに配置されているEdgeのショートカットファイルのプロパティから実行ファイルまでのパスを探すことできますが、コマンドなどで自動化する場合は、ログインユーザーごとにパスが変わるのは都合が悪いです。
よって、コマンド実行などのCUIを用いた方法で、OSが持っている情報からEdgeのインストール先を取得することが必要になります。
これは不思議に感じますが、Edgeのアップデート処理を実行している「MicrosoftEdgeUpdate.exe」が32bitアプリケーションで作られているからなんですね。
実行ファイルを場所が書かれるレジストリ
実行ファイルの場所を取得する方法は幾つかありますが、個人的に一番手軽だったのは、レジストリを参照する方法です。
ただ、このレジストリもインストーラーを管理者権限で実行したか否かで書き込み先のキーの場所が変わります。
対象のレジストリは以下です。
管理者権限実行 | レジストリキー | 値の名前 | 値の種類 |
---|---|---|---|
有り | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\msedge.exe | Path | REG_SZ |
無し | HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\msedge.exe | Path | REG_SZ |
今回の記事ではEdgeに限定して紹介していますが、Edge以外のアプリケーションも上記のレジストリ「App Paths」の配下にインストール先のパスを書き込んでいます。
よって、Edgeのインストール先を探す目的に限らず、このレジストリの場所を知っておくと便利です。
Edgeのインストール先フルパスを取得するスクリプト(VBS)
前項で紹介したレジストリのコマンドなどのCUI上で取得する方法は幾つかありますが、当記事ではVBScriptを使用して対象のレジストリキーの値を取得するサンプルコードを紹介します。
サンプルコードとその解説
サンプルコード
Option Explicit
Const RegKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\msedge.exe\Path"
Dim objShell
Dim RegVal
Dim InstPath
Set objShell = CreateObject("WScript.Shell")
RegVal = ""
On Error Resume Next
'HKCU配下のレジストリの読み取りを試行します。
RegVal = objShell.RegRead("HKEY_CURRENT_USER\" & RegKey)
Err.Clear
'値が空なら対象のレジストリキーが存在しないと判定して次を試行します。
If RegVal = "" Then
RegVal = objShell.RegRead("HKEY_LOCAL_MACHINE\" & RegKey)
End If
Err.Clear
On Error GoTo 0
If RegVal = "" Then
Msgbox "Edge がインストールされていません。" & vbCrlf & "処理を中止します。"
Wscript.Quit
End If
InstPath = RegVal & "/msedge.exe"
Msgbox "Edge のインストール先:" & InstPath
サンプルコードの解説
当サンプルプログラムでは、レジストリを参照してEdgeのインストール先にある実行ファイルのフルパスを取得してメッセージボックスで表示します。
7行目で生成した「WScript.Shell」オブジェクトを使用して、12行目で「RegRead」メソッドを使ってレジストリの値を取得しようとしています。
ただ、RegReadでは引数で渡されたキーが存在しないとエラーになります。
そのキーの存在チェックをスマートに実装する方法はなかったため、10行目で「On Error Resume Next」を入れて、エラーが出ても無視して処理を進めています。
対象のレジストリキーが存在しなければ、変数「RegVal 」は空であり、次のレジストリキーへの参照処理に進めています。
若干強引な実装ですが、大きな問題は無いかと思います。
最後に
今回はEdgeのインストール先に関する解説や取得方法、VBSを使用したサンプルプログラムを紹介しました。
ネットで調べても欲しい情報が見当たらなかったため多少は需要があるかもと考えましたが、如何でしたでしょうか。
今回も読んでいただきましてありがとうございました。
それでは皆さまご機嫌よう!