Vista, Office Interop не работает - PullRequest
       20

Vista, Office Interop не работает

3 голосов
/ 27 октября 2008

Кто-нибудь знает, как заставить библиотеки MS Office 2007 .NET C # Interop работать с Vista?

У меня есть приложение .NET C #, которое я настроил для работы в качестве службы Windows. Эта программа откроет шаблон Word или Excel в зависимости от ситуации и изменит его содержимое, а затем сохранит документ обратно. Все это прекрасно работало, когда я делал это на компьютере с Windows Server 2003 или XP, используя Office 2007. Когда я переместил все в окно Server 2008, все перестало работать. Например, в Excel я получаю исключение COM, сообщающее, что файл Excel не может быть открыт, когда файл явно находится там, и я могу открыть его очень хорошо, когда делаю это вручную. Служба Windows работает под той же учетной записью пользователя, с которой я захожу на компьютер, и эта учетная запись является администратором.

Кто-нибудь знает, что делать?

Ответы [ 8 ]

2 голосов
/ 23 июня 2009

В Vista и Windows Server 2008 службы запускаются под названием Session0. До Vista обычные программы работали в Session0 вместе со службами.

Это означает, что Session0 стал бесполезной пустошью, где ваши сервисы даже не могут получить доступ к explorer.exe. Я почти уверен, что проблема в том, что приложения Office ожидают, что смогут получить доступ к нескольким компонентам, которые обычно находятся на рабочем столе.

Поскольку Excel, Word и т. Д. Поддерживаются только в сеансе с рабочим столом, у вас есть только несколько вариантов:

  1. Установите флажок «Рабочий стол» на вкладке «Вход в систему» ​​свойств вашей службы и молитесь, чтобы это успокоило богов Office. (Это, вероятно, не будет.)
    • После попытки 1, пройдите код и попробуйте удалить / обойти все, что может привести к сбою.
  2. Используйте remoting / WCF, чтобы создать сервер, который выполняет взаимодействие, и заставить вашу службу взаимодействовать с ним.
    • Вам понадобится войти в систему интерактивного пользователя, и пользователь должен каким-то образом запустить серверное приложение. Возможно, лучше всего использовать автозапуск.
    • Вы можете попробовать включить автоматический вход. http://support.microsoft.com/kb/324737
  3. Попробуйте выдать себя за зарегистрированного пользователя, используя CreateProcessAsUser и друзей.
    • Примечание: я не знаю, насколько хорошо это работает, если пользователь фактически не вошел в систему, поэтому он может быть не более полезным, чем 2 выше, и его гораздо сложнее выполнить. (Необходимо P / Invoke)
  4. Перепишите свою программу, чтобы использовать OpenXML SDK или использовать что-то вроде SpreadsheetGear.
1 голос
/ 11 ноября 2008

Получить из http://www.microsoft.com/downloads/details.aspx?FamilyID=59daebaa-bed4-4282-a28c-b864d8bfa513&displaylang=en

установите его в своей системе и используйте Excel dll в своем решении, и, надеюсь, он будет работать.

1 голос
/ 30 декабря 2008

Вы действительно должны избегать запуска клиентов Office в качестве приложений на стороне сервера. Подумайте об использовании xml в качестве формата файла (xlsx для Office 2007 или использование книги Excel xsd для (несколько) более старых версий.) Тогда вы будете освобождены от использования Excel API на сервере.

1 голос
/ 07 ноября 2008

Я нашел интересную статью от Microsoft, в которой, в основном, говорится, что не делайте автоматизацию Office.

0 голосов
/ 12 ноября 2008

Что-то, что нужно помнить о Office. Это только x86, поэтому, если вы создаете приложение в x64, вы не сможете получить доступ к базовым COM-объектам Office. Вам нужно будет скомпилировать ваше приложение в x86, тогда оно будет работать.

Вы можете сделать это, перейдя в свойства вашего проекта и выбрав x86 на вкладке сборки в Visual Studio.

Все это предполагает, что ваше приложение разрабатывается / запускается в среде x64.

0 голосов
/ 11 ноября 2008

Вы оставляете аккаунт, зарегистрированный на машине? Office не является приложением на стороне сервера, и вы получите случайные ошибки, если попытаетесь запустить любой из исполняемых файлов без контекста рабочего стола.

0 голосов
/ 11 ноября 2008

Это только предположение, но это может быть UAC. Я знаю, что привилегированные (административные) приложения и пользовательские приложения не могут отправлять сообщения друг другу или общаться каким-либо образом. Ваш сервис работает как администратор, но ваш рабочий стол работает как обычный пользователь под UAC, даже если это один и тот же пользователь. Я также ожидаю, что Office запускает (предварительно загружает) свои части при запуске и будет работать как обычный пользователь.

Попробуйте отключить UAC и посмотрите, поможет ли это. Если так, то, по крайней мере, вы знаете, что это такое.

0 голосов
/ 27 октября 2008

У вас установлены основные сборки взаимодействия на сервере? Обычно они находятся в GAC и не включаются в каталог bin при сборке программы, поэтому их необходимо будет установить локально на сервере.

...