Проблемы с автоматизацией делопроизводства в asp.net. Я мог бы использовать альтернативы, такие как открытый офис, если бы знал, как

У меня есть веб-приложение ASP.NET 2.0, которое должно загрузить файл ppt, а затем извлечь его слайды в изображения. Для этого я импортировал сборки office.dll и Microsoft.Office.Interop.PowerPoint.dll и написал следующий код

public static int ExtractImages(string ppt, string targetPath, int width, int height)
    {
        var pptApplication = new ApplicationClass();

        var pptPresentation = pptApplication.Presentations.Open(ppt, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse);

        var slides = new List<string>();

        for (var i = 1; i <= pptPresentation.Slides.Count; i++)
        {
            var target = string.Format(targetPath, i);
            pptPresentation.Slides[i].Export(target, "jpg", width, height);
            slides.Add(new FileInfo(target).Name);
        }

        pptPresentation.Close();

        return slides.Count;
}

Если я запускаю этот код на своем локальном компьютере, в asp.net или в исполняемом файле, он работает отлично. Но если я попытаюсь запустить его на производственном сервере, я получу следующую ошибку:

System.Runtime.InteropServices.COMException (0x80004005): PowerPoint не удалось открыть файл. в Microsoft.Office.Interop.PowerPoint.Presentations.Open (String FileName, MsoTriState ReadOnly, MsoTriState Untitled, MsoTriState WithWindow) в PPTImageExtractor.PptConversor.ExtractImages (String caminhoPpt, Intin32 larguum, String caminho32destrans, String caminho32 larry, int Int32 alturaThumb, Boolean geraXml) в Upload.ProcessRequest (контекст HttpContext)

Процесс запущен с пользователем NT AUTHORITY \ NETWORK SERVICE. IIS настроен на использование анонимной проверки подлинности. Анонимный пользователь является администратором, я установил его так, чтобы приложение могло работать, не беспокоясь о разрешениях.

На моей машине разработки у меня есть Office 2010 beta1. Я также тестировал исполняемый файл на компьютере с Office 2007. И если я запускаю код из исполняемого файла на сервере с установленным Office 2003, он работает отлично.

Чтобы гарантировать отсутствие проблем с разрешениями, каждый на сервере имеет полный доступ к веб-сайту. Веб-сайт работает в IIS7 и классическом режиме.

Я также слышал, что у Open-office есть API, который должен это делать, но я ничего не нашел об этом. Я не против использования DLLImport, чтобы делать то, что мне нужно, и могу установить open-office на веб-сервере. Не беспокойтесь о том, чтобы переписать этот метод, пока параметры остаются такими же, все будет работать.

Я ценю вашу помощь.


person Vinicius Melquiades    schedule 16.04.2010    source источник
comment
Никогда не используйте Office Interop из приложения ASP.NET. См. Рекомендации по серверной автоматизации Office.   -  person John Saunders    schedule 06.10.2011


Ответы (6)


Никогда не используйте Office Interop из приложения ASP.NET. См. Рекомендации по серверной автоматизации Office.

Однако, если у вас нет альтернативы, в Windows Server 2008 вам необходимо создать следующие каталоги, чтобы это работало:

Windows 2008 Server x64: C: \ Windows \ SysWOW64 \ config \ systemprofile \ Desktop Windows 2008 Server x86: C: \ Windows \ System32 \ config \ systemprofile \ Desktop

person Murthy Pantham    schedule 19.05.2010
comment
Вы не представляете, какое разочарование нас вызвала эта проблема. Я хотел бы купить вам пива, если вы когда-нибудь будете в районе Денвера. Спасибо. - person sarumont; 11.01.2012
comment
Хм. это не сработало для Server 2008 SP2. Я выполнил приложение на другом сервере (R2), и оно сработало нормально. - person FlavorScape; 17.09.2012

Рассматривая возможность использования Office Automation на сервере, вы можете прочитать информацию в следующей статье базы знаний.

