您的问题询问一件事(程序“正在运行”),而您的代码检查另一件事(您能否成功打开文件以读取它)并且您的错误消息和您的问题文本正在讨论另一件事(是给定的可执行文件“已安装)。
在您了解这些不同问题之间的区别之前,您不可能编写一个程序来执行您想要的(无论实际上是什么)。
打开文件会告诉您给定名称的文件是否存在于给定位置,并且具有允许您访问它的权限。这对于试图防止在您的程序/游戏运行时使用“作弊”实用程序是没有用的。
通过检查 PATH 以查看“cheat.exe”程序是否在其上的任何位置,您可能会获得一些非常有限的成功。然而,那将是相当蹩脚的。重命名程序并将其保存在不在 PATH 上的某个目录中的智能和教育栏非常低。我认为在 MS Windows 上玩游戏的平均 10 岁儿童可能会在大约五分钟或更短的时间内解决这个难题(破解该策略)(“成就解锁!”)。
诸如“魔兽世界”之类的程序具有相当复杂的“守望者”技术,试图阻止程序(例如“滑翔机”或“Shadowbot”)在《魔兽世界》打开时运行。当然,这样的程序可以安装在任何目录中,使用任何名称,并且可以在运行时在进程列表中重命名它们自己。这些“作弊”程序使用的操作系统工具与调试器使用的基本相同(MacOS X 下的 ptrace 接口以及 MS Windows 下的任何模拟接口)。这些允许像 gdb 和 strace 这样的程序“窥视”另一个程序的地址空间并“戳”到其中的值。因此,他们通过查看程序存储有关用户界面的某些模型信息的位置(基本上是目标所在的位置,
可以想象,“管理员”可以尝试扫描进程表以查找某些签名(类似于防病毒软件),甚至可以尝试使用类似的“调试”界面来查找被禁止程序的痕迹。
然而,如果没有硬件支持(比如臭名昭著的 TPM --- 可信平台模块),这最终不是一款你会赢的游戏,目前商品消费市场(通用 PC 和 Mac、例如)。
但是,嘿,玩得开心。