【问题标题】:Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) returns String.EmptyEnvironment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 返回 String.Empty
【发布时间】:2012-03-14 19:07:07
【问题描述】:

我有一个 asp.net mvc3 应用程序。现在我想将用户数据保存在

C:\Users{AppPoolUserAccount}\AppData\Roaming\MyProgramm...

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

注意: 该例程位于登录上下文中。我想将用户名和 sessionID 保存在 xml 文件中 防止两个用户通过一个用户帐户同时登录。

为什么?

【问题讨论】:

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


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 我也遇到了这个问题。配置文件加载是 8.0 中的默认设置,但不幸的是它没有帮助。
【解决方案2】:

Environment.GetFolderPath根据设计返回一个空字符串如果文件夹不存在。来自MSDN

Environment.GetFolderPath 方法(Environment.SpecialFolder)

返回值类型:System.String

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

如果操作系统不存在,文件夹将不会实际存在 创建它,现有文件夹已被删除,或者该文件夹是虚拟的 目录,例如我的电脑,它不对应于 物理路径。

【讨论】:

    【解决方案3】:

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

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

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

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

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

    【讨论】:

    • 此信息保存了多长时间?也是在服务器/站点重新启动之后?
    • 不,服务器重启清理应用数据
    猜你喜欢
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 2011-11-04
    • 2011-04-26
    • 2011-10-26
    相关资源
    最近更新 更多