Служба 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.

Файл существует, и путь правильный. Файл не используется другим пользователем или программой. Я пытаюсь открыть книгу (никакая другая книга не открыта), а не SAVE.

Я получил ту же ошибку, используя системную учетную запись. Причина этого в том, что при использовании interopservices системной учетной записи требуется папка рабочего стола (ошибка в Windows 7: http://forums.asp.net/t/1585488.aspx).

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

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

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

objXL.Workbooks.Open(BloxVacationService.ExcelTemplateFilePath)

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

1 ответ

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

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

licensed under cc by-sa 3.0 with attribution.