Подтвердить что ты не робот

Ошибка 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)

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

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

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

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

Спасибо, Джефф

4b9b3361

Ответ 1

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

Решение:

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

-Run 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 Для окон 7:

Эта ошибка возникает в приложении Excel App New Application(); звонки

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

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

Ответ 2

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

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

Ответ 3

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

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

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

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

ShdNx

Ответ 4

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

Ответ 5

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