MS Excelを実行する必要があるアプリケーションがあります。そうしないと、クラッシュします。そのため、ユーザーのマシンにExcelがインストールされていない場合に備えて、ユーザーを確認して警告したいと思います。
どうすればよいですか?
Type officeType = Type.GetTypeFromProgID("Excel.Application");
if (officeType == null)
{
//no Excel installed
}
else
{
//Excel installed
}
簡単な修正として、例外をキャッチして適切なエラー処理を実装することができます。次に、そこでユーザーに通知できます。
const string Assembly2003 = "Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c";
static bool IsAssemblyInstalled(string Assembly)
{
try
{
s_assemblyExcel = Assembly.Load(Assembly);
return true;
}
catch
{
return false;
}
}
これでうまくいきます。すべてのバージョンで実行してください。
そしてそれはまたこのように行うことができます
RegistryKey key = Registry.ClassesRoot;
RegistryKey excelKey = key.OpenSubKey("Excel.Application");
bool excelInstalled = excelKey == null ? false : true;
このブログ投稿では、次の方法について説明しています Excelがレジストリを介してインストールされているかどうかを確認してください (VB.NETコードですが、C#に簡単に変換できます)。基本的には、HKEY_CLASSES_ROOT\Excel.Application\CurVer
キーを使用して確認します。
これは答えませんあなたの特定の質問、しかし別の方向からそれに取り組みます...
本当にMS Excelをインストールする必要がありますか、それとも単にコンピュータがExcelファイルを表示できるようにする必要がありますか?たとえば、ユーザーがLibreOfficeまたは他の同様のExcelファイル互換アプリケーションをインストールしている場合、それは許容されますか?
ユーザー用にExcelファイルとPDFファイルを開くアプリケーションがあります。これらのファイルを表示するために、ユーザーがコンピューター上にどのソフトウェアを持っているかは気にしません。それは私たちの関心事ではありません。単にファイルをProcess.Start(...)
して、OSにそこから取得させます。
呼び出しをTry/Catch
ブロックでラップし、この呼び出しでエラーが発生した場合にユーザーに提案を提供します。 Office(Excel)がインストールされていない、またはPDFビューアがないなどの提案。基本的に、ユーザーのコンピュータが完全に十分な状態にあるかどうかを事前に特定しようとするのではなく、アクションを実行し、それが正しいと想定しますが、それが発見されていない場合は、状況を処理します。