Окна 7.net Преуспеть.SaveAs () исключение ошибки из HRESULT: 0x800A03EC


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

У нас есть достаточное количество приложений, которые используют Microsoft.Офис.Взаимодействие.Справочник по 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. изменение пула приложений для использования Учетная запись NetworkService (это был "ApplicationPoolIdentity", который я не удалось найти в списке пользователей в параметры защиты). Затем дать Учетная запись NetworkService полный доступ в соответствующую папку.
  2. предоставление сетевому сервису доступа ко всем настройкам приложения Microsoft Excel в DCOMCNFG
  3. запуск этой команды "appcmd set config-section: asp-enableParentPaths: true", потому что это единственное, что я смог найти
  4. С помощью .SaveCopyAs (), который работал, но вызывал различные ошибки

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

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

6 12

6 ответов:

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

Решение:

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

- запуск DCOMCNFG.exe и перейдите в раздел "службы компонентов>компьютеры>Мой компьютер".
- Щелкните правой кнопкой мыши "Мой компьютер" и выберите "Свойства".
- Откройте вкладку "COM Security". Добавь ваша учетная запись для всех перечисленных кнопок ("редактировать ограничения... и редактирования по умолчанию..."кнопки в разделе" разрешение на доступ " и "запуск и активация разрешений"). Предоставьте вашему аккаунту все варианты доступа. Нажмите кнопку "Применить", затем "ОК".
-Находясь в 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". Вы должны проверить пул приложений, чтобы узнать, как работает приложение.
Для этого перейдите в раздел "Управление компьютером>службы и приложения>информационные службы Интернета>пулы приложений"
Щелкните правой кнопкой мыши на соответствующем пуле приложений и выберите "Дополнительные настройки". В разделе "модель процесса>идентичность" вы можете найти учетную запись, под которой он работает. Мой был "ApplicationPoolIdentity", который я также не смог найти, поэтому я изменил его на "сетевую службу", как Windows Server 2003.
Как только это установлено, запустите DCOMCNFG.exe. Перейдите в раздел "службы компонентов>компьютеры>Мой компьютер>Конфигурация DCOM".
Найдите и щелкните правой кнопкой мыши на "приложение Microsoft Excel" и выберите "Свойства". Выберите вкладку "Безопасность". В разделе "Разрешения на запуск и активацию "выберите" Настроить "и нажмите "Изменить".
Затем нажмите кнопку " Добавить...' кнопка.
Введите имя соответствующего объекта. учетная запись, в данном случае "сетевая служба" и нажмите кнопку "Проверить имена". Затем нажмите кнопку "ОК".
На странице "разрешения на запуск и активацию" выделите учетную запись "сетевой службы" и установите флажки "локальный запуск" и "локальная активация". Затем нажмите кнопку "ОК".

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

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

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

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

Вы также можете попробовать передать систему.Отражение.Недостающий.Значение вместо того, чтобы опустить необязательные параметры.

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

ShdNx

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

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

Попробуйте включить ISS . Подробности описаны здесь для windows 7

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