强制覆盖或删除正在使用的文件(当前运行的可执行文件)

时间:2017-03-14 21:50:13

标签: powershell cmd

我正在寻找删除或(最好直接)覆盖exe文件源的解决方案。

在你弄错之前要进一步解释,我举一个例子:

我在驱动器D:\上有一个exe文件(我之前发布了问题的答案,给{""开始'" C:\Program Files\MyProgram\"上的文件夹,因此它找到了它dll文件。 现在文件运行后,我想重写文件的字节流(就像在十六进制编辑器中打开它...),或者至少删除它,这样我就可以直接复制新的exe文件使用相同的名称。

到目前为止,我使用的解决方案是我为整个驱动器D:\触发format D:命令(在我的例子中是ramdisk和thumb-drive,因为我只有这个exe它,我在必要时将其复制到那里),因为这会删除文件并让我在那里复制新文件。

尝试使用del myProgram.exe即使-force标志也会触发错误,拒绝访问该文件。如果我尝试覆盖文件的内容,也一样。

如果没有使用format命令,有没有其他办法可以做到这一点,因为这需要仅为此目的使用分区驱动器?

更新:注意:MoveFileEx和需要终止进程或系统重启/重启的类似技术不能作为解决方案。这应该在流程运行时完成,而不会采取可能影响流程运行状态的进一步操作。

另外,在使用Powershell的format命令格式化驱动器时,文件已经消失,但如果使用Hex查看器工具查看分区,则存在完整的二进制(十六进制)内容在那里可见的exe和使用复制粘贴技术一样简单的恢复。这是重写文件内容比直接删除文件更合适的一点。

请注意:这是一个以知识和技能为基础的问题,因此我希望不要放弃有关此类行为和行为的道德和安全评论。

2 个答案:

答案 0 :(得分:0)

要删除/替换/覆盖文件,必须至少满足两个条件:

  • 执行操作的用户必须具有所需的权限才能执行此操作。例如,可以通过Get-Aclicacls验证这一点。
  • Windows不得具有该文件的打开句柄。例如,可以使用Process Explorerhandle等工具检查此项。这些工具也可用于强行关闭打开的手柄,但不建议这样做,因为它可能会导致数据丢失和/或损坏相关文件。但是,我不确定它是否真的可以在不终止进程的情况下关闭可执行文件的句柄。

请注意,防病毒软件可能会干扰此类操作。

答案 1 :(得分:0)

这里的基本问题是Windows根据需要从.EXE加载,而不是一次性读入。

如果您销毁原始文件,当它尝试加载不再存在的页面时会发生什么?

如果我必须写这种东西,我会将.exe复制到一个临时位置(请注意,可能会禁止从temp目录运行代码),运行新的.exe,终止旧的.exe然后做什么我想要它。