我必须测试当无法删除某个控制文件(由我们的应用程序使用;该文件存储在 C:\Program Files (x86)\SomeApplicationSubfolders)时我们的应用程序显示的消息。需要在我们的客户端的某些 PC 上执行测试(这些 PC 似乎装有 Windows 10 pro x64 ver1803,版本 17134.345)。
我试过了:
- 使用权限(右键单击文件>安全>编辑:拒绝用户“所有人”的完全控制;或选择每个用户并勾选拒绝完全控制),但每次应用程序都设法删除该文件,所以我没有收到消息。
- 创建 Windows 10 用户,...但似乎此功能已从我们客户的 Windows 10 映像/iso 中删除。(我不知道 iso 中还缺少什么)
- 用记事本打开文件(并保持打开状态)并在其中写入一些内容,但不保存。这只“起作用”一次,我无法重现它。(我仍然怀疑还有其他原因延迟或阻止了文件删除)
有没有更好的方法来阻止应用程序删除文件?
- 我只需要大约 10 分钟(因此延迟删除也可能有效);
- 如果不需要进行重大的操作系统更改就好了;
答案1
所以我要告诉你的方法是基于更改文件的权限。
所以你所做的就是为每个人添加一个组并删除他们的修改权限。所以它不起作用的原因是因为为其他用户设置了允许他们编辑文件的权限。
怎么做
首先转到文件夹,右键单击并选择属性>安全>高级。
因此,一旦您到达这里,首先按“禁用继承”,然后选择“将继承的权限转换为此对象的明确权限”
然后您将在列表中看到各种组和用户。
因此,您要做的就是选择每个管理员和用户,按编辑并删除完全控制和修改的权限。
然后勾选“用可继承的权限替换所有子对象权限...”并按应用。
一些建议
我建议也删除用户的写权限,因为他们只能删除文件的内容,从本质上来说就是删除文件。
此外,如果您愿意,您也可以从 SYSTEM 用户中删除上述权限。
如果您想让用户更难删除文件,请执行以下操作:在所有者旁边按“更改”按钮,然后在空白框中输入 SYSTEM。然后按“检查名称”并按“确定”。
然后勾选“替换子容器和对象的所有者”并按应用。
完成以下操作后,除非知道如何操作,否则将无法删除文件并撤消更改。
恢复更改
首先,如果您已将所有者更改为 SYSTEM,请将其改回您自己。
然后您只需删除所有权限条目并按启用继承并勾选“替换所有子对象......”并按应用。
一切都会恢复正常。
答案2
鉴于您写道“显示我们的应用程序编写的消息”,我假设您是或家里有人可以开发应用程序。
确保没有人能够真正删除该文件的最简单方法是创建一个带有两个按钮的新简单程序。
按钮一打开该文件进行随机访问,但不会对该文件执行任何其他操作。它只是创建一个文件锁。
第二个按钮将关闭文件。
现在,您打开新程序,按下按钮一,您将无法再使用资源管理器自行删除文件,同样,您的其他程序也将无法执行此操作。
答案3
基于“记事本”方法,可以使用 VBA 在 Excel 中轻松实现此目的:
在“此工作簿”区域放置一个宏“Private Sub Workbook_Open()”,并插入以下代码:
Private Sub Workbook_Open()
Open "path to your file" For Input As #1
MsgBox ("Press OK to release file")
Close #1
End Sub
打开 .xlsm 文件时,您的文件将作为 VBA 宏的输入打开。它不能(据我测试,很容易)被删除。要释放文件,请关闭 Excel 或在消息框上按“确定”。
当然这个宏也可以放在普通模块中,并使用按钮运行。
答案4
这种方法对我有用,尽管你似乎暗示它对你不起作用:
- 右键单击该文件并选择特性
- 在“安全”选项卡中,单击编辑
- 点击添加,输入
Everyone
并按好的 - 选择
Everyone
并更改完全控制拒绝权限 - 点击是的确认
- 点击好的
撤销:
- 在“安全”选项卡中单击编辑
- 选择
Everyone
- 点击消除。