Ant*_*rns 4 ruby windows configuration command-line configuration-files
我正在 Ruby 中开发一个 CLI 应用程序,我希望允许通过 、 的标准配置文件级联在 Unix 中进行配置/etc/appnamerc。~/.appnamerc然而,该应用程序也应该在 Windows 环境中运行,并且我不确定将这样的文件放在哪里/etc/appnamerc(C:\windows\system32\etc\drivers看起来不是正确的位置)。此外,无论我决定采用哪种方案来查找系统配置文件,也需要考虑不同版本的 Windows,C:\Users即C:\Documents and Settings. 就特定于用户的配置而言,我也不确定让我的应用程序在哪里查找特定于用户的配置文件,以及类似内容的标准命名约定是什么。
您正在寻找的是SHGetKnownFolderPath 函数(或旧版本 Windows 上的 \xe2\x80\x94\xe2\x80\x94 的SHGetFolderPath 函数)。
\n\n虽然 Windows 对这些路径是什么以及它们驻留的位置有约定,但这完全取决于版本、配置和其他因素,因此硬编码文件夹名称不是一个好主意。不过,从一开始,上面的函数就是获取这些 \xe2\x80\x9cspecial\xe2\x80\x9d 文件夹位置的方法。
\n\n这些函数的主要参数是 KNOWNFOLDERID或CSIDL ,它们指定您想要获取哪个文件夹。
\n\n实际上,您有两个不同的 \xe2\x80\x9cflags\xe2\x80\x9d:Windows 上的用户特定和计算机特定。位置可以特定于单个用户或可供所有用户使用,也可以特定于单个计算机或可用于用户有权访问的所有计算机。下面将对其进行区分。
\n\n您想要的内容如下:
\n\nFOLDERID_ProgramData/ CSIDL_COMMON_APPDATA:这是所有用户的程序设置,因此大约相当于/etc/foorc. 您应该在那里为您的程序创建一个目录并在那里存储您的所有用户配置。请注意,该目录对于普通用户来说是不可/etc写的(我认为也是如此)。不过,该目录是特定于机器的。FOLDERID_RoamingAppData/ CSIDL_APPDATA:用于用户特定的设置或应用程序数据。对于大多数用例,这应该是放置它的主要位置,因为它将保存在漫游配置文件\xe2\x80\x94中,因此用户登录的每台计算机都可以访问它。所以这相当于你的~/.foorc. 适用与所有用户变体相同的规则。FOLDERID_LocalAppData/ CSIDL_LOCAL_APPDATA:这是用户特定数据的机器特定位置。通常这应该用于诸如缓存之类的东西,这些东西很好用,但不需要每次用户登录时都通过网络进行复制。请注意,Thunderbird 在将 IMAP 邮件的本地副本存储在漫游配置文件\xe2\x80\x94 中时遇到了很大的错误,当其中有几 GiB 的数据时,这有点有趣。一般来说,请避免将您的文件粘贴.foorc到用户的个人资料文件夹中。Windows 不是 UNIX,前面带有点的文件不会自动隐藏(有一个文件系统标志)。对我来说,如果应用程序这样做只是一种烦恼,因为用户的配置文件目录不是 Windows 上进行此类操作的地方。同样,在未经用户同意或明确操作的情况下,“文档”文件夹也不是应用程序创建内容的好地方。
在 Ruby 中,您应该能够使用 Win32API 库调用这些函数。这看起来似乎很有希望(虽然丑陋);但是,我还不够了解,无法实际向您展示一个可行的示例。
\n\n最后的选择是使用环境变量。环境变量ALLUSERSPROFILE、APPDATA和LOCALAPPDATA分别与上述文件夹ID 等效。