.NET: если мой .NET автоматизирует Office, должен ли заказчик устанавливать Office?

Если я создам программу, которая в одной небольшой области использует автоматизацию Excel:

произойдет ли сбой приложения, когда потребуется Excel

или приложение не запустится?


Обновлять

Позвольте задать тот же вопрос, но более растянуто:

Будет ли приложение использоваться

  • #P6#
  • 0% пользователей, так как Excel не установлен.

Позвольте мне задать тот же вопрос по-другому:

Не удастся ли инициализировать приложение, которое ссылается на dll COM-взаимодействия?


Позвольте мне задать тот же вопрос по-другому:

Не запустится ли приложение, которое не использует Excel, но ссылается на библиотеку DLL COM-взаимодействия?


Позвольте мне задать тот же вопрос по-другому:

Можно ли будет использовать приложение, не использующее Excel, если Excel не установлен, если это приложение зависит от dll-библиотек Office Primary Interop?


Позвольте мне задать тот же вопрос по-другому:

Если мое приложение не использует Excel, должен ли пользователь установить Excel?


person Ian Boyd    schedule 31.12.2008    source источник
comment
Почему бы не попробовать на компьютере без Excel?   -  person Nifle    schedule 31.12.2008
comment
+1 к комментарию Stumproot. Это одна из причин, по которой виртуальные машины так хороши. Избегайте путаницы и просто попробуйте.   -  person Chris Farmer    schedule 31.12.2008


Ответы (5)


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

person Mitchel Sellers    schedule 31.12.2008
comment
В частности, я считаю, что он сгенерирует исключение System.Runtime.InteropServices.COMException. Если вам интересно, это что-то вроде получения фабрики классов COM для компонента с CLSID {000209FF-0000-0000-C000-000000000046} не удалось из-за следующей ошибки: 80040154. - person Keithius; 21.05.2009

У меня есть приложение, использующее автоматизацию Excel, и я могу с уверенностью сказать, что оно даст сбой во время выполнения, а не во время загрузки. На самом деле мы проверяем, установлен ли он, и показываем кнопку «Показать данные в Excel» только в том случае, если находим ее (но PIA развертываются для всех установок).

person ctacke    schedule 31.12.2008

Если вы автоматизируете Office... у вас должен быть Office!

Сказав это, ответ изменится, если вы измените вопрос так: Могу ли я создать электронную таблицу Excel, не имея Excel на клиенте?

Для этого существует множество сторонних элементов управления; вы можете писать непосредственно в спецификацию MS SpreadML XML (http://msdn.microsoft.com/en-us/library/aa140066(office.10).aspx; или используйте сторонние библиотеки (например, http://www.carlosag.net/Tools/ExcelXmlWriter/).

person rp.    schedule 31.12.2008
comment
Итак, вы предполагаете, что приложение запустится нормально, но потерпит неудачу, когда дело доходит до необходимости в Ecxel? - person Ian Boyd; 31.12.2008
comment
Если код скомпилирован со ссылкой на объекты Office, произойдет сбой с ошибкой времени выполнения. Однако, если вы поздно привязываетесь с использованием отражения, вы можете избежать сбоя во время выполнения. Но вы наклоняете ветряные мельницы! Либо требуйте Office заранее, либо кодируйте так, чтобы он вам не нужен (предпочтительно!). - person rp.; 31.12.2008

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

ОБНОВЛЕНИЕ: время выполнения должно означать, когда вам это нужно!

person Florian Greinacher    schedule 31.12.2008
comment
Какая среда выполнения? Время выполнения в начале или время выполнения, когда оно используется? - person Ian Boyd; 31.12.2008

При использовании COM в Win32 произойдет сбой при необходимости.

person Cesar Romero    schedule 31.12.2008
comment
Согласен, есть идеи по .NET? - person Ian Boyd; 31.12.2008
comment
Взаимодействие .net просто вызывает библиотеки COM. - person Dan Blair; 31.12.2008