Как проверить, установлена ​​ли совместимость.net для Excel?

Я использую.net Primary Interoperability Assembly для Excel в своем коде. Но приложение может быть запущено на компьютере, на котором не установлена ​​.net PIA для Excel. Я хочу дать сообщение об ошибке, если оно не установлено

Несмотря на то, что я проверяю в GAC, чтобы увидеть, установлена ​​ли PIA и только если она присутствует, я использую код, связанный с Microsoft.Office.Interop.Excel. Я получаю ошибку.

Моя проблема - я получаю сообщение об ошибке - Необработанное исключение - не могу найти не могу загрузить файл или сборку Microsoft.Office.Interop.Excel

Любое решение?

Заранее спасибо!

3 ответа

Я использовал этот строительный блок для загрузки x86 / x64 версий hunspell в майскую оболочку NHunspell. может быть, это хорошая отправная точка для вашего собственного динамического загрузчика:

            // Initialze the dynamic marshall Infrastructure to call the 32Bit (x86) or the 64Bit (x64) Dll respectively 
            SYSTEM_INFO info = new SYSTEM_INFO();
            GetSystemInfo( ref info );

            // Load the correct DLL according to the processor architecture
            switch( info.wProcessorArchitecture )
            {
                case PROCESSOR_ARCHITECTURE.Intel:
                    string pathx86 = AppDomain.CurrentDomain.BaseDirectory;
                    if (!pathx86.EndsWith("\\"))
                        pathx86 += "\\";
                    pathx86 +=  Resources.HunspellX86DllName;

                    dllHandle = LoadLibrary(pathx86);
                    if (dllHandle == IntPtr.Zero)
                        throw new DllNotFoundException(string.Format(Resources.HunspellX86DllNotFoundMessage, pathx86));
                    break;

                case PROCESSOR_ARCHITECTURE.Amd64:
                    string pathx64 = AppDomain.CurrentDomain.BaseDirectory;
                    if (!pathx64.EndsWith("\\"))
                        pathx64 += "\\";
                    pathx64 += Resources.HunspellX64DllName;

                    dllHandle = LoadLibrary(pathx64);
                    if (dllHandle == IntPtr.Zero)
                        throw new DllNotFoundException(string.Format(Resources.HunspellX64DllNotFoundMessage, pathx64));
                    break;

посмотрите на объявления этого делегата:

internal delegate bool HunspellSpellDelegate(IntPtr handle, [MarshalAs(UnmanagedType.LPWStr)] string word);

И как привязать к нему библиотечную функцию

HunspellSpell = (HunspellSpellDelegate)GetDelegate("HunspellSpell", typeof(HunspellSpellDelegate));

Я думаю, что это должно работать и для вас, но вы должны объявить полный код взаимодействия. Вы можете проверить код Nhunspell, чтобы получить рабочий образец этой техники:

Веб-сайт NHunspell

Я думаю, System.Type.GetTypeFromProgID("Excel.Application", правда); Метод выдаст исключение, если Excel нет. Вы можете использовать блок try catch и проверить.

Вы не должны делать статические ссылки на библиотеку Excel.Interop. Вместо этого вы должны искать его в GAC и загружать во время выполнения. Это довольно сложно, и для этого нет управляемого API (по умолчанию).

Попробуйте использовать это: fusion.dll API-оболочка

Другие вопросы по тегам