Я пытаюсь реализовать сервер RTD для использования с Excel. Тестовая среда:
Excel: Microsoft Office Excel 2007 (32-разрядная версия) со всеми параметрами безопасности и наиболее мягкими настройками (в основном разрешает все).
Мое приложение:
- Построено с использованием Visual Studio 2012 (да, мне нужно обновить на днях)
- WPF .exe с .NET 4.5
- Принудительная 32-битная сборка (диспетчер задач подтверждает, что она загружается как 32-битная), чтобы упростить задачу.
32-битная версия Excel должна иметь возможность подключаться к обычной 64-битной сборке моего приложения, поскольку это исполняемый файл и должен работать вне процесса, но поскольку это не сработало, я пытаюсь упростить правильную регистрацию 64-битной версии. WOW6432Node, чтобы его могли найти 32-разрядные приложения, немного сложнее. - Мой тестовый код RTD Server основан на превосходной серии статей Кенни Керра о RTD
https://asp-blogs.azurewebsites.net/ken ... y-Articles - Использование подхода «без ссылки на Excel» (жестко запрограммированные GUID для интерфейсы)
- Исполняемый файл имеет строгое имя
- Исполняемый файл имеет кодовое обозначение (сертификат от Certum). Пробовал как обычный хэш SHA256, так и SHA1 на случай, если Excel 2007 не знает, как с этим справиться, хотя я думаю, что он просто вызывает соответствующие функции Win32 API для проверки.
- Использование RegistrationServices.RegisterAssembly - кажется, работает нормально (возвращает true и создаются записи реестра).
- Также пробовал использовать RegAsm, который тоже работает нормально (вообще никаких ошибок или предупреждений), просто говорит: «Все типы зарегистрированы успешно)
- Откройте Excel
- Введите следующую формулу в Excel
Код: Выделить всё
=RTD("MyApplicationProgID", "", "test") - После очень небольшой задержки Excel отображает #N/A
- Похоже, что Excel нашел мой исполняемый файл, потому что если я попытаюсь удалить исполняемый файл, я получу сообщение «Действие невозможно выполнить, поскольку файл открыт в Microsoft Office Excel». Если я закрою Excel, я смогу удалить исполняемый файл.
- Мой исполняемый файл ни в коем случае не отображается в диспетчере задач, поэтому, хотя Excel блокирует чтение файла, он не запускает его.
- Я также пытался запустить приложение перед вводом формулы в Excel, но это тоже не работает.
Код: Выделить всё
IRTDUpdateEventПоскольку исполняемый файл моего приложения заблокирован Excel, но на самом деле не запускается, я предполагаю, что Excel не нравится мое приложение по какой-то причине, но поскольку сообщения об ошибке нет, я понятия не имею, что это может быть. Есть какие-нибудь предложения относительно причины или способа выяснить, в чем заключается реальная проблема?
Я мог бы попробовать создать простой клиент RTD и посмотреть, будет ли он хотя бы подключаться. Если и это не сработает, возможно, будет проще выяснить, почему это не работает, но я надеюсь, что у кого-нибудь есть какие-либо предложения, прежде чем я это сделаю, потому что мне не нужен клиент RTD, и он может не сказать мне много о том, что не так с Excel.
Конец исходного вопроса
ОБНОВЛЕНИЕ: дополнительная информация
Прежде всего, у меня это работает в некоторой степени. Функция RTD, которую я использовал, не работает, но я обнаружил, что все следующие три работают:
Код: Выделить всё
=RTD("MyApplicationProgID", Подробнее здесь: [url]https://stackoverflow.com/questions/78924441/excel-unable-to-get-data-from-my-c-sharp-rtd-server-displays-n-a[/url]
Мобильная версия