从互联网上以及 SuperUser 上的其他问题可以看出(例如阻止程序使用“我的文档”), Windows 用户发现程序自行决定将自己的文件夹添加到用户文档文件夹中,这非常烦人。
用户的文档文件夹,就像她的音乐或图片文件夹一样,是用于存放她的个人文件的,这些文件将以她自己能理解的方式进行管理和组织。许多程序都将文件转储到这里,因此您很快就会找不到自己的实际文件。
如果您搜索互联网和超级用户,您会发现以下不同的建议,但所有这些都不是问题的解决方案:我怎样才能阻止这种情况发生?
- 将你的文档文件夹移到其他地方,然后创建一个系统不知道你实际要用哪个文件夹来存放文档的新文件夹。(不好:我想系统知道我将文档存储在哪里,在其他时候这很有用。
- 把你所有的实际的文档文件夹内的子文件夹中的文档。(不好:为什么我总是必须深入一层才能找到我的文档,并且必须穿过主层的所有垃圾邮件文件夹?)
- 定期手动清理文件夹。(不好:这会破坏很多程序。)
- 防止未经授权创建文件夹的各种方法。(不好:这会破坏很多程序。)
- 在虚拟机中运行程序。(不好:99% 的场景都过度了。)
- 不要使用那些程序。(不好:我需要使用那些程序。)
最后,您可能会想到我目前使用的解决方案,我认为这是众多解决方案中最好的:
- (可选:将有问题的文件夹移到其他位置,然后将该位置硬链接回文档。)
- 隐藏文档中的有问题的文件夹。
咿!
(举一个简单的例子来说明为什么这种解决方案仍然不够完善:人们应该能够直接将备份软件指向用户/文档 - 或者实际上复制整个文件夹 - 并且确切地知道得到了什么。此外,很多人需要保持“显示隐藏文件”处于打开状态。)
我慢慢地想到了一个问题!——这可不只是抱怨!最后要指出的是,这个问题之所以发生,是因为程序员很懒,他们会把文件放在一个他们可以确定用户可写的地方——即使有专用的 AppData 文件夹可用。一旦这种行为被编码,只有开发人员才能改变它——而大多数人不会改变。
所以。我能想到的可能解决方案只有一个,那就是这个。不知何故,确定用户/文档位置的环境变量必须以不同的方式呈现给特定程序。我想问一个问题——
如何实现这一目标?
答案1
不幸的是,没有用于用户文档位置的环境变量。
该路径由名为
调用SHGetKnownFolderPath
返回由其标识的已知文件夹
KNOWNFOLDERID 常量,对于每个用户的 Documents 文件夹来说,它是常量
FOLDERID_Documents
。
因此,要针对特定程序进行更改,需要编写一个程序来创建系统范围的钩子SHGetKnownFolderPath
并返回所需值。我不知道有任何这样的产品。
我认为除了更改相关产品的配置参数以设置默认保存位置之外没有其他解决方案。如果他们没有这样的参数,唯一可能的做法就是向开发人员投诉。
答案2
可能没有一种解决方案可以解决所有程序的问题。对于已安装的软件,正如 harrymc 所说,该程序可能具有可以修改的设置或可以编辑的注册表项。如果您担心在安装过程中创建文件夹,我猜修改注册表值个人的并且(如果存在){f42ee2d3-909f-4907-8871-4c22fc0bf756},指向HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
另一个文件夹,即“C:\Users\\BadApps”会“诱使”安装程序在该位置创建文件夹。安装后,这些值应恢复到其正常路径。如果经常需要,可以编写简单的脚本来“切换”这些值。