Windows 等效的系统配置目录

2024-05-21

我正在 Ruby 中开发一个 CLI 应用程序,我希望允许通过标准配置文件级联在 Unix 中进行配置/etc/appnamerc, ~/.appnamerc。然而,该应用程序也应该在 Windows 环境中运行,我不确定将像这样的文件放在哪里/etc/appnamerc (C:\windows\system32\etc\drivers看起来这不是正确的地方)。此外,无论我决定采用什么方案来查找系统配置文件,也需要考虑不同版本的 Windows,即C:\Users vs. C:\Documents and Settings。就特定于用户的配置而言,我也不确定让我的应用程序在哪里查找特定于用户的配置文件,以及类似内容的标准命名约定是什么。


您正在寻找的是SHGetKnownFolderPath 函数 http://msdn.microsoft.com/en-us/library/bb762188(VS.85).aspx(或者,在旧版本的 Windows 上,SHGetFolderPath 函数 http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspx).

虽然 Windows 对这些路径是什么以及它们驻留的位置有约定,但这完全取决于版本、配置和其他因素,因此硬编码文件夹名称是bad主意。不过,上述函数从一开始就是获取这些“特殊”文件夹位置的方法。

这些函数的主要参数是已知文件夹ID http://msdn.microsoft.com/en-us/library/bb762584(VS.85).aspx or a CSIDL http://msdn.microsoft.com/en-us/library/bb762494(VS.85).aspx其中指定您要获取哪个文件夹。

实际上,您有两个不同的“标志”:Windows 上的用户特定和机器特定。位置可以特定于单个用户或可供所有用户使用,也可以特定于单个计算机或可用于用户有权访问的所有计算机。下面将对其进行区分。

您想要的内容如下:

  • FOLDERID_ProgramData/CSIDL_COMMON_APPDATA:这是针对所有用户的程序设置,因此大约相当于/etc/foorc。您应该在那里为您的程序创建一个目录并在那里存储您的所有用户配置。注意这个目录是not普通用户可写(就像/etc我想也是如此)。不过,该目录是特定于机器的。
  • FOLDERID_RoamingAppData/CSIDL_APPDATA:这用于用户特定的设置或应用程序数据。对于大多数用例,这应该是您放置此内容的主要位置,因为它将保存在漫游配置文件中,因此可以在用户登录的每台计算机上访问它。所以这相当于你的~/.foorc。适用与所有用户变体相同的规则。
  • FOLDERID_LocalAppData/CSIDL_LOCAL_APPDATA:这是用户特定数据的机器特定位置。通常这应该用于诸如缓存之类的东西,这些东西很好用,但不需要每次用户登录时都通过网络进行复制。请注意,Thunderbird 在将 IMAP 邮件的本地副本存储在漫游配置文件中时犯了一个非常错误的错误 - 当您有几 GiB 的数据时,这有点有趣。

一般来说,请避免仅仅粘贴您的.foorc在用户的配置文件文件夹中。 Windows 不是 UNIX,前面带有点的文件不会自动隐藏(有一个文件系统标志)。对我来说,如果应用程序这样做只是一种烦恼,因为用户的配置文件目录不是 Windows 上进行此类操作的地方。同样,在未经用户同意或明确操作的情况下,“文档”文件夹也不是应用程序创建内容的好地方。 http://blogs.msdn.com/oldnewthing/archive/2006/12/28/1374334.aspx

在 Ruby 中,您应该能够使用 Win32API 库调用这些函数。This http://phrogz.net/ProgrammingRuby/lib_windows.html#Win32API看起来似乎很有希望(虽然丑陋);但是,我还不够了解,无法实际向您展示一个可行的示例。

最后的选择是使用环境变量。环境变量ALLUSERSPROFILE, APPDATA and LOCALAPPDATA是上述文件夹 ID 的相应等效项。

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

