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

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

让 ASP.NET 查看更改PATH
PATH我更改了服务器上的 环境变量,需要 IIS / W3WP(即我的 ASP.NET 应用程序)才能看到此更改。我理解另一个问题的答案那(强调我的):

你必须回收 IIS 进程让它更新

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

以下是我为解决此问题所尝试的方法:

  • 使用iisreset
    我尝试了几种方法。我首先尝试的是iisreset,但我的 asp.net 应用程序不是接收路径更改。为了确保我没有发疯,我尝试重新启动服务器,结果做过工作:该应用程序现在采用新的PATH

    我很想知道是否有办法可以避免因为我想PATH在我的 ASP.NET 应用程序中进行更改而需要重新启动整个机器...

    可能还有一件事是我误解了另一个问题(回答者iisreset说“回收 iis”的意思)?这不能解释为什么iisreset对我的情况不起作用,而重新启动服务器却起作用。有没有iisreset我遗漏的选项?

  • 搜索互联网
    我也尝试寻找解决方案。从我的首次搜索关于我的PATH问题没有得到任何真正的信息(除了上述问题)。我的第二组搜索关于回收 IIS 进程不能很好地工作:我获得有关iisreset它如何回收的信息工作进程

  • 重新启动 W3SVC
    一个回答者建议重新启动 W3SVC(“万维网发布服务”),这看起来很有希望,但它对我来说也不起作用(但它可能对你有用!)。我尝试了这个建议,通过更改路径,使用新鲜的命令提示符来验证更改是否已完成,然后重新启动 W3SVC:对我的 ASP.NET 应用程序来说毫无用处。重新启动后,新的命令提示符仍将显示更改后的路径,我的应用程序也将看到更改(因此更改本身实际上是我想要的)。

    其他回答者提出了类似建议,但有一个重要的区别:让服务保持停止状态一小会儿,确认其间网站不可用(以查看是否实际上是 IIS 为该网站提供服务)。但这对我来说结果是一样的。

  • 终止正确的 IIS 进程 顺便提一下,我考虑的最后一个替代方案是终止 iis 的 svchost 进程,因为这似乎是一个相当粗暴的解决方案。我试过这个并终止了“ svchost.exe -k iissvcs”,但这也没有用。但也许我只是终止了错误的进程。

  • 更改 AppPool 设置
    我的应用程序的应用程序池有一个非默认设置“ Load User Profile = False”,以身份运行NetworkService。我不确定(即使在阅读内联解释后)该设置的作用,但我可以想象它对PATH我的应用程序所看到的变量有一些影响。唉,将其设置为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\

答案1

这是不可能的。

在所有现代操作系统(据我所知)中,环境变量都是从父进程(直到登录进程)继承的,如果更改变量,则必须确保重新启动该进程所运行的会话(类似于注销和打开)。

由于 IIS 基于 services.exe,因此如果不重新启动,您就无法真正做到这一点(终止 services.exe 是被禁止的)。

这是关于它的知识库

答案2

如果iisreset确实不起作用,请尝试重新启动 W3SVC 服务(在 中services.msc)。这基本上是完全重新启动 IIS。

答案3

我刚刚遇到了同样的问题,并阅读了 Nitz 的回答中链接的 KB 文章。这激发了我的灵感,因为那篇文章特别提到了以“本地系统”身份运行的进程。就我而言,我在特定用户帐户下运行我的应用程序池(这样就可以在配置文件中不使用密码登录 SQL Server),并且我知道应用程序池上有一个设置“加载用户配置文件”,默认值为“false”。将该设置设置为 true,现在回收我的应用程序池似乎就可以了。

因此,如果您能够在“本地系统”以外的其他用户下运行应用程序池,这可能会解决问题。

相关内容