问题标签 [known-folders]

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.

0 投票
0 回答
33 浏览

powershell - 使用 Powershell 更改用户文件夹(Shell 文件夹)的路径

如何使用 Powershell 更改用户文件夹(Shell 文件夹)的路径?必需的:

  1. 获取文件夹的路径 $mydoc = [Environment]::GetFolderPath('MyDocuments') C:\Users\shay\Documents
  2. 将变量 $mydoc - C:\Users\shay\Documents 中的驱动器号更改为 d:\Users\shay\Documents ??
  3. 创建一个文件夹 - d:\Users\shay\Documents ??
  4. 将文件夹 C:\Users\shay\Documents 复制到 d:\Users\shay\Documents ??
  5. 设置 My Documents 系统文件夹的路径 - d:\Users\shay\Documents ?? 我提前感谢您的帮助。
0 投票
1 回答
181 浏览

windows - P/Invoke SHSetKnownFolderPath 失败

我认为这将是一个足够简单的脚本。我在这里看到了这篇关于如何使用 powershell 将文件夹重定向到 OneDrive 的文章:https ://stealthpuppy.com/onedrive-intune-folder-redirection/

我意识到这个脚本对我不起作用,因为它的编写方式需要用户上下文并且不能使用任务计划程序静默运行,所以我开始尝试使用系统上下文“重写”脚本。除了我似乎无法理解的一大块之外,一切似乎都在工作。我认为它是 C#,我只熟悉 powershell。我只关心重定向下载文件夹,所以他就是我所拥有的。

除了我在第 74 行收到一条错误消息外,似乎一切正常:“重定向 {374DE290-123F-4565-9164-39C4925E467B} 时出错。返回码 -2147024894 = 系统找不到指定的文件”

我花了几乎一整天的时间试图解决这个问题,但一无所获。任何帮助,将不胜感激!

0 投票
0 回答
48 浏览

windows - 我可以替换 %USERPROFILE% 并仍然从注册表中获取 KNOWNFOLDERIDs 吗?

我们正在开发一个在 Linux、MacOS 和 Windows 上运行的开源 Python 库,但我们在开发团队中没有太多的 Windows 经验或接触。我们设置和运行测试套件的方式在 Linux 和 Mac 下运行良好,但在 Windows 上不是最佳的。我们的测试在一个临时位置建立了一个新目录,在其中放置了一个.gitconfig带有相关配置的假文件,并让相关HOME环境变量指向这个位置作为主目录,以便在测试期间获取配置。

代码已缩短且无法运行,但希望能说明我们所做工作的要点:

whereget_home_envvars()确保$HOMEenv 变量指向新的临时测试主页。在 Windows 上,从 Python 3.8 开始,os.path不再查询$HOME变量来确定用户的家,而是USERPROFILE[ 1 ][ 2 ],所以我们只是用临时测试家覆盖了这个变量:

但是,我们现在发现这破坏了我们在 Windows 上的测试设置,测试将它们的缓存、cookie 数据库等“流血”到我们执行单元测试的地方,并由此创建了破坏我们测试假设的文件和目录. 我对到底发生了什么了解非常有限,但我目前的假设是:我们的库在开始时使用appdirs[ 3 ] 确定缓存、日志、cookie 等的适当位置,它通过查询“特殊文件夹”来实现CSIDLWindows 拥有的IDs/ s [ 4 ]。此信息在 Windows 注册表中确定,该注册表基于USERPROFILE. 要引用Python 错误跟踪器中对此更改的一个特定回复:

这是不幸的。修改 USERPROFILE 是非常不寻常的。USERPROFILE 是用户的“NTUSER.DAT”注册表配置单元和本地应用程序数据(“AppData\Local”)的位置,包括“UsrClass.dat”(“Software\Classes”注册表配置单元)。它也是用户已知 shell 文件夹和主目录的默认位置。修改 USERPROFILE 应该不会导致任何问题,但我并不完全放心。

在我们的测试套件设置完成后,我们开始运行我们的测试的新进程。新进程只能看到 new USERPROFILE,并appdirs通过normpath_get_win_folder发送它们返回找到的路径,不幸的是,它将现在无法再找到的 CSIDL返回的空字符串解释为相对路径 ( .):

并基于此,我们最终将每个测试的当前工作目录配置为用户数据、用户缓存等的地方。

我的问题是:我该如何解决这个问题?基于我可能不完全的理解,我目前认为最终归结为如何对待或模拟USERPROFILE. 我需要让它指向一个注册表以便派生“特殊文件夹”ID(无论是它appdirs还是更现代的替代品)——但我还需要它指向具有测试特定 Git 配置的假主页。我相信后者需要USERPROFILE在 Python3.8 和更新版本中覆盖。我想知道是否有办法复制或模拟注册表并将其放在新家下?以其他方式设置相关的 CSIDL/KNOWNFOLDERID?硬编码其他临时位置以用作缓存目录等?或者也许有一种更聪明的方法可以在不需要假主页的 Windows 下运行测试套件?

我将非常感谢向更有经验的 Windows 开发人员学习该做什么或不该做什么。提前谢谢了。

[1] https://docs.python.org/3.11/library/os.path.html#os.path.expanduser

[2] https://bugs.python.org/issue36264

[3] https://github.com/ActiveState/appdirs

[4] https://docs.microsoft.com/en-us/windows/win32/shell/csidl

0 投票
1 回答
173 浏览

windows - 为什么没有将用户字体目录添加到 KnownFolder API?

我维护了一个库,该库提供用户可访问的位置,用于跨多个平台检索和存储配置、缓存和其他数据。在 Windows 上,此功能是使用KnownFolder API实现的。

最近我收到一个请求,要求在 Windows上添加对 2018 年添加的非管理员字体目录的支持。

令人惊讶的是,这个目录并没有添加到 KnownFolder API 中——这是故意的还是被忽视了?