C#でOfficeアプリのEXEファイルのパスを取得する

木曜日 , 15, 6月 2023 Leave a comment

C#でMicrosoft Officeを構成するWordやExcelなどアプリのEXEファイルのパスを取得する方法です。
Officeのバージョンに依存せず、汎用的にEXEファイルのパスを取得することができます。

ソースコード

  • 開発環境
    Visual Studio Professional 2022 Version 17.2.3
  • 動作確認した環境
    Windows 10 22H2 (ビルド19045)
  • ライセンス
    NYSL ( http://www.kmonos.net/nysl/ )

//
// 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();
            }
        }
    }
}



Tags:, ,

Please give us your valuable comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください