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

C# 检查程序是否在启动时运行,c#,windows,registry,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)

我想检查某个程序是否在计算机启动时运行,为此我访问了
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启动时运行的,但是当我通过
任务管理器禁用该程序启动时(它的状态变为
disabled
),下一次运行上面的代码时,结果仍然是
True
,即使该程序不再是启动程序的一部分

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

我希望有人能帮忙


谢谢。

因为在taskmgr上将其设置为禁用不会在中删除其条目


CurrentUser\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
,而是在
CurrentUser\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run
中设置相应的值,从
0200000000…
03000000xxxxx…
只是稍微扩展了一下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 00 00…”->已启用
  • 任何其他->禁用

您是在查看
HKEY\U当前用户
还是
HKEY\U本地机器
?当我设置一个新键时,它也是通过编程方式完成的,使用
SetValue()
方法,我在
HKEY\u CURRENT\u USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
注册表中执行此操作…因此,我要在那里检查值检索@为什么我需要检查其他注册表路径?您没有提到这一点,因此我不知道您是否也负责将程序设置为启动。不过,为了安全,我还是会这么做。如果您可以控制安装和卸载,那么只需从添加的位置删除密钥即可。这个机制没有文档记录,可能无法在旧版或未来版本的Windows上运行,所以如果是我,我会将其作为服务安装。太棒了!您刚刚错过了一件事,这是explorer/StartUpApproved.:)