Windows 等效的系统配置目录 的相关文章

  • 在新窗口中打开 SAS 程序

    目前 当您在 Windows 中双击 SAS 文件时 它将在您已打开的现有 SAS 会话中打开它 有没有办法让它在窗口中单击时会启动一个新的 SAS 窗口 据我所知 SAS 是一个所谓的 单实例 应用程序 因此它的默认行为是在现有会话中打开
  • 在 debian Squeeze 上安装 RoR

    有什么方法可以在我的 debian squeeze 上安装 Ruby 1 9 2 或 1 8 7 Rails 3 吗 您可能不想在生产计算机上使用 RVM 它的 PATH 魔力会在不明显的地方 例如 cron 作业 被破坏 然后你就会陷入困
  • 在 Android SDK 中设置 JAVA_HOME

    我和对方有一些冲突JAVA HOME配置 当我使用以下代码时 System out println System getenv JAVA HOME I get C jdk1 6 0 23这是正确的地方 但是 当我在 Android buil
  • 如何在 NERDTree 中显示隐藏文件(以句点开头)?

    我怎样才能使NERDTree https github com scrooloose nerdtree显示以 a 开头的文件 时期 我有一个名为 hgignore在项目目录中 如果我使用 NERDTree 浏览到该目录 该文件不会显示在树中
  • 存根 include_recipe 调用以不采取任何操作,但仍将配方计为包含的内容

    我的食谱的默认食谱仅包含其他几个食谱 我知道我可以使用以下方法测试是否包含适当的食谱 expect chef run to include recipe cookbook recipe name 但是当我像这样存根 include reci
  • 在 Windows 上将 Mercurial (hg) 存储库转换为 Git (7)

    我现在真的很沮丧 我有一个现有的 hg 存储库 其中有几个月的编码历史 我想将其放入私有 Github 存储库中 以便我可以从那里对其进行处理 不幸的是我使用的是 Windows 我似乎找不到any转换我实际上可以正常工作的存储库的方法 实
  • 从 Process.StandardOutput 重定向二进制数据会导致数据损坏

    On top of this https stackoverflow com questions 8978390 passing command line arguments from c sharp to a external exe 8
  • 如何从 Bash 命令行在后台 Vim 打开另一个文件?

    我正在从使用 Gvim 过渡到使用控制台 Vim 我在 Vim 中打开一个文件 然后暂停 Vim 在命令行上运行一些命令 然后想返回到 Vim Ctrl Z 在正常模式下 暂停 Vim 并返回到控制台 fg可用于将焦点返回到 Vim job
  • RabbitMq 和“致命错误:握手失败 -handshake_decode_error”

    我正在使用 Windows Server 2012 Erlang 19 2 和 RabbitMq 3 6 6 我在使用 TLS 配置端点之间的连接时遇到问题 我已经尝试了所有关于 SO 的答案 以及所有 RabbitMq 文档here ht
  • 使用 IDLE 编辑的 .py 文件消失了

    我曾经有过Edit with IDLE当我右键单击时的选项 py文件 但我多次卸载 重新安装以使某些东西正常工作 但现在它消失了 我检查了注册表HKEY CLASSES ROOT and HKEY LOCAL MACHINE对于价值低于Py
  • 如何让脚本执行结束后自动删除?

    是否可以制作一个Python脚本 在Windows中执行结束时删除 py文件 自删除 这种方式使您的程序不依赖于操作系统 from os import remove from sys import argv remove argv 0 奖励
  • 使用 Ruby 获取 AWS 区域名称

    我正在为 AWS 开发 Rails 应用程序 并希望为区域名称创建下拉菜单 例如 us east 1 等 如果有人已经创建了 gem 来获取它们 我想使用它 有人知道这样的 gem 或有用的 API 吗 适用于 Ruby 的 AWS 开发工
  • Ruby on Rails 最酷的功能是什么,为什么选择它? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在我问这个问题之前 我浏览了 SO 上 Ruby on Rails 的搜索结果 找不到太多 但以下 在此页面上找到 https stackove
  • (在 Ruby 中)允许混合类方法访问类常量

    我有一个为其定义常量的类 然后我定义了一个类方法来访问该类常量 这很好用 一个例子 usr bin env ruby class NonInstantiableClass Const hello world class lt lt self
  • .wav 文件长度/持续时间,无需读入文件

    有没有办法提取有关 wav 文件长度 持续时间的信息 而无需在 R 中读取文件 我有数千个这样的文件 如果我必须阅读每个文件才能找到其持续时间 那将需要很长时间 Windows 文件资源管理器为您提供了打开 长度 字段的选项 并且您可以查看
  • Windows Workflow Foundation 4 (WF4) 延迟

    我正在与 Visual Studio 2010 的候选版本一起使用 Wf4 编写一个用于批准资源请求的新工作流程 在我的工作流程中 如果请求未获得批准 我希望请求在几天后过期 我们在 WF 3 5 Visual Studio 2008 中通
  • 在OpenCV中将YUV转换为BGR或RGB

    我有一个电视采集卡 其输入内容为 YUV 格式 我在这里看到了与此问题类似的其他帖子 并尝试尝试所述的所有可能的方法 但它们都没有提供清晰的图像 目前最好的结果是 OpenCVcvCvtColor scr dst CV YUV2BGR 函数
  • 代码退出-1073741515 (0xc0000135)“未找到依赖的 dll”

    我正在尝试编写一个简单的程序 与 2019 年相比 Windows 10 64 位 调试 gt x64 遵循 将 Visual C 项目配置为面向 64 位平台 1 include
  • 如何在 JS Rails 响应中包含 HTML?

    我有一个响应 HTML 和 JS AJAX 查询的 FooController app controllers foo controller rb class FooController lt ApplicationController l
  • 如何在 Linux 上通过 FTP 递归下载文件夹 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案

