Eu tenho o Windows 7 Pro x64.
Durante as últimas uma ou duas semanas, às vezes acontece comigo que vários aplicativos não podem gravar no diretório temporário. Descobri que isso ocorre porque a variável de ambiente TEMP é definida como o valor do sistema ( C:\Windows\TEMP
geralmente, eu a defini de maneira diferente) e não para o valor do usuário ( B:\Users\%USERNAME%\Temp
no meu caso). Além disso, o explorer.exe
processo TEMP definido incorretamente, quando esse problema ocorre.
Originalmente, pensei que o valor TEMP incorreto é definido durante o winlogon, mas acontece que nem sempre é esse o caso. Também é importante dizer que isso acontece com vários perfis de usuário no mesmo computador, não apenas com meu próprio perfil.
Ontem, quando isso aconteceu novamente, reiniciei o computador, efetuei login e verifiquei se o explorer.exe
processo tem essa variável TEMP definida corretamente. Então iniciei vários outros aplicativos, todos com TEMP definido corretamente também. Mas hoje, depois de acordar o notebook do modo de suspensão, o explorer.exe
valor TEMP está incorreto novamente e, portanto, todos os outros aplicativos recém-iniciados o herdam! Evidentemente, ainda é o mesmo processo de ontem, como um processo pai para a maioria dos aplicativos, incluindo aqueles que foram iniciados ontem e ainda têm o TEMP definido corretamente! Estou perplexo :-(.
Perguntas: Como pode acontecer algo assim? Por que esse estranho comportamento pode ser causado? Como resolver o problema?
O problema é frustrante, pois sempre tenho que fechar tudo e efetuar logout e login.
Observações:
- Eu uso o ProcessExplorer para ver como é o ambiente atual dos processos individuais.
- Não acho que a memória seja corrompida. Como o TEMP seria preenchido com um absurdo, não com o valor TEMP do sistema válido.
- Há muito espaço nos discos.
- Também não acho que meu perfil esteja corrompido. Porque o mesmo também tenho avisos com outros perfis, e isso nem sempre acontece.
SYSTEM
por exemplo, poderá ser usado,C:\Windows\TEMP
enquanto o uso como uma conta de usuário poderá usar o caminho temporário do perfil.%TEMP%
e use-o:SET dTemp=%SYSTEMROOT%\TEMP
Em seguida, use%dTemp%
o restante do seu script. Solução rápida Suponho que, em termos de como impedir, além de controlar o contexto de segurança do tempo de execução / tempo de execução, o que estiver executando o processo que usa a%TEMP%
variável.TEMP
está definido como padrão do sistema nas variáveis do sistema e na sua configuração nas variáveis do usuário (PC
->Properties
->Advanced System Settings
->Advanced
guia ->Environment Variables...
botão). Como você está verificando oTEMP
valor do Explorer ? Os processos do sistema (por exemplo, iniciados por um serviço) usarão aTEMP
configuração do sistema , enquanto os processos do usuário usarão o usuárioTEMP
.