Сбой доступа к файлу из COM-объекта Excel при запуске из службы NT в Vista

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

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

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

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

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

Если служба работает в Windows XP или Server 2003 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


person Community    schedule 15.11.2008    source источник
comment
Можете ли вы открыть файл Excel в сервисе с помощью обычного Win32 API (например, CreateFile?)   -  person Martin v. Löwis    schedule 16.11.2008
comment
На каком языке написана услуга? Как вы вызываете скриптовый хост?   -  person Igal Serban    schedule 20.11.2008


Ответы (2)


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

  • Какую версию Excel вы используете?
  • Вы пробовали запустить сервис с повышенными привилегиями?
person Dirk Vollmar    schedule 24.11.2008

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

Проблема в том, что это глобальная настройка. Если вы используете: * "this User": тогда excel ВСЕГДА открывается с этим пользователем И всегда открывается без пользовательского интерфейса в сеансе 0, даже для интерактивного использования excel. IE его всегда невидимо. * «Интерактивный пользователь»: теперь excel всегда запускается в интерактивном пользовательском аккаунте, который, я не думаю, будет работать для службы, которая запускается при загрузке БЕЗ интерактивного пользователя.

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

person Community    schedule 09.01.2009
comment
@davidNelson говорил об этом, но вот пошаговое руководство, как решить эту проблему. Работал у меня. bytes.com/topic/c-sharp/answers/ - person ; 28.07.2011