如何从打开中停止应用程序

Spi*_*dey 8 .net c# c++ winapi

我想写一个小应用程序,它位于我的托盘中,允许我选择一个可执行文件并阻止它打开.

使用WinForms可以轻松完成应用程序的UI.

我想知道的是如何检测是否已经推出某个exe,然后如何阻止它运行.我很确定我将不得不深入研究一些Win32的东西,但我没有这方面的经验,因此这篇文章.

有一个类似的现有应用程序,但我不能为我的生活记住它的名字.它是用VB6编写的,它也是开源的.

任何帮助深表感谢.

谢谢.

Ste*_*utt 12

而不是试图在它运行时杀死进程,如何阻止它在第一时间运行?

更改shell尝试启动应用程序时发生的情况很简单 - 将新注册表项添加到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options

为了测试这个,我添加了一个名为notepad.exe的注册表项,其中包含值为calc.exe的字符串值Debugger.现在每当我尝试运行记事本时,calc就会打开.以下是导出的注册表项.

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe]
"Debugger"="calc.exe"
Run Code Online (Sandbox Code Playgroud)

做了这个改变之后我还没有设法打开记事本,对于无代码解决方案来说也不错.如果您需要100%确定应用程序永远不会运行,您可以随时添加"kill"解决方案,其他人详细说明.


Las*_*loG 5

斯蒂芬纳特的另一个很好的答案只是一小部分:

如果你想让程序永远消失,不要只是替换其他东西(Stephen的例子中的calc.exe).指定密钥:"Debugger"="ntsd -c q"

这将使用命令行参数-c调用"执行下一个指定的调试器命令" 来调用NT 用于程序的NT命令行调试器ntsd ; 调试器命令是q(意味着退出).这将停止调试器,作为副作用将杀死调试对象 - 您想要阻止运行的程序 - 也是如此.

干净,漂亮,容易.我观察到的唯一副作用是,有时一个瞬态命令窗口会弹出一个调试器提示只是暂时消失.