1

我想以编程方式获取在 Windows 启动时运行的应用程序列表。

我在 msconfig->startup 中看到了这些应用程序。

但是当我在 C:\User\Appdata\Microsoft\windows\start menu\programs\startup 中看到它时

它显示文件夹是空的。

如何以编程方式获取这些启动应用程序列表 C#。

4

2 回答 2

5

您在 msconfig 中看到的那些都在注册表中,尽管它们并不是全部。您可以尝试阅读

/Software/Microsoft/Windows/CurrentVersion/Run

/Software/Microsoft/Windows/CurrentVersion/RunOnce

在两者HKEY_LOCAL_MACHINEHKEY_CURRENT_USER

您可以在MSDNsupport.microsoft上找到有关这些的信息。

尝试CodeProject 中使用 C# 从注册表读取、写入和删除一文,让您开始使用注册表。

现在,正如我上面所说,它们并不是全部。列出这些仍然会错过服务和驱动程序,以及其他一些将启动异步的代码,例如资源管理器扩展、控制面板扩展、音频和视频编解码器等。所有这些都没有考虑到客户端机器可能不会使用资源管理器作为外壳。

我建议您在 sysinternals 上查看autoruns。您还可以使用它的命令行工具来获取您想要的信息。

于 2012-11-01T16:18:22.353 回答
4

有一篇很好的文章:使用系统配置实用程序了解和控制启动应用程序

还有一个很棒的工具可以查看所有启动程序的列表:Autoruns

例如,您可以枚举HKLM\Software\Microsoft\Windows\CurrentVersion\Run键的字符串值:

const string runKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
using (RegistryKey startupKey = Registry.LocalMachine.OpenSubKey(runKey))
{
    var valueNames = startupKey.GetValueNames();

    // Name => File path
    Dictionary<string, string> appInfos = valueNames
        .Where(valueName => startupKey.GetValueKind(valueName) == RegistryValueKind.String)
        .ToDictionary(valueName => valueName, valueName => startupKey.GetValue(valueName).ToString());
}
于 2012-11-01T16:20:17.390 回答