Привет, ребята, этот вопрос не может быть слишком сложным. Предоставьте решение, по крайней мере, для выяснения первопричины проблемы.
В настоящее время я пишу приложение, которое управляет Excel через COM : приложение создает экземпляр Excel на основе COM, открывает некоторые файлы XLS и считывает их содержимое.
Сценарий I
В Windows 7 я запускаю Apache и mySQL, используя xmapp-control с правами системного администратора . Все работает как положено. Сценарий контроллера на основе PHP взаимодействует с Excel, как и ожидалось.
Сценарий II
Проблема возникает, если я запускаю Apache и mySQL как «фоновые задания». Вот как:
Apache и mySQL работают должным образом. В частности, Apache обслуживает HTTP-запросы от клиентов, а PHP может взаимодействовать с mySQL.
Когда я вызываю контроллер PHP, который вызывает Excel и взаимодействует с ним через COM, я получаю сообщение об ошибке.
Сообщение об ошибке поступает из Excel [не самого COM] и выглядит следующим образом:
Интересно, что при первом запуске скрипта контроллера на основе PHP для отображения сообщения об ошибке требуется несколько секунд. Каждый последующий запуск немедленно отображает сообщение об ошибке.
В системных журналах Windows не было ни одной записи отчета о проблеме.
Обратите внимание, что программа PHP и экземпляр Apache не изменились - за исключением способа запуска Apache.
По крайней мере, скрипт контроллера PHP прекрасно может читать файловую систему , поскольку он предоставляет пути к XLS-файлу через scandir () определенного каталога.
Проблемы с параллелизмом не могут быть причиной проблемы. Один экземпляр конкретного контроллера PHP взаимодействует с Excel.
Вопрос
Не могли бы вы предоставить подробности, почему это происходит? Или предоставить способы изолировать основную причину проблемы (например, с помощью сценария PowerShell 2)?
UPDATE-1 :: 2011-11-29
Как было предложено, я переключил задание планировщика задач с SYSTEM на обычный пользователь . Работает. Apache и MySQL приступают к работе и обрабатывают запрос.
К сожалению, ситуация с Excel ничуть не изменилась. Тем не менее, я вижу ошибку.
Как предполагалось ранее, запускается COM-сервер EXCEL. Я могу без проблем изменять различные настройки (например, подавлять диалоги) через COM-экземпляр.
Проблема возникает при вызове этого:
$excelComObject->Workbooks->Open( 'PathToXLSFile' );
UPDATE-2 :: 2011-11-30
Добавлены учетные записи USER, GUEST и EVERYONE с правом READABLE в список управления доступом файл XLS. Без изменений.
Приложение изменено таким образом, что часть PHP создает копию файла XLS как временный файл и перемещает в него содержимое исходного файла. Просто чтобы убедиться, что проблема не вызвана странными именами файлов / путей.
Тем не менее, проблема не устранена.
UPDATE-2 :: 2011-12-05
Я собираюсь отправить методы COM-сервера EXCEL таким образом, чтобы Excel создавал пустой файл и сохранял его в / tmp. Посмотрим, не сможет ли Excel даже прочитать этот файл.