随机推荐

  • VBA (Excel) 中 =Empty 和 IsEmpty() 有什么区别?

    我使用了以下 VBA 代码 Do While Cell i 1 lt gt Empty doing things i i 1 Loop 在 Excel 中迭代列 具有双精度 整数值 然后我发现了一种情况 每当单元格的值为 0 时 测试的计算
  • VS Code - 如何默认打开终端窗格?

    在 Visual Studio Code 中 当我打开应用程序时 每次都必须重新打开集成终端窗口 您是否知道默认情况下在应用程序加载后立即打开 CLI 窗格而无需手动执行的步骤ctrl backtick每次 您可以尝试以下操作 安装扩展 自
  • 如何使用 matplotlib autopct?

    我想创建一个 matplotlib 饼图 其中每个楔形的值都写在楔形顶部 The 文档 http matplotlib sourceforge net api pyplot api html matplotlib pyplot pie建议我
  • 设置 TableView setEditing 时无法选择 UITableViewCell

    我希望能够选择多行 如下所示的默认邮件应用程序 我有一个名为编辑的按钮 可以调用 self myTableView setEditing YES animated YES 编辑按钮成功显示单元格左侧的圆圈 如上所示的邮件应用程序 但是 当我
  • 802.11 FCS (CRC32) [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 下面的代码是否正确计算无线 802
  • 什么是 fn* 以及 Clojure 如何引导?

    The Clojure core 的来源 https github com clojure clojure blob master src clj clojure core clj似乎假设预先存在fn 这是在哪里定义的 引导程序还需要什么
  • Java Jackson:反序列化复杂的多态对象模型:JsonMappingException:意外的标记(START_OBJECT),预期的VALUE_STRING

    我有这棵对象树 A B延伸A C延伸B D 延伸 B E延伸C F 扩展 A 并且有一个对 A 的引用 A 有以下注释 JsonTypeInfo use JsonTypeInfo Id CLASS include JsonTypeInfo
  • smtpclient“发送邮件失败”

    这是我的代码 for int i 0 i lt number i MailAddress to new MailAddress iMail to MailAddress from new MailAddress iMail from iMa
  • 维度缓慢,因为它有默认成员

    我有一个 SSAS 多维数据集 其维度包含大约 500 000 个成员 性能出奇的好 直到我在其中一个属性上有一个默认成员 我们默认为 是 的布尔 是 否 值 此更改使刷新时间从 5 秒缩短到 20 多分钟 默认值是否已知对性能不利 我在谷
  • 如何调用超类方法,就像在派生类中定义的那样?

    我有这些课程 class Control get code return 3 getCodeChain var result this code if super getCodeChain result result concat supe
  • 从Integer中获取intValue,有什么意义吗?

    我正在查看某人不久前写的代码 想知道我是否在这里遗漏了一些东西 Assuming List
  • 使用 IIS 7.5 的特定页面的 HTTPS URL 重写规则

    我正在尝试在 IIS 7 5 中进行 URL 重写 以重定向到 HTTPS 以获得 单页 域的其余部分应保留 HTTP 为此 我正在编辑 Web config 文件 有人可以告诉我我在做什么吗 以下规则错误
  • 如何将嵌套列表切片两次?

    使用嵌套列表 例如 ex list 1 2 3 4 5 6 7 8 9 我需要能够将此列表分割为 1 2 4 5 我一直在尝试 list ex list 2 2 但这不起作用 我显然做了一些非常错误的事情 但一直无法找到解决方案 因为由于某
  • 获取内容可编辑插入符位置

    我找到了大量关于如何进行跨浏览器的良好答案seta 中的插入符位置contentEditable元素 但没有关于如何get插入符号位置放在第一位 我想做的是知道 div 中的插入符号位置keyup 因此 当用户输入文本时 我可以在任何时候知
  • 如何使用 span 来包装命令行参数

    这是即将推出的 C 20 的用途吗 std span正确并且没有开销来包装命令行参数 include
  • Gtk-ERROR **:检测到 GTK+ 2.x 符号

    我正在使用 gcc 编译我的 c 应用程序 并使用以下标志 gcc evis c pkg config cflags libs gtk 2 0 libs clutter gtk 1 0 libs gthread 2 0 Wall o evi
  • 使用到达时间差对信号进行三边测量

    我在寻找或实现寻找信号源的算法时遇到一些麻烦 我的工作目标是找到声音发射器的位置 为了实现这一点 我使用了三个麦克风 我正在使用的技术是多点定位这是基于到达时间差 The 到达时间差使用发现每个麦克风之间互相关接收到的信号 我已经实现了算法
  • Elixir Jason 使用元组对结构进行编码

    我有一个已经有的结构 derive Jason Encoder但该结构中的某些字段是元组 因此无法对结构进行编码 我该如何解决这个问题 UPDATE 我使用了下面提到的方法来实现协议 关于这种方法需要注意的一件重要事情是 它将改变整个项目的
  • “cross-env”不被识别为内部或外部命令,

    伙计们 你们能帮我解决这个问题吗 我在为我的 Laravel Mix 运行 npm run dev 时遇到问题 我点击了下面的链接 但仍然存在错误 我的操作系统有问题吗 我尝试删除节点模块 运行npm install global cros
  • Windows 等效的系统配置目录

    我正在 Ruby 中开发一个 CLI 应用程序 我希望允许通过标准配置文件级联在 Unix 中进行配置 etc appnamerc appnamerc 然而 该应用程序也应该在 Windows 环境中运行 我不确定将像这样的文件放在哪里 e