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

问题描述 投票:0回答:2

我想检查某个程序是否在计算机启动时运行,我为此访问了

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# windows registry
2个回答
5
投票

因为在任务管理器上将其设置为禁用不会删除其条目:

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

而是在:

中设置相应的值(从
0200 0000000...
0300 0000 xxxxx....

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run

3
投票

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

    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 00...”-> 已启用
  • 任何其他 -> 禁用
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.