问题标签 [appdata]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - 什么时候应该选择独立存储与 AppData 文件存储?
我最近IsolatedStorage
在 .net 中发现了这些工具,我想知道什么时候应该将它们用于我的应用程序数据,什么时候应该使用 (eg) Application.LocalUserAppDataPath
。
我注意到的一件事是它Application
不存在于 winforms 应用程序之外,因此IsolatedStorage
对于需要一些特定存储的类库来说似乎是有意义的,特别是如果该库可能同时被 Web 应用程序和winform 应用程序。这是唯一的区别点,还是还有更多?
(作为一项规则,直到现在,当图书馆可能需要某种外部存储时,我已经让应用程序向图书馆提供文件流——一般来说,我不喜欢图书馆的想法调用者上下文之外的某种状态。)
c# - 如何获取当前用户的“应用程序数据”文件夹的路径?
1)我怎样才能找到用户正在使用的 Windows 安装驱动器。?我需要这个导航到 DocumentsandSettings 中的ApplicationData。
2)另外我怎样才能获得用户名,以便我可以转到ApplicaitionData。?例如:“D:\Documents and Settings\user\Application Data”。
registry - 特定用户的 SHGetFolderPath()
我正在寻找一种为特定用户获取本地应用程序数据文件夹的好方法——而无需输入该用户的登录详细信息。
SHGetFolderPath()可以接受我想要为其获取本地 appdata 文件夹的任何用户的访问令牌,但要获取访问令牌,您必须提供用户的密码。此外,根据文档,这在 <= Windows 2000 上不受支持。
注册表项HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folder包含 AppData 值,其中包含当前用户的本地 appdata 文件夹的位置......所以我可以在技术上为特定用户安装 HKCU 配置单元并访问该值;但是,Microsoft 似乎强烈反对使用此密钥,而且我听说它有时也可能不准确。
具有讽刺意味的是,在 Windows 上,管理员帐户可以轻松访问和修改任何用户的 appdata 文件夹中的所有数据,只要他们打开资源管理器并浏览到正确的位置......但似乎没有一种简单的方法来以编程方式获取特定用户的 appdata 文件夹的位置。
那么我还有其他选择吗?现在,访问注册表(喘气)似乎是最好的选择,但如果可能的话,我想使用官方的东西,而不是微软不鼓励的东西。
任何建议,将不胜感激。
permissions - 允许管理员从我的程序中修改用户的设置——我最好的选择是什么?
我一直致力于让我的应用程序更易于管理员使用。我真正想做的一件事是允许管理员从程序中修改其他用户的设置——同时仍然允许普通用户修改他们自己的设置,因为我的应用程序不一定只用于想要强制用户使用特定设置的管理员。
我想到了两种可能的方法:
1)将用户设置文件路径从现在的位置(CLSID_APPDATA,通常是Documents and Settings\ Username)移动到世界可访问的路径(CLSID_COMMON_APPDATA ,通常是Documents and Settings\All Users)。然后,将每个用户的设置保存到用户的唯一文件(可能具有与用户的文本 SID 相同的名称),因此该文件夹类似于:
C:\Documents and Settings\All Users\My Company\My Program \settings\123-abc-456-def.settings
C:\Documents and Settings\All Users\My Company\My Program\settings\234-bcd-477-xyz.settings
C:\Documents and Settings\All Users\My公司\我的程序\设置\946-hdc-743-ddd.settings
优点:缺点:
- 这允许管理员查看和直接修改任何用户的设置,因为所有用户的 COMMON_APPDATA 路径都是相同的。这就是我真正想要的样子——这是最直接的——但有一个主要的缺点:
2)不要将设置文件路径移动到全局可访问的路径并直接修改用户的设置文件,而是让我的应用程序在应用程序的 CLSID_COMMON_APPDATA 文件夹中创建并保存一个“覆盖”文件,以允许管理员覆盖用户的设置。
- 权限可能是个问题。要允许普通用户保存他们的设置,您必须允许用户写入程序的 COMMON_APPDATA 设置文件夹。
当然,当保存设置并在磁盘上创建设置文件时,您希望将用户设置文件的写入权限限制为设置所针对的用户和管理员,以便其他受限用户不能修改它们。
但是,可能在用户有机会从程序中编写自己的设置之前,精明的恶意受限用户会在用户不知情的情况下为该特定用户创建设置文件。如果受限用户创建文件,则意味着他们拥有该文件......然后该用户(设置的对象)不能再修改设置,除非管理员更改文件的权限。
这可能是一个不太可能的情况,但它仍然让我担心。
当我的应用程序为该用户(其设置被“覆盖”)加载时,它将检测此文件并加载它而不是位于 CLSID_APPDATA (Documents and Settings\ Username)中的常规设置文件。
优点:缺点:
- 权限很容易处理。
默认情况下,对于Documents and Settings\ Username APPDATA 文件夹,只有管理员和用户名可以从其中访问文件。因此,这本身可以保护用户自己的常规个人设置免受其他受限用户的影响。
为了保护“覆盖”设置,我的应用程序可以简单地拒绝除管理员之外的所有人对 COMMON_APPDATA 文件夹(写入覆盖文件的位置)的写访问权限,然后就是这样。这些覆盖设置只能由管理员修改。
- 这种方法显然比较迂回。如果用户修改了他自己的常规个人设置,管理员将不会看到这些更改——管理员只能看到他用来覆盖用户常规设置的设置(他可以强制用户使用这些设置)。
在某些方面,这可能很好,但是……它是环形交叉路口的事实让我有些反感。
我很想听听你们对此的看法。哪个是我最好的选择?我个人更倾向于#2,因为虽然它不那么简单,但它似乎更安全,并且不会让管理员感到困惑。
但是,我也愿意接受建议。您认为有更好的选择吗?
编辑 7/6/09:我应该注意,对于选项 #2,管理员不仅可以使用单个覆盖文件覆盖所有用户的设置,还可以使用特定于该用户的覆盖文件覆盖单个用户的设置(就像使用选项 #1,该文件名可能是设置被覆盖的用户的 SID)。不确定原始帖子中是否完全清楚。
c# - 如何在 C# 中获取给定用户的 AppData 目录?
是否可以获取不是在 C# 中运行程序的用户的给定用户的应用程序数据目录?
visual-studio - 如何在 Visual Studio 中添加 App_Data 文件夹?
这是一个愚蠢的问题,但是如何将 App_Data 文件夹添加到项目中?我有一个要包含在项目中的 xsd 文件。
c# - 如何为我的 ASP.NET Web 应用程序引用 App_Data 文件夹中的 Sqlite db 文件?
我目前根据 ASP.NET 最佳模式和实践将我的 sqlite db 文件存储在 App_Data 文件夹中。
目前我在 webconfig 中使用以下内容:
以及以下代码:
它导致 sqlite 创建一个新数据库(其中没有表),因此我的数据访问调用都不起作用,因为它们没有找到表名。如何从我的 WebApplication 代码中引用 App_Data 文件夹中的 sqlite db 文件?
谢谢!
windows - Microsoft 是否有关于在不同 Windows 平台上存储应用数据与用户数据的最佳实践文档?
在创建将针对多个 Windows 版本的应用程序时,确定应将应用程序特定数据存储在何处的最佳做法是什么。具体来说:
- 应用程序特定数据(例如应用程序配置数据)
- 用户特定数据/设置
例如,我知道在 Windows Vista 上可以使用环境变量,例如 %APPDATA%,但是 Windows 7、Windows XP、Windows 98 呢?
我的主要问题是,微软是否有这方面的最佳实践文档,概述了不同类型数据(应用程序与用户)的文件系统位置以及在读取/写入这些位置时需要牢记的安全隐患?
我还对这不仅与 .NET 应用程序(可以使用 ApplicationSettingsBase )以及非托管 C/C++ 应用程序有何关系感兴趣。
感谢 Pax 和 Remus 的两个出色答案。我也发现了这个项目(特定于 XP):
asp.net - 在 App_Data 中写入文件会导致 tempdata 为空
我有一个小的 asp.net MVC 1 Web 应用程序,它可以存储文件并在 App_Data 目录中创建目录。当写操作成功时,我向临时数据添加一条消息并执行redirectToRoute。问题是执行操作时临时数据为空。如果我将文件写入 Web 应用程序根目录之外的目录中,则临时数据不为空,并且一切正常。为什么在 app_data 中写入似乎可以清除 tempdata 的任何想法?
编辑:如果 DRS.Logic.Repository.Manager.CreateFile(path, hpf, comment) 在 App_Data 中写入,则在重定向到的操作中 TempData 将为空。如果它是 Web 应用程序根目录之外的目录,那很好。没有异常被抛出。
asp.net - 如何将数据库从服务器复制到应用程序的 AppData 文件夹?
我一直在研究访问本地计算机中数据库的 ASP.NET 应用程序。现在我想把这个数据库放在应用程序的 AppData 文件夹中,这样我就可以从访问 mdf 文件的 VS SQL 实例中轻松地处理它,并轻松地在程序员之间复制和共享它。
非常感谢!