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



澄清标题。

当您在IIS中创建应用程序池时,您会给它一个名称。然后,您可以将标识设置为ApplicationPoolIdentiy。

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

发生这种情况时,Windows将使用服务器的当前区域设置。假设当时是美国。

然后你把它改成英国。虽然有一个副本,但它不会复制给我找到的这些神奇用户。因此,您的服务器设置为英国,而MyTestAppPool设置为美国。

因此,当一个网站运行时,你需要在正确的区域设置货币格式,因为AppPool而不是英国货币,你最终会使用美元。

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

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

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

创建和使用应用程序池标识时,会创建一个"用户",并且C:UsersAppPoolName中有一个文件夹。

C:WindowsSystem32inetsrvconfigapplicationHost.config中,有一个元素在我的机器上看起来像这样:

<applicationPoolDefaults managedRuntimeVersion="v4.0">
  <processModel identityType="ApplicationPoolIdentity" loadUserProfile="true" setProfileEnvironment="false" />
</applicationPoolDefaults>

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

通过为加载..UsersAppPoolNameNTUSER.DAT的用户签入HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlhivelist,然后将其与HKEY_USERSUnqiueIdControlPanelInternationalLocale设置中的设置进行匹配,您应该能够计算出唯一的Id。

除非您需要设置,否则设置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#中检测操作系统语言。

您不想使用CultureInfo.CurrentCulture(这将返回当前线程的区域性),而是使用CultureInfo.InstalledUICulture

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

相关内容

最新更新