2


1

Microsoft Word、Excel、Outlook、ProjectなどがWindowsフォームの.net 2.0 C#アプリケーションにインストールされているかどうかを知る必要があります。 最初の試みは、単にアプリケーションオブジェクトを作成して例外をキャッチすることでしたが、これは時間がかかりすぎます。 これを検出するためのより速い方法はありますか? レジストリ値をチェックしたり、COMラッパーを使って別の手法を試したりするのは好きですか。

2 Answer


3


これは、 hereの説明に従って動作するはずです。 ただし、これはバージョン固有のものであり、次のOfficeバージョンでは機能しなくなるため、あまり洗練されたソリューションではありません。 この例はforOffice 2003なので、Office 2007では更新せずには機能しません。

const string ASSEMBLY2003 = "Microsoft.Office.Interop.Excel、バージョン= 11.0.0.0、カルチャ=ニュートラル、PublicKeyToken = 71e9bce111e9429c";

static bool IsAssemblyInstalled(string assembly){try {s_assemblyExcel = Assembly.Load(assembly);} trueを返します。 } catch {falseを返します。 }}


3


MSI(Windowsインストーラ)APIを使用して、関連する製品/パッケージ/コンポーネントコードがマシンに存在するかどうかを確認できます。 これらはP / Invokeを介して使用するのはかなり簡単です。

あるいは、レジストリを調べることもできます。 たとえばWord 2007では、インストール場所は `HKLM \ SOFTWARE \ Microsoft \ Office \ 12.0 \ Word \ InstallRoot`になります。

相互運用機能コンポーネントを使用することを計画している場合、これは役に立ちませんが、さまざまなものがインストールされているかどうかを合理的な確信を持って伝えることができます。