2008-09-28 15 views
4

这是想法,我想提供服务?除非满足某些条件,否则它会查找某个程序启动并禁止它。如何停止使用c#启动程序?

比方说,我有一款游戏,我想在一周内停止自己玩。所以如果我在星期五/星期六/星期日以外的任何一天启动它,它会拦截并取消。这可能与C#?

我正在寻找的主要事情是如何捕捉程序启动,休息应该很容易。

回答

6

那么,你可以通过查找你想要的进程名(GetProcessesByName())并杀死它们来明确地确定哪些程序正在运行。

Process[] processes = Process.GetProcessesByName(processName); 
foreach(Process process in processes) 
{ 
    process.Kill(); 
} 

你可能只是有一个他们不想运行的列表,做时间检查(或者是否满足任何标准),然后走到列表中。我曾经做过一次这样的测试,效果不错。

+0

这听起来很不错,它每5分钟运行一次......足以让你进入它,只是让它突然死在你的下面。恼人的教训。 :) – 2008-09-28 19:11:33

0

我不确定你是否可以启动它,但是你可以尝试在窗口列表中查找程序(ENUM_WINDOWS?我永远不会记得),并且一旦它显示就关闭它向上。

你甚至可以在AutoIt中做到这一点!

拖出彼佐尔德,并有一些乐趣的窗口...

编辑:退房有关如何列出活动进程源的Sysinternals - 在一个循环做到这一点,您可以看看你的程序时开始。我不认为官方网站仍然有源,但它肯定会在那里...

3

我不知道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)并订阅进程创建的事件,然后在需要时关闭它。然而,这更多的是被动的方法,而不是像第一种方法那样的主动方法。

0

您不一定需要拦截启动程序。您可以编写一个“程序启动管理器”应用程序,为您启动程序(如果它们是白名单的话)。编写应用程序后,您需要做的就是修改应用程序快捷方式,使其指向适合参数的启动管理器。

0

如果您只是需要禁用应用程序,您可以编辑注册表来尝试自动将调试器附加到该应用程序,如果调试器不存在,Windows将会发出抱怨并释放出来。

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Image File Execution Options]是关键,请参阅MS文章http://support.microsoft.com/default.aspx?kbid=238788了解更多信息。