【问题标题】:Way to stop a program from starting up using c#?使用c#阻止程序启动的方法?
【发布时间】:2008-09-28 18:33:03
【问题描述】:

这是个主意,我想提供服务?这将寻找某个程序启动并禁止它,除非满足某些条件。

假设我有一个游戏想阻止自己在一周内玩。因此,如果我在周五/周六/周日以外的任何一天启动它,它将拦截并取消。这可以用 C# 实现吗?

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

【问题讨论】:

    标签: c# windows service


    【解决方案1】:

    好吧,您可以通过查找您想要的进程名称 (GetProcessesByName()) 并杀死它们来确定哪些程序正在运行。

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

    您可以只列出您不想运行的它们的列表,进行时间检查(或要满足的任何标准),然后遍历列表。我曾经做过一次这样的测试,效果很好。

    【讨论】:

    • 这听起来是个不错的选择;让它每五分钟左右运行一次......足以让你进入它,只是让它突然从你下面消失。烦得要教训一顿。 :)
    • 尤其是当您接近完成关卡或获得高分时。 :) 这绝对是突然的。
    【解决方案2】:

    我在这里并不特别了解 C#,但您可以通过使用注册表中的图像文件执行选项 (http://blogs.msdn.com/junfeng/archive/2004/04/28/121871.aspx) 来完成此操作(我认为这是一种危险的方式)的一个原因。对于您有兴趣拦截的任何可执行文件,您可以为其设置调试器选项,然后创建一个将在调试器上使用的小型应用程序,然后让它基本上过滤这些调用。如果您想让它运行,请启动该过程,否则做任何您喜欢的事情。我从未尝试过,但它似乎可以做你想做的事。

    或者,如果您想对启动的流程做出反应然后将其关闭,您可以使用 ProcessWatcher (http://weblogs.asp.net/whaggard/archive/2006/02/11/438006.aspx) 并订阅流程创建事件,然后在需要时将其关闭。然而,这更像是被动的方法,而不是像第一种方法那样的主动方法。

    【讨论】:

      【解决方案3】:

      我不确定你是否能赶上它的启动,但你可以尝试在窗口列表中查找程序(它是 ENUM_WINDOWS 吗?我不记得了)并在它出现后立即关闭它.

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

      拖出 Petzold 来玩玩 Windows...

      编辑:查看 sysinternals 以获取有关如何列出活动进程的源代码 - 在循环中执行此操作,您可以在程序启动时捕获它。我不认为官方网站仍然有来源,但它一定会在某个地方......

      【讨论】:

        【解决方案4】:

        Hrm,与其拦截它的启动,也许您的服务可能会以某种方式破坏可执行文件(即弄脏权限、重命名 EXE、用责骂您意志薄弱的东西替换 EXE,等等)。

        如果这还不够好,您可以尝试以下方法之一:

        http://www.codeproject.com/KB/system/win32processusingwmi.aspx

        http://msdn.microsoft.com/en-us/magazine/cc188966.aspx

        【讨论】:

          【解决方案5】:

          总是有钩子。尽管 .net 库中不支持它,但您始终可以包装 win32 dll。这是一篇不错的文章:http://msdn.microsoft.com/sv-se/magazine/cc188966(en-us).aspx

          这是低级编程,如果您希望代码可移植,我不会使用钩子。

          【讨论】:

            【解决方案6】:

            这个应用程序可以做到这一点Kill Process from Orange Lamp
            我不是作者。

            【讨论】:

              【解决方案7】:

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

              【讨论】:

                【解决方案8】:

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

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-01-30
                  • 2020-12-13
                  • 1970-01-01
                  • 2019-11-23
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多