Como “reciclar” o processo do IIS sem reiniciar o servidor?

3

Obtendo o ASP.NET para ver as alterações em PATH
Eu mudei a variável PATH do ambiente em meu servidor e preciso do IIS / W3WP (ou seja, meu aplicativo ASP.NET) para ver essa alteração. Eu entendo da resposta desta outra pergunta que (ênfase minha):

You'll have to recycle the IIS process to get it to update

Minha pergunta: como faço para "reciclar" o processo do IIS?

Aqui estão as coisas que tentei resolver:

  • Use iisreset
    Eu tentei algumas coisas. A primeira coisa que tentei foi iisreset , mas meu aplicativo asp.net não selecionou as mudanças de caminho. Para ter certeza de que eu não estava louco, tentei reiniciar o servidor, o que fez funcionar: o aplicativo agora pega o novo PATH .

    Adoraria saber se há uma maneira de evitar a necessidade de reinicializar a máquina inteira só porque quero que meu PATH tenha sido alterado no meu aplicativo ASP.NET ...

    Uma outra coisa que pode ser o caso é que eu entendi mal a outra pergunta (que o respondente não quis dizer iisreset ao dizer "reciclar iis")? Isso não explica por que iisreset não funcionou para minha situação e a reinicialização do servidor funcionou. Existem opções para iisreset que estão faltando?

  • Pesquisando as interwebs
    Eu também tentei procurar por soluções. Das minhas primeiras pesquisas sobre meus PATH problemas não resultaram em reais info (exceto a questão acima mencionada). Meu segundo conjunto de pesquisas sobre a reciclagem do processo do IIS não funciona bem : Recebo informações sobre iisreset e como ele pode reciclar processos de trabalho .

  • Reiniciando o W3SVC
    Um respondente sugeriu reiniciar o W3SVC (o "Serviço de Publicação na World Wide Web"), que parecia promissor, mas também não o fez. trabalhe para mim (pode funcionar para você embora!). Tentei essa sugestão alterando o caminho, usando um prompt de comando fresh para verificar a alteração e reiniciei o W3SVC: no dice para meu aplicativo ASP.NET. Após a reinicialização, um prompt de comando novo ainda mostrará o caminho alterado, e meu aplicativo também verá a alteração (portanto, a alteração em si era, de fato, o que eu queria).

    Outro respondente sugeriu algo semelhante , com uma diferença importante: deixar o serviço parado por um tempo, confirme em entre isso, o site não está disponível (para ver, na verdade, o IIS servindo esse site). Isso teve o mesmo resultado para mim.

  • Matando o processo correto do IIS Em uma nota de rodapé, uma alternativa final que considerei é matar o processo svchost para iis, já que isso parece uma solução bastante bruta. Eu tentei isso e matei " svchost.exe -k iissvcs ", mas isso não funcionou também. Mas talvez eu tenha acabado de matar o processo errado.

  • Alterando as configurações do AppPool
    O pool de aplicativos do meu aplicativo tinha uma configuração não padrão " Load User Profile = False " em execução na identidade NetworkService . Não tenho certeza (mesmo depois de ler a explicação em linha) o que a configuração faz, mas posso imaginar que ela teve algum efeito na variável PATH , conforme visto pelo meu aplicativo. Infelizmente, defini-lo como True não resolveu nada.

Para adicionar alguns detalhes finais, basta destacar que eles são importantes. No meu cenário, estou tentando iniciar bcp.exe com algo ao longo destas linhas:

using (var process = new Process()) 
{
    process.StartInfo.FileName = "bcp.exe";
    process.StartInfo.Arguments = myArguments;
    process.StartInfo.UseShellExecute = false;
    process.Start();
    // Code to handle the process exiting and use the output.
}

Precisamos da versão 11 do BCP, mas possuíamos a versão 10 na caixa do servidor. A ferramenta possui um instalador independente, que adiciona os seguintes bits cruciais ao PATH :

  • C:\Program Files\Microsoft SQL Server0\Tools\Binn
  • C:\Program Files\Microsoft SQL Server\Client SDK\ODBC0\Tools\Binn\
por Jeroen 14.07.2014 / 09:31

3 respostas

3

Isso é impossível.

Variáveis de ambiente são herdadas dos processos pai (até o processo de login) em todos os sistemas operacionais modernos (afaik), se você alterar uma variável você precisa garantir que a sessão em que o processo está sendo executado seja reiniciada (tipo logging off e em).

Como o IIS é baseado em services.exe, você não pode fazer isso sem reiniciar (matar o services.exe é verboten).

Aqui está um KB sobre isso .

    
por 14.07.2014 / 15:02
0

Se iisreset realmente não funcionar, tente reiniciar o serviço W3SVC (em services.msc ). Isso é basicamente uma reinicialização total do IIS.

    
por 14.07.2014 / 11:31
0

Eu encontrei o mesmo problema agora e li o artigo da KB linkado na resposta da Nitz. Isso me acionou, porque esse artigo menciona especificamente processos sendo executados como "Sistema Local". No meu caso, eu executo meus pools de aplicativos em contas de usuário específicas (torna o login no SQL Server possível sem uma senha em um arquivo de configuração) e sabia que havia uma configuração "Load user profile" no pool de aplicativos cujo padrão é "false". Defina essa configuração como true e agora a reciclagem do meu pool de aplicativos parece funcionar bem.

Portanto, se você conseguir executar o pool de aplicativos com um usuário diferente de "sistema local", isso poderá resolver o problema.

    
por 04.10.2016 / 18:48