Использование взаимодействия с Excel на удаленном компьютере

Я пытаюсь использовать офисное взаимодействие для взаимодействия с Excel на удаленном компьютере. Самым простым, на первый взгляд, способом сделать это было использование метода Microsoft.VisualBasic.Interaction.CreateObject, который задокументирован здесь. В моем случае вызов, сделанный ему:

var excelApp = (Application)Interaction.CreateObject("Excel.Application", machineName);

Однако это не работает в полной мере, как ожидалось. Результаты, которые я получаю:

  • Когда имя_машины — это локальный компьютер, на котором я запускаю код, это работает, как и ожидалось.
  • Если имя_машины является удаленной машиной, экземпляр Excel фактически запускается на машине, но вызов CreateObject завершается ошибкой с исключением:

System.Exception: удаленный сервер не существует или недоступен.

Поиск в Google этого сообщения не показывает особой пользы, результаты, кажется, у всех людей с разными симптомами.

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

Обратитесь к документации COM (см. Microsoft Developer Network) для получения дополнительной информации о том, как сделать приложение доступным на удаленном сетевом компьютере. Возможно, вам потребуется добавить раздел реестра для вашего приложения.

Но я еще не нашел эту документацию.

Любые предложения о том, что может быть проблемой здесь? Или, в противном случае, другой способ достижения того же? В моей ситуации удаленное взаимодействие, подобное этому, является твердым требованием — использование Excel на локальном компьютере для доступа к удаленному файлу недостаточно.

Кроме того, я бы очень хотел избежать решения, требующего запуска службы или чего-то подобного на клиентском компьютере Excel, что, как я понимаю, было бы необходимо, если бы я хотел использовать Activator.CreateInstance с UrlAttribute.


person Ben Aaronson    schedule 24.04.2014    source источник
comment
Ну, я уверен, что мне не нужно говорить обо всех последствиях для безопасности, которые это может иметь, но я думаю, что это проблема конфигурации DCOM, любая из этих 3 ссылок может помочь: blogs.technet.com/ b/the_microsoft_excel_support_team_blog/ или support.microsoft.com/kb/285888/en -us и danieladeniji.wordpress.com/configuring-dcom- для удаленного доступа   -  person Jportelas    schedule 24.04.2014
comment
@Jportelas Спасибо за направление! Мне все еще нужно подтвердить 100%, но похоже, что настройка его для работы под интерактивной учетной записью была критическим моментом, который необходимо было сделать. Если вы хотите преобразовать свой комментарий в ответ, я приму его, в противном случае я напишу свой собственный с более подробной информацией.   -  person Ben Aaronson    schedule 25.04.2014
comment
Если вы хотите использовать Interop, то компонент должен быть установлен в системе. В противном случае это не сработает.   -  person Kiquenet    schedule 26.03.2015


Ответы (1)


Проблема заключалась в настройке DCOM. Были установлены все соответствующие разрешения, но приложение не было настроено для запуска в качестве интерактивного пользователя. Я подозреваю, что эта проблема относительно однозначно определяется сочетанием возможности запуска процесса, но невозможности впоследствии подключиться к нему.

Этот параметр можно найти в службах компонентов (dcomcnfg) в разделе: Component Services > Computers > My Computer > DCOM Config > Microsoft Excel Application. Щелкните правой кнопкой мыши, выберите «Свойства», и конфигурация, для которой будет запускаться учетная запись пользователя, находится на вкладке «Идентификация».

Дополнительная проблема, которую я обнаружил по пути, заключалась в том, что «Приложение Microsoft Excel» изначально не было указано в службах компонентов из-за наличия 32-разрядного Excel в 64-разрядной Windows.

Решение для этого найдено здесь должен был запустить 32-разрядную версию mmc (что можно сделать из командной строки, начав с аргумента -32) и использовать оснастку Component Services.

person Ben Aaronson    schedule 28.04.2014