Немного устарел, но он стал одним из лучших результатов поиска. Поэтому я предполагаю, что мои данные все равно будут полезны.
У меня есть сторонний API в виде нативной dll, которую я вызываю из C #, используя DllImport. Этот родной dll зависит от того, открыто ли приложение стороннего производителя.
(t) ржавая библиотека Office Interop работает точно так же. Вы фактически запускаете фоновый экземпляр рассматриваемой программы Office.
Фоновый экземпляр нуждается в интерактивном сеансе, даже если он ничего не показывает (предположения / ошибки при разработке).
Службы не работают в интерактивном сеансе , начиная с Vista . Использование переопределения не рекомендуется.
Это одна из (3?) Причин, по которой мы больше не используем Office Interop.
Возможные обходные пути:
- прекратить пользоваться услугой. Шедулер задач Windows может выполнять примерно ту же работу, предоставляя вам полные интерактивные сеансы. Даже MS сама начала перемещать вещи из сервисов в Sheduler, где это возможно
- переместить доступ к DLL в процесс Helper. Это можно запустить в интерактивном сеансе. Используйте любой способ межпроцессного взаимодействия, чтобы общаться между помощником и основным сервисом. Этот шаблон в основном используется для работы с dll x32 только из программы x64, но он должен работать и здесь. И манифест, и Process.Start () имеют способ интерактивного запуска программы из Сервиса.
Судя по одному из комментариев, вы выбираете вариант 2, но вместо этого используете веб-сервис.
К сожалению, веб-версии / веб-приложения обычно запускаются как служба Windows. И это, прежде чем вы считаете, что они работают под некоторыми из самых ограничительных прав (так как они доступны в Интернете).
Таким образом, вы просто вернетесь к квадрату 1 или даже вернетесь на шаг 0.