【发布时间】:2011-04-26 00:15:00
【问题描述】:
在我运行的测试机器(Windows XP、IIS5.1)上,以下代码在自定义进程标识下的 C# .NET WebService (.SVC) 中执行(使用 machine.config 指定用户)
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
正确返回
c:\Documents and Settings\myUserName\Application Data
但是,在(终端服务)Windows 2003 机器上运行 IIS6 并执行相同的代码,但现在使用 ApplicationPool 来指定方法返回的相同进程标识:
c:\Documents and Settings\Default User\Application Data
我在 Win2003/IIS6 机器上运行时检查的内容:
- myUserName 属于组 IIS_WPG(甚至尝试过 Admin)
- 对 Environment.UserName 的调用正确返回 myUserName
- 对Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);的调用也会返回一个“默认用户”路径,与DesktopDirectory类似
- 以 myUserName 身份登录并确保 C:\Documents and settings\myUserName 存在
- 在 Windows 2003 机器上的 .net 应用程序中运行完全相同的代码,这可以正常工作并返回正确的路径。
我很困惑,只有在 IIS6 下运行时才会出现。几乎就像它认为呼叫来自 Network Service 或 Local System 用户,并且它没有检查运行应用程序池的身份。
顺便说一下,当我查看 Procmon 并查看从 web 服务调用的 C++ 应用程序时,它在读取和写入 C:\Documents and settings\myUserName\ApplicatonData 时没有这样的问题,它没有似乎有问题,也许它构建的路径不同。
我开始认为这可能是 .NET 中的一个错误??
谢谢。
汤姆·德洛福德
【问题讨论】:
-
这绝对不是错误。
-
你说得对,这是设计使然。
-
我遇到了相同的问题路径,返回的是我客户的一台计算机上的不同用户。我的是一个 Windows 窗体应用程序 C# .Net 2.0 和 3.5
标签: c# .net web-services iis-6