Найти папку 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 и выше
Системная Учетная Запись (
NT AUTHORITY\SYSTEM
)C:\Windows\TEMP
Сетевые Услуги (
NT AUTHORITY\NETWORK SERVICE
)C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp
Локальная Служба (
NT AUTHORITY\LOCAL SERVICE
)C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp
почему бы просто не дать NETWORK_SERVICE разрешение на определенную папку и не сказать пользователям разместить там файлы резервных копий?
всего:
BACKUP DATABASE [master] TO DISK='master.bak'
GO
из SSMS и посмотрите, куда записывается файл.