Temos um sistema que usa chamadas Path.GetTempFile e Path.GetTempPath para trabalhar com arquivos temporários com bastante frequência. Este sistema também funciona como usuário do "Serviço de Rede". Descobrimos que estamos ficando sem espaço na unidade C (para outros problemas, nossos arquivos temporários foram limpos corretamente) e gostaríamos de poder mover o diretório temporário para uma unidade diferente.
A solução mais fácil para isso parece ser alterar as variáveis de ambiente TMP ou TEMP para o usuário do serviço de rede, mas parece que só consigo definir meu próprio usuário ou as variáveis do "sistema" que são substituídas pelo perfil do usuário do serviço de rede. Como defino essas variáveis para o usuário do serviço de rede?
Responder1
Na verdade, é muito difícil. Você pode usar o setx
comando para definir variáveis de ambiente persistentes para outros usuários, mas isso não funcionará para NetworkService, porque as contas de serviço não têm senhas (portanto, suas credenciais sempre serão rejeitadas).
A única maneira que conheço de fazer isso é usando o agendador de tarefas:
- Configure uma tarefa para ser executada como o usuário "serviço de rede".
- Deixe os gatilhos vazios.
- Para a ação, execute-a
cmd.exe
com os parâmetros/c setx temp [target]
. - Execute a tarefa manualmente.
- Exclua a tarefa.
Isso funcionará para definir uma variável de ambiente persistente para o usuário NetworkService. Se isso funcionará com êxito para realocar os arquivos temporários desse usuário ou se causará efeitos colaterais imprevisíveis, não posso dizer com certeza. Pode ser necessário reinicializar para verificar se os arquivos temporários estão sendo colocados onde você deseja.
Você pode verificar se a variável de ambiente foi alterada para o usuário correto usando o environment
comando no WMIC.
Responder2
As variáveis de ambiente da Network Service
conta são armazenadas no Registro do Windows e podem ser modificadas pelo regedit: HKEY_USERS\S-1-5-20\Environment
.