如何将IIS应用程序池标识用户区域设置为ApplicationPoolIdentity时,如何设置它

澄清标题。

在IIS中创建应用程序池时,请为其指定名称。 然后,您可以将身份设置为ApplicationPoolIdentiy。

Windows然后创建这个你看不到的神奇用户。 假设应用程序池名称是MyTestAppPool,那么您最终会得到一个名为MyTestAppPool的用户(IIS AppPool \ MyTestAppPool)

发生这种情况时,Windows使用服务器当前区域设置。 让我们说当时是美国。

然后你将它改为英国。 虽然有一个副本,但这并没有复制到我发现的这些魔术用户。 因此,当您的MyTestAppPool设置为US时,您的服务器将设置为UK。

因此,当网站运行并且您需要在正确的区域设置中将某些内容格式化为货币时,由于AppPool而非英国货币,您最终会使用美元。

有没有办法更改AppPool用户的区域设置?

我找到的唯一方法是删除应用程序池并在将服务器区域设置设置为所需后再次重新创建它。 如果我不想那样做怎么办?

如果我需要在不同的语言环境中运行多个网站,如何在创建apppool之前将AppPoolIdentity用户区域设置为其中每一个而不必将服务器更改为我想要的内容,该怎么办?

创建和使用应用程序池标识时,将创建“用户”,并在C:\Users\AppPoolName有一个文件夹。

C:\Windows\System32\inetsrv\config\applicationHost.config有一个元素在我的机器上看起来像这样:

    

这两个设置的组合决定了应用程序池标识运行的环境(以及区域设置)设置。

你应该能够通过检查加载..\Users\AppPoolName\NTUSER.DAT的用户的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist来找出唯一的ID,然后将其与HKEY_USERS\UnqiueId\ControlPanel\International\Locale的设置HKEY_USERS\UnqiueId\ControlPanel\International\Locale设置。

除非您需要设置,否则设置setProfileEnvironment="false"可能更简单。

您可以通过web.config或页面级别设置应用程序的文化。 这应该覆盖应用程序池用户的文化。

看看这个https://msdn.microsoft.com/en-us/library/bz9tc508(v=vs.140).aspx

您的网站不应该依赖服务器设置来按照区域设置的方式工作。 您应该在Global.asax文件或web.config中设置Thread.CultureThread.UICulture

如果您在项目中执行此操作,则可以保护自己免受环境问题的影响。

这样做也会更容易在不同的站点中使用不同的语言环境。

解决此问题的最佳方法是创建自己的用户帐户,将此用户分配给应用程序池。 然后,您可以通过以用户身份登录来更改此用户区域设置。

确保此用户可以访问Web文件

看看这个链接

https://www.bluevalleytech.com/techtalk/blog/assigning-ntfs-folder-permission-to-iis7-application-pools.aspx

您可以通过在Global.asax中设置此项来以编程方式更改应用程序的文化:

 protected void Application_BeginRequest(Object sender, EventArgs e) { Thread.CurrentThread.CurrentCulture = CultureInfo.CurrentCulture; } 

CultureInfo.CurrentCulture将返回您的操作系统文化。

有关这方面的更多信息, 请访问https://support.microsoft.com/pl-pl/kb/306162 , 从c#中检测os语言 。

您不想使用CultureInfo.CurrentCulture(这会返回当前线程的文化),而是使用CultureInfo.InstalledUICulture

 protected void Application_BeginRequest(Object sender, EventArgs e) { Thread.CurrentThread.CurrentCulture = CultureInfo.InstalledUICulture; //sets the thread culture to OS language. }