C#でMicrosoft Officeを構成するWordやExcelなどアプリのEXEファイルのパスを取得する方法です。
Officeのバージョンに依存せず、汎用的にEXEファイルのパスを取得することができます。
// // OfficeアプリのEXEパスを取得するライブラリ // // This software is distributed under the license of NYSL. // http://www.kmonos.net/nysl/ // // using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace RIALAB { /// <summary> /// OfficeアプリのEXEパスを取得するライブラリ /// </summary> public class MsOfficeUtil { /// <summary> /// Officeアプリの種類 /// </summary> public enum OfficeApps { /// <summary>Word</summary> WORD, /// <summary>Excel</summary> EXCEL, /// <summary>PowerPoint</summary> POWERPOINT, /// <summary>Outlook</summary> OUTLOOK, /// <summary>OneNote</summary> ONENOTE, /// <summary>Access</summary> ACCESS, /// <summary>Publisher</summary> PUBLISHER } /// <summary> /// OfficeアプリのEXEファイル名を取得する /// </summary> /// <param name="app">Officeアプリの種類</param> /// <returns>EXEファイル名</returns> /// <exception cref="Exception"></exception> public static String GetOfficeAppExeName(OfficeApps app) { switch (app) { case OfficeApps.WORD: return "WINWORD.EXE"; case OfficeApps.EXCEL: return "excel.exe"; case OfficeApps.POWERPOINT: return "POWERPNT.EXE"; case OfficeApps.OUTLOOK: return "OUTLOOK.EXE"; case OfficeApps.ONENOTE: return "ONENOTE.EXE"; case OfficeApps.ACCESS: return "MSACCESS.EXE"; case OfficeApps.PUBLISHER: return "mspub.exe"; } throw new Exception(); } /// <summary> /// OfficeアプリのEXEファイルのパスを取得する /// </summary> /// <param name="app">Officeアプリの種類</param> /// <returns>OfficeアプリのEXEファイルパス</returns> /// <exception cref="Exception"></exception> public static String? GetOfficeAppPath(OfficeApps app) { // EXEファイル名を決定 var exeName = GetOfficeAppExeName(app); // EXEファイルに対応するレジストリキーを決定 var subkeyName = $@"Software\Microsoft\Windows\CurrentVersion\App Paths\{exeName}"; // レジストリからEXEファイルのパスを取得し返す using (var subkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(subkeyName, false)) { if (subkey == null) { throw new Exception(); } return subkey.GetValue(string.Empty)?.ToString(); } } } }
Please give us your valuable comment