Ошибка 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, но я хотел бы иметь некоторые обоснованные аргументы, прежде чем я скажу своему менеджеру, что он не будет работать.
Спасибо,
Джефф
Ответы
Ответ 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. Решение работает для моего дела.
Ответ 6
Попробуйте включить ISS. Подробности упоминаются здесь для Windows 7
http://helpdeskgeek.com/windows-7/turn-on-microsoft-internet-information-services-in-windows-7/