c#检查程序是否在启动时运行

时间:2016-10-18 20:55:06

标签: c# windows registry

我想检查某个程序是否在计算机的启动时运行,我访问了win32 RegistryKey类:

 private void Form1_Load(object sender, EventArgs e)
    {
        bool ok = isOnRegistryStartup("iFilter");
        MessageBox.Show(ok.ToString());
    }
    private bool  isOnRegistryStartup(string key)
    {
       RegistryKey RegistryKey = Registry.CurrentUser.OpenSubKey
                ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
        if (registryKey.GetValue(key)!=null)
        {
            return true;

        }
        return false;

    }

输出确实是True,因为程序实际上是在Windows启动时运行的,但是当我通过Task manager禁用该程序启动时(它的状态变为disabled),下次我运行上面的代码结果仍然是True,尽管该程序不再是启动程序的一部分。

这让我得出一个简单的结论,当Windows任务管理器禁用启动程序时,它不会删除它在注册表项中的密钥,但它会更改它的另一个值..但我无法找到这是什么改变了价值。

我希望有人可以提供帮助。

感谢。

2 个答案:

答案 0 :(得分:1)

因为在taskmgr上禁用它而不会删除其在

中的条目

CurrentUser\SOFTWARE\Microsoft\Windows\CurrentVersion\Run,而是在CurrentUser\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run中设置0200 0000000...0300 0000 xxxxx....的相应值

答案 1 :(得分:1)

稍微扩展罗伯特所说的内容应该检查以下注册表:

    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run
    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run32
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run32

对于运行 Run32 注册表,规则似乎是

  • “02 00 00 00 ......” - >启用
  • 任何其他 - >停用