查找 Windows 用户的“真实”应用程序数据文件夹?

2024-04-05

我有一个 Delphi 6 应用程序,像大多数 Windows 应用程序一样,将数据读取/写入到用户的“本地应用程序数据”文件夹。我使用下面的代码来确定该文件夹。到目前为止,该代码对我的大多数用户都有效。我遇到过一个用户,其本地应用程序数据不在预期的文件夹中:

C:\Users\Bob\AppData\Roaming\

通常本地应用程序数据文件夹解析为:

C:\Documents and Settings\Bob\Application Data\

该用户的特殊情况的奇怪之处在于,通常在 HKEY_LOCAL_MACHINE 中找到的几个注册表项实际上位于 HKEY_CURRENT_USER 中。它们在 Windows 7 上运行。

由于缺乏更好的词,有没有办法获取用户的“真实”应用程序数据,以便我可以更好地应对这种情况?如果需要在 CSIDL_APPDATA、CSIDL_COMMON_APPDATA 和 CSIDL_LOCAL_APPDATA 特殊文件夹之间进行智能选择,那么这样做的逻辑是什么?正如您所知,我正在寻找一种通用功能,无论用户运行的 Windows 版本或其特定的 PC 配置如何,都可以根除正确的应用程序数据文件夹。

我发现这个 Stack Overflow 帖子似乎有答案,但它使用的是 .NET 库中的函数,而我使用的是 Delphi 6。如果这个解决方案回答了我的问题,有人可以告诉我一种在 Delphi 中复制它的快速方法吗:

如何获取当前用户的“Application Data”文件夹的路径? https://stackoverflow.com/questions/915210/how-can-i-get-the-path-of-the-current-users-application-data-folder

// Function to get the app data special folder.
function GetAppdataFolder: string;
begin
   Result := GetSpecialFolderLocation(CSIDL_APPDATA);
end;

您链接到的 .net 代码使用Environment.SpecialFolder.ApplicationData这与CSIDL_APPDATA。因此,您的代码已经等同于您链接到的 .net 代码。这些都指的是相同的位置FOLDERID_RoamingAppData http://msdn.microsoft.com/en-us/library/windows/desktop/dd378457.aspx.

查看文档FOLDERID_RoamingAppData http://msdn.microsoft.com/en-us/library/windows/desktop/dd378457.aspx。它说:



Default Path        %APPDATA% (%USERPROFILE%\AppData\Roaming)
Legacy Default Path %APPDATA% (%USERPROFILE%\Application Data) 
  

“默认路径”是您在 Vista 或更高版本中看到的路径。 “旧路径”是您在 XP 上看到的路径。

您观察到的不同行为只不过是 XP 和 Vista/7/8 之间的预期差异。

在我的 Windows 机器上,

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

评估为

C:\Users\heff\AppData\Roaming

换句话说,您的代码已经在做正确的事情了。您根本不需要对其进行任何更改。继续使用GetSpecialFolderLocation(CSIDL_APPDATA).


该用户的特殊情况的奇怪之处在于,通常在 HKEY_LOCAL_MACHINE 中找到的几个注册表项实际上位于 HKEY_CURRENT_USER 中。

