Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)返回String.Empty

时间:2012-02-24 10:14:08

标签: c# asp.net asp.net-mvc-3 environment

我有一个asp.net mvc3应用程序。现在我想在

中保存userdata
  

C:\用户{AppPoolUserAccount} \应用程序数据\漫游\ MyProgramm ...

第一次调用Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)我只得到“”(String.Empty)。 第二次通话Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)会返回正确的路径......

注意: 例程在Login-Context中。我想在xml文件中保存用户名和sessionID 防止两个用户通过一个用户帐户同时登录。

为什么?

3 个答案:

答案 0 :(得分:6)

Environment.GetFolderPath返回大多数SpecialFolder枚举值的空字符串,因为未加载用于运行应用程序池的用户的用户配置文件。

您需要配置应用程序池以加载用户配置文件,方法是进入IIS管理器>应用程序池> YourAppPool>高级设置>加载用户配置文件,并将值设置为“true”或打开命令提示符并运行

appcmd set apppool "MyAppPool" -processModel.loadUserProfile:true

(通常你会在C:\ Windows \ SysWOW64 \ inetsrv中运行它。)

以下是一些包含更多数据的链接:

答案 1 :(得分:0)

如果您想共享数据(例如当前登录的用户),请尝试使用以下代码:

在global.asax中,当应用程序启动时:

 var users = new List<Guid>();
 Application["loggedUsers"] = users;

然后,如果用户正在登录,请输入:

var users = (List<Guid>)Application["loggedUsers"];
users.Add(currentlyLoggingOnUserId);
Application["loggedUsers"] = users;

答案 2 :(得分:0)

如果文件夹不存在,

Environment.GetFolderPath按设计返回空字符串。来自MSDN

  

Environment.GetFolderPath方法(Environment.SpecialFolder)

     

返回值类型:System.String

     

指定系统特殊文件夹的路径(如果是该文件夹)   实际存在于您的计算机上;否则,为空字符串(“”)。

     

如果操作系统没有,则实际上不存在文件夹   创建它,删除现有文件夹,或者文件夹是虚拟文件夹   目录,例如“我的电脑”,它与a不对应   物理路径。