我想检查某个程序是否在计算机启动时运行,我为此访问了
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任务管理器禁用启动程序时,它不会删除它在注册表项中的键,而是更改了它的另一个值..但我无法找出是什么这改变了价值。
希望有人能帮忙。
谢谢。
因为在任务管理器上将其设置为禁用不会删除其条目:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
而是在:
中设置相应的值(从
0200 0000000...
到
0300 0000 xxxxx....
)
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run
只是稍微扩展一下罗伯特所说的内容,您应该检查以下注册表:
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
对于 Run 和 Run32 注册表,规则 似乎是 :