“Windows运行”如何知道要运行什么,但cmd.exe不知道

时间:2016-11-21 20:58:11

标签: windows cmd path environment-variables

Windows + R或“start”命令功能非常强大。 我可以使用Windows + R“chrome”启动Google Chrome。但是,当我在运行的cmd.exe中键入“chrome”时,chrome不会启动 - 因为它未在PATH中列出。所以我想知道“Run”在哪里查找起点?

我正在尝试以编程方式获取相同的信息,直到现在我很好地检查其中一个PATH目录中是否存在“genericCommand”或“genericCommand。exe”。适用于“记事本”,“mspaint”等。但不适用于“铬”。

我想以编程方式将给定命令映射到使用Windows run或“start”命令启动时执行的程序。

为什么呢?有什么想法吗?

2 个答案:

答案 0 :(得分:2)

查看注册表项:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

这是另一个命令列表(除%PATH%目录中的应用程序外)

您可以在此处覆盖某些默认值 - 例如,您要将cmd.exe替换为cmdr.exe。

我使用它的另一个例子是为notepad ++。exe添加“np”别名。创建一个名为“np.exe”的子键,其默认值为“C:\ Program Files(x86)\ Notepad ++ \ notepad ++。exe”。所以从运行对话框中我可以输入“np c:\ temp \ something.txt”并在np ++中打开它。

此注册表项中的任何内容都将被视为优先于%PATH%中的任何内容。这就是为什么你可以通过在这里添加它们来覆盖cmd.exe和其他人。

答案 1 :(得分:1)

很多。 这就是我想出来的:

    private static string GetCommandPathFromRegistry(string commandNameWithExeEnding)
    {
        var localMachineRegistryKey = Registry.LocalMachine;
        localMachineRegistryKey = localMachineRegistryKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths");
        var commandSubKey = localMachineRegistryKey.OpenSubKey(commandNameWithExeEnding);
        return commandSubKey?.GetValue("")?.ToString();
    }

BR Matthias