Ошибка доступа к файлу из COM-объекта Excel при запуске из NT-службы в Vista - PullRequest
6 голосов
/ 15 ноября 2008

Мы используем COM-объекты для доступа к таблицам Excel в службе NT (через Windows Scripting Host). До Vista это работало прекрасно, но начиная с Vista, мы получаем эту ошибку:

Microsoft Office Excel не может получить доступ к файлу 'c: \ myfiles \ test.xls'. Есть несколько возможных причин:

  • Имя файла или путь не существует.
  • Файл используется другой программой.
  • Книга, которую вы пытаетесь сохранить, имеет то же имя, что и текущая открытая книга.

Я попытался изменить настройки входа в систему службы NT, чтобы использовать мою учетную запись, учетную запись администратора и локальную систему. Я просмотрел локальную политику безопасности и ничего не нашел. Я потратил несколько дней на поиск в Microsoft KB безрезультатно.

Если скрипт выполняется из консольного приложения, он работает нормально. Файл открывается и обрабатывается без проблем. Ошибка возникает только при выполнении из контекста службы.

Если служба работает в Windows XP или Server 2003 с пакетом обновления 1 (SP1), она также работает нормально. Это происходит только в Vista (и теперь мы получаем сообщения о сбое в Server 2003 SP2)!

Код, за что он стоит, исключительно прост:

dim xl_app
Set xl_app = CreateObject("Excel.Application")
xl_app.Workbooks.Open mypath,0,1

Я подозреваю, что у этого человека может быть та же проблема: http://bytes.com/forum/thread819740.html

Ответы [ 2 ]

1 голос
/ 24 ноября 2008

просто еще несколько вопросов:

  • Какую версию Excel вы используете?
  • Вы пытались запустить службу с повышенными привилегиями?
0 голосов
/ 10 января 2009

Я "вроде" решил эту проблему. Если вы используете «dcomcnfg», чтобы изменить учетную запись для запуска приложения Excel на учетную запись пользователя или «интерактивного пользователя», то запущенный из службы Excel запускается в этой учетной записи и теперь он может обращаться к файловой системе.

Проблема в том, что это глобальная настройка. Если вы используете: * «этот пользователь»: тогда Excel всегда открывается с этим пользователем И всегда открывается без пользовательского интерфейса в сеансе 0, даже для интерактивного использования Excel. IE всегда невидим. * «Интерактивный пользователь»: теперь Excel всегда запускает интерактивную учетную запись пользователя, которая, я думаю, не будет работать для службы, которая будет запускаться при загрузке без НИКАКОГО интерактивного пользователя.

Здесь должны быть какие-то настройки безопасности. Я надеюсь, что у других есть другие идеи.

...