.net dll не найден периодически с локальной учетной записью системы - PullRequest
2 голосов
/ 09 сентября 2011

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

Could not load file or assembly 'DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The specified module could not be found.
DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
System.IO.FileNotFoundException: Could not load file or assembly 'DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The specified module could not be found.
File name: 'DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' ---> System.IO.FileNotFoundException: The specified module could not be found. (Exception from HRESULT: 0x8007007E)
   at ConvertXMLtoExcel.ExcelGenerator.CreatePackage(String filePath)
   at ConvertXMLtoExcel.Program.Main(String[] args)


System.IO.FileNotFoundException: The specified module could not be found. (Exception from HRESULT: 0x8007007E)

Я проверил, что файл DocumentFormat.OpenXml.dll находится в GAC. Когда я запускаю инструмент из командной строки вручную, он работает 100% времени. Он работает 100% времени на моей машине разработки (Windows 7).

Однако, когда команда вызывается веб-службой (Apache -> PHP -> exec), она дает сбой примерно в 50% случаев, за исключением приведенного выше.

Я слишком долго изучал эту проблему, чтобы ничего не придумать.

Наилучшие возможные объяснения, которые я прочитал, предполагают проблемы совместимости 32/64 бит или отсутствие DLL в GAC. Но это приведет к 100% провалу, верно? Даже если вы вошли как пользователь?

Я запустил sys internals ProcMon над процессом и запечатлел его как успешный, так и неудачный. У них профили совсем разные. Если я отфильтрую список по «Загрузить изображение», я увижу, что они начинаются точно так же, до точки.

Следующий загружает «C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ mscorwks.dll», отказавший - нет, и загружает «C: \ WINDOWS \ system32 \ faultrep.dll» вместо.

Спасибо за любые идеи!

...