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

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

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

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

Проблема:
ОС: Windows 7 Предприятие
Сообщение об ошибке: исключение из 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 Application' в DCOMCNFG
  3. Выполнение этой команды "appcmd конфигурация набора-section:asp-enableParentPaths:true", потому что это - единственная другая вещь, которую я мог найти
  4. Используя.SaveCopyAs (), который работал, но вызвал различные ошибки

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

Спасибо, Jeff

13
задан Mo Patel 23 May 2014 в 13:31
поделиться

3 ответа

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

Решение:

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

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

-Попробуйте выполнить следующие действия DCOMCNFG и изменить пул приложений.

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

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

DCOMCNFG Для окон 7:

Эта ошибка происходит на 'Excel app = New Application();' calls

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

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

.
17
ответ дан 1 December 2019 в 22:57
поделиться

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

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

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

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

ShdNx

0
ответ дан 1 December 2019 в 22:57
поделиться

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

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

.
3
ответ дан 1 December 2019 в 22:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: