如何停止使用C#启动程序?
这是个主意,我想提供服务吗?除非满足某些条件,否则它将寻找某个程序启动并禁止该程序。
假设我有一场比赛想阻止自己在一周内玩。因此,如果我在周五/周六/周日以外的任何一天启动它,它将被拦截并取消。使用C#可以吗?
我正在寻找的主要内容是如何捕获程序启动,休息应该很容易。
解决方案
我不确定是否可以启动它,但是我们可以尝试在Windows列表中查找该程序(它是ENUM_WINDOWS吗?我不记得了),并在显示后立即将其关闭。
我们甚至可以在AutoIt中执行此操作!
拖出Petzold并在Windows上玩一些...
编辑:查看sysinternals的源,以获取有关如何列出活动进程的信息,并在循环中执行此操作,并且可以在程序启动时捕获程序。我认为官方网站仍然没有来源,但是它一定会存在于某处...
Hrm,而不是拦截启动,服务可能会以某种方式破坏可执行文件(即用许可权破坏,重命名EXE,将EXE替换为我们虚弱的行为等)。
如果这还不够好,我们可以尝试以下方法之一:
http://www.codeproject.com/KB/system/win32processusingwmi.aspx
http://msdn.microsoft.com/zh-CN/magazine/cc188966.aspx
我在这里不特别了解Cin,但是为什么可以做到这一点(我会认为这是一种危险的方式)是使用"图像文件执行选项"(http://blogs.msdn.com/junfeng/archive/ 2004/04/28 / 121871.aspx)。对于我们想拦截的任何可执行文件,我们都可以为其设置Debugger选项,然后创建一个将在调试器中使用的小型应用程序,然后使其实质上过滤这些调用。如果要允许它运行,请启动该过程,否则请执行任何操作。香港专业教育学院从未尝试过此操作,但似乎它可以做我们想要的。
或者,如果我们想对启动过程进行反应然后将其关闭,则可以使用ProcessWatcher(http://weblogs.asp.net/whaggard/archive/2006/02/11/438006.aspx)并订阅处理已创建的事件,然后根据需要将其关闭。但是,这更多是一种被动方法,而不是像第一种方法那样的主动方法。
好了,我们可以通过查找所需的进程名称(GetProcessesByName())并杀死它们来确定运行的程序。
Process[] processes = Process.GetProcessesByName(processName); foreach(Process process in processes) { process.Kill(); }
我们可以只列出不想运行的列表,进行时间检查(或者要满足的任何条件),然后遍历列表。我曾经做过类似的事情来进行测试,并且效果很好。
总是有钩子。尽管.net库中不支持它,但我们始终可以包装win32 dll。这是一篇不错的文章:http://msdn.microsoft.com/sv-se/magazine/cc188966(zh-cn).aspx
这是低级编程,如果我们希望代码可移植,那么我将不使用钩子。
这个应用程式会执行橘色灯的杀死程序
我不是作者。
我们不一定需要拦截启动程序。我们可以编写一个"程序启动管理器"应用程序,为我们启动程序(如果它们已列入白名单)。编写应用程序后,我们所需要做的就是修改应用程序快捷方式,以使用适当的参数指向启动管理器。
如果只需要禁用该应用程序,则可以编辑注册表以尝试自动将调试器添加到该应用程序,如果该调试器不存在,则Windows会抱怨并纾困。
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Image File Execution Options]是关键,请查阅MS文章http://support.microsoft.com/default.aspx?kbid=238788,以获取更多信息。