如何在不重新启动服务器的情况下“回收”IIS进程?

获取ASP.NET以查看PATH更改
我已经改变了我的服务器上的环境PATHvariables,需要IIS / W3WP(即我的ASP.NET应用程序)来看看这个变化。 我从另一个问题的答案中了解到(我的重点):

您将不得不回收IIS进程来更新它

我的问题是:如何“回收”IIS进程?

以下是我试图解决这个问题的事情:

  • 使用iisreset
    我已经尝试了一些东西。 我尝试的第一件事是iisreset ,但我的asp.net应用程序没有拿起path的变化。 为了确保我不疯狂,我尝试重新启动服务器,它确实工作:应用程序现在拿起新的PATH

    我很想知道是否有一种方法,我可以防止需要重新启动整个机器,因为我想我的ASP.NET应用程序中更改PATH

    另外一个可能的情况是我误解了另一个问题(那个回答者在说“回收iis”的时候确实意味着iisreset )? 这并不能解释为什么iisreset不适合我的情况,重新启动服务器。 iisreset是否有我缺less的选项?

  • searchinterwebs
    我也尝试寻找解决scheme。 从我的第一次search我的PATH问题导致没有真正的信息(除了上述问题)。 我关于回收IIS过程的第二组search不能很好地工作:我得到关于iisreset信息以及如何回收工作进程

  • 重新启动W3SVC
    回答者build议重新启动W3SVC (“万维网发布服务”),这似乎很有前途,但它也没有为我工作(它可能适用于你!)。 我尝试了改变path的build议,使用全新的命令提示符来validation更改是否完成,并重新启动W3SVC:我的ASP.NET应用程序没有骰子。 重新启动后,新的命令提示符仍然会显示更改的path,我的应用程序也会看到更改(所以更改本身实际上是我想要的)。

    另一个回答者提出了一些类似的问题 ,其中一个重要区别是:让服务保持停止一点点,确认网站不可用(看它实际上是IIS服务该网站)。 这对我来说也是一样的。

  • 杀死正确的IIS进程在脚注上,我考虑的最后一个select是杀死iis的svchost进程,因为这似乎是一个相当残暴的解决scheme。 我试过这个,并杀死了“ svchost.exe -k iissvcs ”,但是这也不起作用。 但也许我只是杀了错误的过程。

  • 更改AppPool设置
    我的应用程序的应用程序池具有以NetworkService标识运行的非默认设置“ Load User Profile = False ”。 我不确定(甚至在阅读内联解释之后)该设置是干什么的,但我可以想象它对PATHvariables有一些影响,就像我的应用程序所看到的那样。 唉,把它设置为True并没有解决任何问题。

只是在非常重要的情况下添加一些最终的细节。 在我的情况下,我试图用这些行的东西来启动bcp.exe

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

我们需要BCP版本11,但是在服务器上有版本10。 该工具有一个独立的安装程序,它将以下重要的位添加到PATH

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

这是不可能的。

在所有现代操作系统(afaik)中,环境variables都是从父进程inheritance的(直到login进程),如果更改variables,则必须确保进程正在运行的会话已重新启动(注销并开启)。

因为IIS是基于services.exe的,所以如果不重新启动(杀死services.exe是不合适的),你无法真正做到这一点。

这是关于它的知识库 。

如果iisreset真的不起作用,那么请尝试重新启动W3SVC服务(在services.msc )。 这基本上是IIS的重新启动。

我刚才遇到了同样的问题,并且阅读了Nitz答案中提到的KB。 这引发了我,因为那篇文章特别提到作为“本地系统”运行的进程。 在我的情况下,我运行我的应用程序池下特定的用户帐户(使login到SQL Server没有密码在configuration文件中),我知道有一个设置“加载用户configuration文件”的应用程序池,默认为“false”。 设置为true,现在回收我的应用程序池似乎做的伎俩就好了。

因此,如果您能够在不同于“本地系统”的用户下运行应用程序池,则可能会解决此问题。