Найти папку temp для пользователя Network Service?

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

Я хочу скопировать файл из местоположения, которое они выбирают, в временное местоположение, доступное SQL Server, но мне трудно найти место. Я не могу просто вызвать Path.GetTempPath(), потому что это дает мне пользовательскую температуру, к которой SQL Server не может получить доступ.

Есть ли папка, которую я могу получить, которая всегда будет работать?

Ответы

Ответ 1

Временная папка для учетной записи сетевой службы находится здесь:

% Windir%\ServiceProfiles\NetworkService\AppData\Local\Temp

В Windows XP/2003 профиль сетевой службы находится в общем каталоге профиля пользователя. На немецкой машине он находится здесь:

C:\Dokumente und Einstellungen\NetworkService\Lokale Einstellungen\Temp

На английском компьютере он будет здесь:

C:\Documents and Settings\NetworkService\Local Settings\Temp

Вы можете найти путь к профилю во всех версиях Windows, запросив это значение реестра:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ПрофильList\S-1-5-20\ProfileImagePath

Это не дает вам локализованного имени "Локальные настройки" в XP/2003.

По умолчанию администраторы могут писать в профиль службы сети. Использование этой временной папки для вашей цели должно быть в порядке.

Ответ 2

Почему бы просто не предоставить разрешение NETWORK_SERVICE для определенной папки и сообщить пользователям о размещении там резервных файлов?

Или просто запустите:

BACKUP DATABASE [master] TO DISK='master.bak'
GO

из SSMS и посмотреть, куда записывается файл.