【问题标题】:how does "Windows Run" know what to run but cmd.exe does not“Windows Run”如何知道要运行什么但 cmd.exe 不知道
【发布时间】:2017-04-05 09:13:08
【问题描述】:

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

我正在尝试以编程方式获取相同的信息,到目前为止,我可以很好地检查“genericCommand”或“genericCommand.exe”是否存在于 PATH 目录之一中。适用于“记事本”、“mspaint”等。但不适用于“chrome”。

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

为什么?有什么想法吗?

【问题讨论】:

    标签: windows cmd path environment-variables


    【解决方案1】:

    查看注册表项:

    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 和其他文件来覆盖它们。

    【讨论】:

      【解决方案2】:

      非常感谢。 这就是我想出的:

          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马蒂亚斯

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-10
      • 2013-09-13
      • 2016-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      相关资源
      最近更新 更多