让 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,现在回收我的应用程序池似乎就可以了。
因此,如果您能够在“本地系统”以外的其他用户下运行应用程序池,这可能会解决问题。