这并不罕见。应用程序经常配置默认设置HKLM然后将它们复制到HKCU当应用程序第一次运行时。如果不了解相关设置的更多细节,就很难对问题的这方面发表评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找 Windows 用户的“真实”应用程序数据文件夹? 的相关文章

  • 检查Windows电源管理是否关闭了显示器

    如何在 Windows 7 和 XP 中以编程方式检查 Windows 电源管理 是否已关闭显示屏 如果能收到一个活动就更好了 我不认为 XP 可以做到这一点 Windows 7 中有各种与电源管理相关的好东西 这Windows API 代
  • 在 WSL Ubuntu 20.04 上安装 npm 后,我收到消息“/usr/bin/env: ‘bash\r’: No such file or directory”

    运行时我看到以下消息npm install or npm来自终端的命令 执行中node按预期工作 gt npm install usr bin env bash r No such file or directory 2023 年 7 月更
  • Node.js + Socket.io + Windows 7 / 8?

    我一直在到处寻找 但似乎找不到解决方案 是否可以在 Windows 7 上的 Node js 上安装 Socket io 如果没有 是否有某种替代方案 或者您知道未来有任何 Windows 支持吗 通常使用 Node js 包管理器 但是我
  • Windows平台下C语言控制串口DTR和RTS引脚

    如何在windows平台上控制串口的DTR和RTS引脚 我希望通过升高或降低电压来对其进行位敲击或操作 您需要使用EscapeComm 函数 https learn microsoft com en us windows desktop a
  • 使用 Windows 命令行连接文本文件,删除前导行

    我需要连接一些相对较大的文本文件 并且更喜欢通过命令行来完成此操作 不幸的是我只有Windows 无法安装新软件 type file1 txt file2 txt gt out txt 允许我几乎得到我想要的 但我不希望 file2 txt
  • Delphi 5 的哈希表实现 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您知道 Delphi 5 的良好且免费的哈希表实现吗 我需要在哈希表中组织大量数据 并且我有点担心在网
  • TColorProperty德尔福柏林10.1.2?

    我正在尝试将组件从 Delphi 7 转换为 Delphi Berlin 平面组件 https sourceforge net projects flatstyle https sourceforge net projects flatst
  • 如何保证对象只有一个线程

    我有以下代码 class Service public void start creates thread which creates window and goes to message loop void stop sends WM C
  • 如何在子 shell 中运行 cmd.exe 批处理文件

    我有一个批处理文件 通常像这样调用 longjob cmd gt result txt 2 gt 1 这工作正常 但脚本在执行过程中更改了目录 将我的 shell 留在该目录中 这很麻烦 有没有办法在子 shell 中运行命令 同时仍然允许
  • 使用 BitBlt 捕获程序窗口始终返回相同的图像

    我编写了以下代码 C Win32 来捕获游戏窗口屏幕并从图像中获取像素颜色数组 函数 autoB 完成这项工作 然后我将结果数组绘制到窗口中以直观地检查我得到的结果 问题是 这个程序在我启动计算机后只工作一次 在第一次 缓存 从游戏中获取的
  • 如何使用 Gmail 的 SMTP 和 Indy 10 发送电子邮件?

    我正在使用 Delphi 2009 和 svn 中最新的 Indy 10 通过 SMTP 发送电子邮件 但它不适用于 Gmail Google Apps 托管域 当我尝试发送电子邮件时 我收到 必须首先发出 STARTTLS 命令 我尝试用
  • 使用 BitmapEncoder 生成时如何使 GIF 循环重复

    我能够使用 BitmapEncoder C WinRT 创建动画 gif 但是 我一直无法弄清楚如何让GIF循环回来并从头开始 没有尝试太多 因为我不确定要尝试什么 搜索了更多要在 GIF 上设置的属性 但找不到任何相关内容 好吧 终于能弄
  • 使用 Windows 批处理文件在文本文件中添加新行

    我有一个文本文件 其中有 200 多行 我只想在第 4 行之前添加一个新行 我使用的是 Windows XP 输入前的示例文本文件 header 1 header 2 header 3 details 1 details 2 输出后 hea
  • 如何在Windows 8上正确使用SCardGetStatusChange?

    智能卡服务在 Windows 8 上的行为有所不同 并且 MSDN 尚未更新其文档 任何人都可以提供有关如何正确调用 SCardGetStatusChange 来监视 Windows 8 上的智能卡操作的代码片段吗 提前致谢 这是我为个人博
  • 如何使用 FieldDefs 在运行时创建新的 SQLite 文件和表?

    我正在使用 Delphi Seattle 在全新的 SQLite 文件中创建一个全新的表 并且仅使用 FieldDefs 和非可视代码 我可以使用 ExecSQL CREATE TABLE 语法创建一个表 但不能如下所示 我得到 没有这样的
  • 如何在Delphi中显示Vista风格的气球提示?

    在输入验证时 我使用气球提示而不是消息框 我的问题是 在 Vista 上 它们具有带圆角的旧 XP 样式 而不是较新的矩形外观 我尝试使用 CreateWindowEx 创建它们并且tooltips class32或使用 SendMessa
  • 将 gnuplot 嵌入现有 QtWidget 中

    我正在用 C 创建一个 伪 实时绘图应用程序 使用 gnuplot 作为绘图后端 我的要求之一是绘图必须位于现有窗口内 而不是有一个单独的绘图窗口 gnuplot 默认为 Gnuplot 有一个选项可以指定 Qt 小部件 ID 这似乎适合我
  • 如何使用 PowerShell 扩展 ZIP 存档(UTF-8 文件名)

    我的 zip 存档有一个文件 P re No l txt 该 zip 可以通过 Windows 文件资源管理器 7 Zip 或我尝试过的任何其他工具很好地扩展 但我不知道如何从 PowerShell 中做到这一点 显然我已经尝试过展开 存档
  • Rails Windows Vagrant 响应时间非常慢

    我在跑 Vagrant 1 7 1 Rails 4 1 4 Thin 1 6 1 Windows 7 每个静态文件的发送时间都超过一秒 在我的 PC 上加载一个页面可能需要大约 20 秒 而在同事的 Linux 机器上则只需瞬间 有一些帖子
  • 在 Windows 7 上的 Sourcetree 中比较 Word docx 文件

    我一直在尝试获取在 Windows 7 上的 Sourcetree 中工作的 Word docx 文件的文本差异 我已按照此处的说明进行操作将 Microsoft Word 与 git 结合使用 http blog martinfenner

