Исключение ошибки Windows 7 .net Excel .SaveAs() из HRESULT: 0x800A03EC

Фон:
Я выпил свой старый жесткий диск на работе и получаю новый. С этим я должен буду восстановить свою машину. Мой менеджер установил Windows 7 на своем ноутбуке, который я использовал, когда моя машина не работает. Но я столкнулся с проблемой.

У нас есть достаточное количество приложений, которые используют ссылку Microsoft.Office.Interop.Excel. До сих пор я преодолел несколько ошибок, но ту, на которой я застрял последние несколько дней (на моем компьютере произошел сбой жесткого диска после первой перестройки), и мне не удалось найти исправление. Я искал эту ошибку, но не могу найти никого, имеющего эту проблему в Windows 7, хотя я пробовал другие исправления для Windows Server 2008 безрезультатно.

Если я не смогу решить эту проблему, я не смогу использовать Windows 7 и хотел бы знать, что перед тем, как перестраивать машину, нужно только стереть ее и запустить снова (в третий раз).

Проблема:
ОС: Windows 7 Enterprise
Сообщение об ошибке: исключение из HRESULT: 0x800A03EC
Код:

Private m_xls As Microsoft.Office.Interop.Excel.Application
Private m_wkbk As Microsoft.Office.Interop.Excel.Workbook
Private m_wksht As Microsoft.Office.Interop.Excel.Worksheet
m_xls = New Application
m_xls.Visible = False : m_xls.DisplayAlerts = False
m_wkbk = m_xls.Workbooks.Open(Me.FilePath)
m_wksht = CType(m_wkbk.ActiveSheet, Worksheet)
'...Write some data...'
m_wkbk.SaveAs(Me.FilePath, XlFileFormat.xlWorkbookNormal, Missing.Value, Missing.Value, False, False, XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value)

Ошибка возникает в последней строке.

Что я пробовал до сих пор:

  1. Изменение AppPool для использования учетной записи NetworkService (это был "ApplicationPoolIdentity", который я не смог найти в списке пользователей в настройках безопасности). Затем предоставив учетной записи NetworkService полный доступ к соответствующей папке.
  2. Предоставление NetworkService доступа ко всем настройкам приложения Microsoft Excel в DCOMCNFG
  3. Выполнение этой команды "appcmd set config -section:asp -enableParentPaths:true", потому что это единственное, что я могу найти
  4. Использование.SaveCopyAs(), который работал, но вызывал различные ошибки

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

Спасибо джефф

6 ответов

Решение

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

Решение:

Следующие изменения могут быть расширенным набором способов решения этой проблемы.

-Запустите DCOMCNFG.exe и перейдите к "Службы компонентов> Компьютеры> Мой компьютер".
-Право нажмите "Мой компьютер" и нажмите "Свойства".
- Откройте вкладку "Безопасность COM". Добавьте свою учетную запись для каждой из перечисленных кнопок (кнопки "Изменить ограничения..." и "Редактировать по умолчанию..." в разделе "Права доступа" и "Запустить и активировать разрешения"). Предоставьте своей учетной записи все варианты доступа. Нажмите "Применить", затем "ОК".
Пока вы находитесь в DCOMCNFG, разверните ссылку "Мой компьютер" и откройте папку "DCOM Config".
-Правой кнопкой мыши щелкните "Приложение Microsoft Excel" и выберите "Свойства".
-На вкладке "Безопасность" выберите "Настроить" для "Разрешения на запуск и активацию" и "Разрешения на настройку". Для обоих нажмите кнопку "Редактировать...". Дайте вашей учетной записи доступ ко всему.
-Находясь в "Свойствах" для "Приложения Microsoft Excel", перейдите на вкладку "Удостоверение".
-Выберите опцию "Интерактивный пользователь".
-Нажмите "Применить", затем "ОК".
-Перезагрузите компьютер.

-Попробуйте приведенное ниже изменение DCOMCNFG и ApplicationPoolIdentity.

- Запустите командную строку от имени администратора.
-Найдите в c:\Windows\System32\inetsrv> и запустите 'appcmd set config -section:asp -enableParentPaths:true'

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

DCOMCNFG для Windows 7:

Эта ошибка возникает в "Excel app = New Application();" звонки

Эта ссылка подробно описывает, как решить проблему для XP/Server 2003, но может быть адаптирована к Windows 7: http://blog.crowe.co.nz/archive/2006/03/02/589.aspx

У меня нет / не могу найти учетную запись ASPNET. Вы должны проверить пул приложений, чтобы узнать, как работает приложение.
Для этого перейдите в "Управление компьютером> Службы и приложения> Информационные службы Интернета> Пулы приложений".
Щелкните правой кнопкой мыши соответствующий AppPool и выберите "Advanced Settings". В разделе "Модель процесса> Идентичность" вы можете найти учетную запись, под которой он работает. Моим был "ApplicationPoolIdentity", который я также не смог найти, поэтому я изменил его на "Сетевой сервис", такой как Windows Server 2003.
Как только это будет установлено, запустите DCOMCNFG.exe. Перейдите к "Службы компонентов> Компьютеры> Мой компьютер> Конфигурация DCOM".
Найдите и щелкните правой кнопкой мыши "Приложение Microsoft Excel" и выберите "Свойства". Выберите вкладку "Безопасность". В разделе "Разрешения на запуск и активацию" выберите "Настроить" и нажмите "Изменить".
Затем нажмите кнопку "Добавить...".
Введите имя соответствующей учетной записи, в данном случае "Сетевая служба" и нажмите "Проверить имена". Затем нажмите "ОК".
Вернувшись на страницу "Разрешения на запуск и активацию", выделите учетную запись "Сетевая служба" и установите флажки "Локальный запуск" и "Локальная активация". Затем нажмите "ОК".

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

Кроме того, одна вещь, которую вы делаете, скорее всего, заставляет excel.exe оставаться в памяти после обработки файла. Вот статья, в которой показан правильный способ использования и выпуска объектов взаимодействия COM ( http://support.microsoft.com/kb/317109). Это боль, но я сработал, позволив освободить эти ресурсы до закрытия приложения.

Убедитесь, что вы запускаете программу (и EXCEL.EXE) от имени администратора, а каталог, в который вы сохраняете, не имеет атрибута "только для чтения".

Кроме того, попробуйте указать полный путь к файлу, а не просто имя файла.

Вы также можете попробовать передать System.Reflection.Missing.Value вместо пропуска необязательных параметров.

Не могу думать ни о чем другом прямо сейчас. Надеюсь это поможет.

ShdNx

Ответ Джеффа Кеслинке, приведенный выше, в конечном итоге помог мне. Вам также нужно посмотреть на пул приложений, который используется вашим приложением, и убедиться, что идентификация верна и имеет полный доступ и привилегии.

Я получил ту же проблему и обнаружил ошибки сбоя приложения с кодом исключения: 0xc0000005 в событиях Windows. Найдите в Интернете и найдите следующее решение по ссылке Excel 2010 Crash, код исключения: 0xc0000005 Переименуйте расширение файла открытого файла из xlsx в zip. Решение работает для моего случая.

Попробуйте включить МКС. Подробности упомянуты здесь для Windows 7

http://helpdeskgeek.com/windows-7/turn-on-microsoft-internet-information-services-in-windows-7/

Другие вопросы по тегам