IIS6 WebService下Environment.GetFolderPath(Environment.SpecialFolder.ApplicationFolder)返回的错误路径

在运行的测试计算机上(Windows XP,IIS5.1),在自定义进程标识下的C#.NET WebService(.SVC)中执行以下代码(使用machine.config指定用户)

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 

正确回归

 c:\Documents and Settings\myUserName\Application Data 

但是,在运行IIS6的(终端服务)Windows 2003计算机上执行相同的代码但现在使用ApplicationPool指定相同的进程标识,该方法返回:

 c:\Documents and Settings\Default User\Application Data 

我在Win2003 / IIS6机器上运行时检查过的事情:

  1. myUserName属于IIS_WPG组(甚至尝试过管理员)
  2. 对Environment.UserName的调用正确返回myUserName
  3. Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)的调用; 还会返回“默认用户”路径,同样使用DesktopDirectory
  4. 以myUserName身份登录并确保C:\ Documents和settings \ myUserName存在
  5. 在Windows 2003框中的.net应用程序中运行完全相同的代码,这将工作并返回正确的路径。

我很困惑,它只发生在IIS6下运行时。 它几乎就像是认为呼叫来自网络服务本地系统用户,而不是检查运行应用程序池的身份。

顺便说一下,当我查看Procmon并观看从Web服务调用的C ++应用程序时,它没有读取和写入C:\ Documents和settings \ myUserName \ ApplicatonData这样的问题,它似乎没有问题,也许它构建了路径不同。

我开始认为这可能是.NET中的一个错误?

谢谢。

汤姆德洛福德

解决了。 显然这是’按设计’,因为IIS6不加载用户配置文件设置。

微软建议我先升级到IIS7或调用LoadUserProfile,我想知道是什么让他们从IIS5.1改变了这个function。

http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/890fa85a-b11a-4fbe-a333-cbe69abd72a7

无论如何吸取教训,不要假设function没有被删除,并且总是使用相同的应用服务器进行测试,即使惹恼了IT部门!

是。 这不是一个错误。 在哪个用户运行应用程序池?

让我们分一点:

测试机器使用IIS来托管服务或内置Web服务器? 如果您使用内置Web服务器,它将在您的用户下运行。 如果您使用IIS,哪一个是池用户?

如果是网络服务或本地系统,则该进程在其中一个用户的上下文中运行,实际上,调用:

 Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) 

没关系

您应该更改池的用户(并回收池)以查看更改。