http://support.microsoft.com/kb/257757

Ключевая фраза из приведенной выше ссылки

В настоящее время Microsoft не рекомендует и не поддерживает автоматизацию приложений Microsoft Office из любых автоматических, неинтерактивных клиентских приложений или компонентов (включая службы ASP, ASP.NET, DCOM и NT), поскольку Office может работать нестабильно. поведение и / или тупик при запуске Office в этой среде.

И я могу подтвердить, что сказанное выше совершенно верно, и не только М.С. пытается вас отговорить ...

person Chris Taylor    schedule 17.04.2010
comment
да, если вы автоматизируете их напрямую, вы можете подумать о процессе присмотра за детьми, чтобы перезапустить офисную хрень, когда она выходит из строя. - person FlavorScape; 17.09.2012

В моей ситуации (преобразование презентации в видео, и у меня очень похожая проблема с открытыми материалами) это помогает:

Создание следующих каталогов:

C: \ Windows \ SysWOW64 \ config \ systemprofile \ Desktop

C: \ Windows \ System32 \ config \ systemprofile \ Desktop (у меня этого нет)

Моя операционная система Windows Server 2012 R2 Standard

person stefan.kol    schedule 04.06.2014

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

Если вы хотите анализировать файлы PowerPoint на центральном сервере, вам следует использовать библиотеку, которая читает файлы PowerPoint. Я знаю, что Aspose делает такой продукт (Aspose.Slides), но есть и другие.

Если документы находятся в PowerPoint 2007, вы можете проанализировать XML Open Office на предмет нужных вам данных. См. Знакомство с форматами файлов Open XML Office (2007) и Open XML SDK 2.0 для Microsoft Office для получения дополнительной информации.

person Thomas    schedule 16.04.2010
comment
хорошие ссылки на открытые офисные материалы ... не должны нуждаться во внешних библиотеках для работы с офисными файлами 2007+, хотя они могут упростить задачу. - person Jon; 16.04.2010
comment
на сервере уже установлен офис 2003, и мы принимаем загрузку только файлов ppt, но не pptx. Вот почему я подумывал об использовании Open-Office. - person Vinicius Melquiades; 16.04.2010
comment
да, вы бы не хотели, чтобы каждый запрос вызывал interop / com. Вы бы предпочли использовать фоновую службу, такую ​​как папка для просмотра, чтобы избежать дорожно-транспортных происшествий. - person FlavorScape; 17.09.2012

Возможно я ошибаюсь, недавно начал изучать подобное. Но вам не нужно устанавливать Office на компьютере для создания или редактирования офисных файлов 2007+. По сути, это zip-файлы с другим расширением. Если вы переименуете его в .zip, вы увидите все файлы и сможете редактировать их напрямую.

Затем его можно разархивировать, и все файлы будут там для вас. Вы можете создавать новые файлы аналогичным образом.

person Jon    schedule 16.04.2010
comment
Чтение файлов xml на самом деле не помогает экспортировать слайды как изображения, если вы не можете сконструировать их таким же образом. - person cjk; 16.04.2010

Никогда не используйте Office Interop из приложения ASP.NET. См. Рекомендации по серверной автоматизации Office.

Однако я просто хотел отметить здесь, что мне пришлось внести исправление, описанное Мурти Пантамом, на 64-разрядном компьютере с Windows 7 Professional с Office 2010. На нем не был Windows 7 Service Pack 1 или Office 2010 Установлен пакет обновления 3. Итак, урок заключается в том, что исправление не ограничивается Server 2008. Надеюсь, это кому-то поможет.

person ptrc    schedule 02.12.2011
comment
Разве редактирование не меняет смысла моего ответа? Не уверен, почему это было необходимо добавить. Никогда не используйте Office Interop из приложения ASP.NET. См. Рекомендации по серверной автоматизации Office. - person ptrc; 03.12.2013