Служба Windows, запущенная учетной записью домена, не может получить доступ к файлу при полном контроле

Я создал службу С#, которая:

- Picks up and opens a local text file
- Opens an Excel-file used as template (saved locally)
- Fills in the data from the text file in the excel file
- Saves the Excel file to a network folder.

Служба запускается с использованием учетной записи домена (я не могу предоставить права учетной записи локальной системы в сети от нашего сетевого администратора...). Когда служба пытается открыть шаблон, я получаю сообщение об отказе в доступе:

Microsoft Excel cannot access the file 'C:\BloxVacation\Template\BloxTemplate.xlsm'. There are several possible reasons:

• The file name or path does not exist.
• The file is being used by another program.
• The workbook you are trying to save has the same name as a currently open workbook.

Файл существует и путь правильный. Файл не используется другим пользователем или программой. Я пытаюсь ОТКРЫТЬ книгу (другая книга не открыта), а не СОХРАНИТЬ ее.

Я получил ту же ошибку, используя системную учетную запись. Причина этого в том, что при использовании interopservices системной учетной записи требуется папка на рабочем столе (ошибка в Windows 7: https://serverfault.com/questions/112927/where-does-the-local-system-account-store-its-personal-files).

C:\Windows\System32\config\systemprofile\Desktop
C:\Windows\SysWOW64\config\systemprofile\Desktop

Создайте эти 2 файла, и ошибка исчезнет для системной учетной записи.

Я дал права пользователя домена на эти папки, и ошибка также исчезла, однако служба зависла в строке кода, где я открываю файл excel. Когда я выполняю точно такой же код с системной учетной записью, код выполняется хорошо (Примечание: я сохраняю файл локально).

 objXL.Workbooks.Open(BloxVacationService.ExcelTemplateFilePath)

Кто-нибудь знает, как решить эту проблему, не переписывая весь сервис в OpenXML? Заранее большое спасибо.


person Jan Solo    schedule 25.09.2013    source источник


Ответы (1)


Если вы сделали все, что описано в вопросе, и он все еще не работает (как это было со мной), ответ довольно прост:

Сделайте пользователя домена локальным администратором на машине, на которой запущена служба. Это решило проблему.

person Jan Solo    schedule 01.10.2013