在Windows中,没有本机支持的方法来阻止某些进程访问某些驱动器,这“违背了当前的本质”操作系统如何处理驱动器访问。
访问权限由启动应用程序的登录用户权限确定。因此,如果软件开发人员决定他的软件应该搜索所有可访问的驱动器,并且没有为您提供关闭该驱动器的选项...那么,那是不好的编程,它没有考虑您的特定用例。但是,有一些解决方法。
唯一的“确定”解决方案是2,因为硬件虚拟化层(来自虚拟机)可以阻止任何应用程序尝试完全访问“真实硬件”。尽管我还没有解决方案1无效的情况,但是从理论上讲,我认为可以绕开它。
选项“ 1”-在“低级别”禁用驱动器-不需要其他软件
选项1a
可以通过完全禁用驱动器来禁用较低层的卷,但这将禁用驱动器上的所有卷。手动启动,您可以通过启动diskmgmt.msc
,然后右键单击驱动器并将其标记为“离线”来完成。

如果需要,您也应该能够使用命令行脚本来执行此操作。将采用与选项3a / b类似的方法。您可以例如通过此处所述的cmd 或此处所述的PowerShell 来实现。
选项1b
您可以完全停用驱动器的驱动程序。要手动执行:开始diskmgmt.msc
,然后右键单击,选择“选项”。然后转到“ Driver” -Tab,然后选择“ Deactivate”。该驱动器将“消失”在磁盘管理器中,并且将无法再通过操作系统进行访问。除非软件不执行直接与硬件通信的机器代码命令,否则应用程序将无法访问驱动器。至少就我对操作系统的来龙去脉的了解而言。

如果需要,您也应该能够使用命令行脚本来执行此操作。例如,使用与选项3a / b类似的方法Devcon.exe
。您可以在此处找到详细说明。
选项2-使用虚拟环境(通常与第三方软件一起使用)
如果完全可以在虚拟环境中运行应用程序,那么有很多解决方案:
根据您的Windows版本(需要Win7及更高版本)和许可证(不需要“专业”,而不能使用“家庭”),您可以使用Hyper-V来设置虚拟环境,而无需任何第三方软件。
您可以使用第三方软件来建立虚拟系统,例如VMplayer,Virtual Box等。有许多免费软件和付费软件替代品。通过使用此解决方案,您将需要Windows的第二个许可(或者您不许可它,但随后您会在屏幕的右下角看到一个覆盖,告诉您注册Windows)。这肯定会阻止软件访问驱动器。
您可以使用“沙盒”应用程序。但这将取决于沙盒应用程序提供的虚拟化级别。在某些情况下,它可以解决问题;在其他情况下,事实并非如此。例如,Sandboxie(一个harrymc在他的答案中描述了该问题)无法解决他(原始)答案中所描述的配置harrymc的问题。尽管该软件可能会阻止访问,但驱动器仍将处于启动状态。一种替代方法是使用不同的沙箱应用程序,例如Cameyo等。
顺便说一下,这是一篇有关不同虚拟化软件之间主要区别的好文章,尤其是“整个”虚拟机(例如Virtual Box)或“半虚拟”应用程序(例如Sandboxie)之间的区别。
选项3-仅卸载卷(使驱动器“完好无损”)-不需要其他软件,但是在您的情况下可能无法使用
选项3a
您可以使用以下命令编写批处理文件,而不是通过常规快捷方式启动该应用程序mountvol
:首先卸载未使用的卷,然后启动该应用程序,然后在该应用程序不再访问驱动器后重新安装该卷。此处和此处介绍通过命令行进行的安装/卸载过程。您也可以diskpart
按此处和此处所述使用。
选项3b
或者,您可以只卸载驱动器,然后通过批处理文件将其装入,该批处理文件将装入需要时手动启动的驱动器。使用完后,您可以使用第二个批处理文件手动卸载它。您可以通过监视文件系统访问请求并根据某些规则(例如,某些应用程序无权访问)按要求安装/卸载驱动器来实现自动化。但是我不确定自动化是否值得付出额外的努力。
选项4-限制访问驱动器号(卷)。操作简单,但需要Microsoft提供的两个小工具-但在您的情况下可能不起作用
如果您想在没有第3方软件的情况下执行此操作,但是不介意使用Microsoft的两个小工具(如果您尚未使用的话)。我更喜欢这种解决方案,因为它可以“从根本上”解决问题(用户权限与应用程序权限之间的差异),而且相当简单,不需要“大型”第三方软件。
基本上,您添加了无法访问驱动器的用户,然后以那些受限权限启动了程序(您仍将以普通用户身份登录,而不会使用受限帐户登录)。