Я создал службу С#, которая:
- 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? Заранее большое спасибо.