Найти папку temp для сетевой службы пользователя?

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

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

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

3 ответов


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

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

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

C:\Dokumente и параметры Настройки\Учетная запись networkservice\Lokale настройки\ТЭМП

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

C:\Documents и настройки\NetworkService\локальные настройки\Temp

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

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-20 \ ProfileImagePath

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

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


в Windows Vista и выше

  1. Системная Учетная Запись (NT AUTHORITY\SYSTEM)
    C:\Windows\TEMP

  2. Сетевые Услуги (NT AUTHORITY\NETWORK SERVICE) C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp

  3. Локальная Служба (NT AUTHORITY\LOCAL SERVICE) C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp


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

всего:

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

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