簡體   English   中英

如何將IIS應用程序池標識用戶區域設置為ApplicationPoolIdentity時,如何設置它

[英]How do you set the IIS Application Pool Identity User Locale when it's set to 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有一個元素在我的機器上看起來像這樣:

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

這兩個設置的組合決定了應用程序池標識運行的環境(以及區域設置)設置。

你應該能夠通過檢查加載..\\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.
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM