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

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\

  • Imansible accedere all'Avure VM tramite RDP
  • Identificare il nucleo di Windows 2000 Server
  • Lo scaricamento di aggiornamenti WSUS quando è impostato "Non memorizzare gli aggiornamenti localmente".
  • E 'Easy Print che funziona sul mio server RDS di Windows Server 2012 R2
  • Random TCP RST su determinati siti web, cosa succede?
  • Come posso fare Windows Server 2012 in esecuzione sul boot KVM con virtio anziché IDE?
  • Server 2012 R2. Aggiungi autorizzazioni a tutte le cartelle e sottocartelle quando l'ereditarietà è distriggersta
  • Windows Configurazione Stato desiderato / DSC: Esiste un modo semplice e "piatto" per usarli?
  • 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.