随机推荐

  • onIabPurchaseFinished 从未调用过。

    我一直在尝试为我的第一个应用程序设置应用内计费 并且一直在使用 android test purchased sku 购买完成 我设法将 SKU 放入我的库存中 但是 正如标题所示 onIabPurchaseFinished 从未被调用 我
  • DTAssetProviderService 无法使用模拟器启动 DTXConnection

    更新到 Xcode 7 3 后 我无法在 iOS 模拟器中运行我的应用程序 每次尝试时我都会收到以下错误消息 DTAssetProviderService 无法使用模拟器 iPhone 启动 DTXConnection 检查系统日志是否有错
  • 使用 ILightweightLabelDecorator 装饰器

    实现了上述之一后 谁能告诉我如何将其连接起来directly给观众 通常的来源都没有解释 Martin 据我所知你需要一个ILabelDecorator获得它的唯一简单方法是使用工作台 UI viewer setLabelProvider
  • Html 文件输入,从 File 对象设置选择

    据我了解
  • 如何显示 Scala 控制器类的正确 json 响应?

    我正在尝试从 Postgresql 数据库 v9 5 表获取 json 响应以显示在我的视图页面上 我尝试了以下操作 因为我的应用程序执行正常 但我没有获取 显示我所需的正确 json 数据 如它包含 Stream 斜杠 和问号 如Stre
  • 不读取 awk 命令文件中的文件第一行

    我无法使我的 awk 命令列表无法读取数据文件的第一行 它必须读取除第一行之外的每一行 然后将运动员和年份连接成一个字符串 后来在程序中我使用了数组 我没有列出所有代码 下面列出了数据文件的前两行 我需要让它不读取标题行 而只从第一位运动员
  • 在 Angular 中调用具有依赖关系的函数

    使用 Angular 5 和 UIrouter 状态路由 我根据此接口使用附加的自定义路由状态属性 interface AugmentedNg2RouteDefinition extends Ng2StateDeclaration defa
  • Django 自定义中间件 request.user 始终 AnonymousUser

    我在用着姜戈2 2 and DRF 在我的应用程序中 根据用户属性 我需要更改request user给不同的用户 class CustomMiddleware def init self get response self get res
  • Rails 中的宏是什么?

    我正在读Rails 文档 http guides rubyonrails org active support core extensions html 我遇到过这个词macros 我找不到这个术语的定义 在 Rails 的上下文中 有人可
  • 如何从 Android 移动设备键盘获取 keyCode?

    目前 我在移动设备上遇到问题 我有一个输入字段 其中只允许按下某些键 例如仅数字 0 9 它在网络浏览器上运行得非常好 但是当我在 Android 移动设备中打开它时 它失败了 我用过keyup and keypress keyup正在工作
  • 编写迭代器[重复]

    这个问题在这里已经有答案了 编者注 此代码示例来自 Rust 1 0 之前的版本 不是有效的 Rust 1 0 代码 此代码的更新版本不再因更改方式而产生错误for循环被实现 我正在用 Rust 编写一个 Vector 结构 pub str
  • 数据表 DT[i, j, by] 不使用 i 中的条件选择组,而是尝试过滤组内唯一值的数量

    我不确定我的数据发生了什么 也许我遗漏了一些简单的东西 我的数据集有一个 id dSc 和分配给每个 id 的簇 点 我想过滤掉那些只分配了一个簇的 id e g BS 100021 has only 1 cluster point ass
  • 使用 C++ 风格转换从 Void* 转换为 TYPE*​​:static_cast 或 reinterpret_cast

    因此 如果您从 Void 转换为 Type 或从 Type 转换为 Void 您应该使用 void func void p Params params static cast
  • 使用shell脚本修改ini文件

    我有一个ini与此类似的文件 test foo bar 如果我们称之为ini文件为test1 ini 我如何改变的值foo to foobarbaz例如使用shell script 我已经尝试过以下方法 但它对我不起作用 我在 ini 文件
  • ASP.NET core 2使用重写中间件充当反向代理

    我正在努力让我的 asp net core 2 应用程序使用 URL 重写规则充当反向代理 我的startup cs中有以下内容 var rewriteRules new RewriteOptions AddRedirectToHttps
  • 基于 BBB DT 的方法

    我已经使用平台设备模型成功为我的自定义协议实现了基于 GPIO 的驱动程序 我想使用设备树方法升级它 因此 对于初学者来说 我有一个 beaglebone black 并且我使用在 uboot 控制台消息显示期间启用和验证的设备树配置交叉编
  • Pipenv 在安装 python 3.6 包时失败

    我正在做一个项目 需要pipenv和Python 3 6 当我跑步时pipenv sync 我收到错误消息 An error occurred while installing django markdown deux 1 0 5 hash
  • asp:Panel runat="server" 在 C# .cs 代码页中不可用

    我的 ascx 页面 div class form div
  • 如何获取 Facebook 应用程序页面中的页面 ID

    我的应用程序作为选项卡托管在 FaceBook 中 并且我希望在添加应用程序以存储在我的逻辑中时获取页面 ID 如何获取页面 ID 我知道它存储在 URL 中 但是当我尝试从页面获取它作为服务器变量时 即使我的应用程序配置为iFrame 但
  • 查找 Windows 用户的“真实”应用程序数据文件夹?

    我有一个 Delphi 6 应用程序 像大多数 Windows 应用程序一样 将数据读取 写入到用户的 本地应用程序数据 文件夹 我使用下面的代码来确定该文件夹 到目前为止 该代码对我的大多数用户都有效 我遇到过一个用户 其本地应用程序数据