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

本文关键字:运行 启动 检查程序 是否 | 更新日期: 2023-09-27 18:13:41

我想检查某个程序是否在计算机启动时运行,我访问了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任务管理器禁用启动程序时,它不会删除它在注册表项中的键,但它会改变它的另一个值,但我无法找出改变的值是什么。

我希望有人能帮忙。

谢谢。

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

因为在taskmgr中禁用它不会删除

中的条目

CurrentUser'SOFTWARE'Microsoft'Windows'CurrentVersion'Run,而不是将CurrentUser'SOFTWARE'Microsoft'Windows'CurrentVersion'Explorer'StartupApproved'Run中的对应值从0200 0000000...设置为0300 0000 xxxxx....

稍微扩展一下Robert所说的,您应该检查以下注册表:

    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

对于RunRun32注册表规则似乎是:

  • "02 000 000 000…"启用——>
  • 任何其他->禁用