这是想法,我想提供服务?除非满足某些条件,否则它会查找某个程序启动并禁止它。如何停止使用c#启动程序?
比方说,我有一款游戏,我想在一周内停止自己玩。所以如果我在星期五/星期六/星期日以外的任何一天启动它,它会拦截并取消。这可能与C#?
我正在寻找的主要事情是如何捕捉程序启动,休息应该很容易。
这是想法,我想提供服务?除非满足某些条件,否则它会查找某个程序启动并禁止它。如何停止使用c#启动程序?
比方说,我有一款游戏,我想在一周内停止自己玩。所以如果我在星期五/星期六/星期日以外的任何一天启动它,它会拦截并取消。这可能与C#?
我正在寻找的主要事情是如何捕捉程序启动,休息应该很容易。
那么,你可以通过查找你想要的进程名(GetProcessesByName())并杀死它们来明确地确定哪些程序正在运行。
Process[] processes = Process.GetProcessesByName(processName);
foreach(Process process in processes)
{
process.Kill();
}
你可能只是有一个他们不想运行的列表,做时间检查(或者是否满足任何标准),然后走到列表中。我曾经做过一次这样的测试,效果不错。
我不确定你是否可以启动它,但是你可以尝试在窗口列表中查找程序(ENUM_WINDOWS?我永远不会记得),并且一旦它显示就关闭它向上。
你甚至可以在AutoIt中做到这一点!
拖出彼佐尔德,并有一些乐趣的窗口...
编辑:退房有关如何列出活动进程源的Sysinternals - 在一个循环做到这一点,您可以看看你的程序时开始。我不认为官方网站仍然有源,但它肯定会在那里...
Hrm,而不是拦截它的启动,也许你的服务可能以某种方式破坏可执行文件(即与权限,重命名EXE,将EXE替换为支持你弱点的东西,等等)。
如果这还不够好,你可以尝试以下方法之一:
http://www.codeproject.com/KB/system/win32processusingwmi.aspx
我不知道C#特别是在这里,但一个为什么你能做到这一点(我将是一个危险的方式)是通过使用注册表中的图像文件执行选项(http://blogs.msdn.com/junfeng/archive/2004/04/28/121871.aspx)。对于你想拦截的任何可执行文件,你可以为它设置Debugger选项,然后创建一个在调试器中使用的小应用程序,然后让它实质性地过滤这些调用。如果你想让它运行,然后启动过程,否则做任何你喜欢的事情。我从来没有尝试过,但它似乎可以做你想做的事情。
或者如果您想对启动过程做出反应,然后关闭它,则可以使用ProcessWatcher(http://weblogs.asp.net/whaggard/archive/2006/02/11/438006.aspx)并订阅进程创建的事件,然后在需要时关闭它。然而,这更多的是被动的方法,而不是像第一种方法那样的主动方法。
总是有钩子。尽管在.net库中不支持它,但您始终可以包装win32 dll。这里有一篇很好的文章:http://msdn.microsoft.com/sv-se/magazine/cc188966(en-us).aspx
这是低级编程,如果你希望你的代码是可移植的,我不会使用钩子。
这个程序就是这么做的Kill Process from Orange Lamp
我不是作者。
您不一定需要拦截启动程序。您可以编写一个“程序启动管理器”应用程序,为您启动程序(如果它们是白名单的话)。编写应用程序后,您需要做的就是修改应用程序快捷方式,使其指向适合参数的启动管理器。
如果您只是需要禁用应用程序,您可以编辑注册表来尝试自动将调试器附加到该应用程序,如果调试器不存在,Windows将会发出抱怨并释放出来。
[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Image File Execution Options]是关键,请参阅MS文章http://support.microsoft.com/default.aspx?kbid=238788了解更多信息。
这听起来很不错,它每5分钟运行一次......足以让你进入它,只是让它突然死在你的下面。恼人的教训。 :) – 2008-09-28 19:11:33