Come "riciclare" il process IIS senza riavviare il server?

Ottenere ASP.NET per vedere le modifiche in PATH
Ho cambiato la variabile PATH dell'ambiente sul mio server e ho bisogno di IIS / W3WP (cioè la mia applicazione ASP.NET) per vedere questa modifica. Ho capito dalla risposta di questa altra domanda che (enfasi mia):

Dovrai riciclare il process IIS per ottenerlo per aggiornarlo

  • Come spiegare l'installazione di Django / Python a Python-newbie che esegue un server IIS condiviso
  • Come può due domini IIS7 condividere la port SSL 443 su un unico IP?
  • C'è modo di dire a IIS7 Manager di modificare i gestori in applicationHost.config?
  • Manca la DFI-related WMI info
  • Autenticazione base di IIS 7.5
  • Problema di identity framework; del pool di applicazioni di IIS
  • La mia domanda: come faccio a "riciclare" il process IIS?

    Ecco le cose che ho cercato di risolvere questo problema:

    • Utilizza iisreset
      Ho provato alcune cose. La prima cosa che ho provato è stata iisreset , ma la mia applicazione asp.net non ha raccolto i cambiamenti del path. Per assicurarmi che non fossi pazzo ho provato a riavviare il server, che ha funzionato: l'applicazione ora raccoglie il nuovo PATH .

      Mi piacerebbe sapere se c'è un modo per impedire di riavviare l'intera macchina solo perché voglio che il mio PATH cambiato nell'applicazione ASP.NET …

      Un'altra cosa che potrebbe essere il caso è che ho frainteso l'altra domanda (che la rispondente ci ha significato iisreset quando si dice "recycle iis")? Questo non spiega perché iisreset non ha funzionato per la mia situazione e il riavvio del server ha fatto. Ci sono opzioni per iisreset che mi manca?

    • Cercando le interwebs
      Ho anche cercato di cercare soluzioni. Dalle mie prime ricerche sulle mie questioni PATH hanno portto a una reale informazione (tranne la summenzionata domanda). Il mio secondo insieme di ricerche sul riciclaggio del process IIS non funziona bene: ottengo informazioni su iisreset e su come riciclare i processi dei lavoratori .

    • Riavvio di W3SVC
      Un responsabile ha suggerito di riavviare W3SVC (il servizio di pubblicazione sul web di World Wide Web) che sembrava promettente, ma non funzionava anche per me (potrebbe funzionare per te!). Ho provato questo suggerimento cambiando il path, utilizzando un prompt di command nuovo per verificare che la modifica è venuto attraverso e ha riavviato W3SVC: nessun dado per l'applicazione ASP.NET. Dopo un riavvio, un prompt di command nuovo mostrerà ancora il path modificato e la mia applicazione vedrà anche la modifica (in modo che la modifica stessa fosse in realtà ciò che volevo).

      Un altro responsabile ha suggerito qualcosa di simile , con una differenza importnte: lasciate che il servizio rimanga fermato per un po ', confermi tra il fatto che il sito non è disponibile (per vedere che è in realtà il servizio IIS che serve). Questo per me ha avuto lo stesso risultato.

    • Uccidere il corretto process IIS Su una nota di piede, un'altra alternativa che ho considerato è uccidere il process svchost per iis, in quanto sembra una soluzione piuttosto brutale. Ho provato questo e ucciso " svchost.exe -k iissvcs ", ma non funzionava neanche. Ma forse ho appena ucciso il process sbagliato.

    • Modifica delle impostazioni di AppPool
      Il pool di applicazioni per la mia app aveva un'impostazione non predefinita " Load User Profile = False " in esecuzione sotto l'identity framework; NetworkService . Non sono sicuro (anche dopo aver letto la spiegazione in linea) che cosa fa l'impostazione, ma potrei immaginare che abbia avuto un effetto sulla variabile PATH come visto dalla mia app. Purtroppo, impostandolo su True non risolveva niente.

    Per aggiungere alcuni dettagli finali nel caso in cui siano importnti. Nel mio scenario sto cercando di avviare bcp.exe con qualcosa lungo queste righe:

     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. } 

    Abbiamo bisogno della versione BCP 11 ma avevamo la versione 10 nella casella server. Lo strumento dispone di un programma di installazione autonomo, che aggiunge i seguenti bit cruciali al PATH :

    • C:\Program Files\Microsoft SQL Server\110\Tools\Binn
    • C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\

    3 Solutions collect form web for “Come "riciclare" il process IIS senza riavviare il server?”

    Questo è imansible.

    Le variables di ambiente vengono ereditate dai processi genitori (fino al process di accesso) in tutti gli OS (afaik) moderni, se si modifica una variabile che è necessario assicurarsi che la session in cui il process sia in esecuzione sia riavviata (tipo di disconnessione e distriggerszione).

    Poiché IIS è basato su services.exe, non si può veramente farlo senza riavviare (uccidendo services.exe è verboten).

    Ecco un KB su di esso .

    Se iisreset non funziona veramente, prova a riavviare il servizio W3SVC (in services.msc ). Questo è fondamentalmente un riavvio totale di IIS.

    Mi sono imbattuto nella stessa questione ora e leggo il KB articolato legato alla risposta di Nitz. Questo mi ha scatenato, in quanto l'articolo specificamente menziona i processi in esecuzione come "Sistema locale". Nel mio caso esegui i miei pool di app in account utente specifico (rende ansible l'accesso a SQL Server senza una password in un file di configuration) e sapevo che esisteva un'impostazione "Carica profilo utente" nel pool di app che è predefinito "falso". Impostare questa impostazione su vero e ora riciclare il mio pool di app sembra fare il trucco bene.

    Quindi, se è ansible eseguire l'app pool in un utente diverso da "sistema locale", questo potrebbe risolvere il problema.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.