我想检查某个程序是否在计算机的启动时运行,我访问了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任务管理器禁用启动程序时,它不会删除它在注册表项中的密钥,但它会更改它的另一个值..但我无法找到这是什么改变了价值。
我希望有人可以提供帮助。
感谢。
答案 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 注册表,规则似乎是: