【问题标题】:.NET Equivalent of the command prompt "where" command.NET 命令提示符“where”命令的等效项
【发布时间】:2011-12-24 18:23:48
【问题描述】:

在 .NET 中,是否存在与 Windows Vista 和 Windows 7 计算机上的“where”命令等效的命令?我需要在安装时解析系统路径中定义的可执行文件的硬路径,而不是每个人都使用默认安装路径安装所有内容。

目前我将“where”命令称为外部进程,但这仅适用于 Vista 和 Windows 7 机器,不适用于开箱即用的 XP。

【问题讨论】:

  • 简短回答:不。您是从Process.Start 之类的名称中调用此其他可执行文件吗?或者你想把文件/东西放在它的文件夹里?
  • 我正在使用 Process.Start() 调用可执行文件。
  • 您可以使用 System.Environment.GetEnvironmentVariable 编写一个函数来获取路径,然后自己在路径中搜索您要查找的可执行文件。
  • @BasedAsFunk:我确信Process.Start 考虑了PATH 环境变量。但是,它确实有一个奇怪的警告,它不喜欢引用的路径。
  • 您正在启动什么流程,需要where

标签: c# .net vb.net


【解决方案1】:

您必须读取环境变量 PATH 并在每个路径中查找应用程序的存在并使用它。这就是 Powershell cmdlet get-command 的工作原理 - http://technet.microsoft.com/en-us/library/dd347726.aspx

注意:如果通过which / where 获取路径的原因是使用路径并调用可执行文件,则无需这样做,因为可执行文件已经在 PATH 中,您需要获取路径,然后明确地使用它。

【讨论】:

  • 嗯,有趣的是:当我使用“where”时,它会找到它,但如果我只使用可执行文件名调用 Process.Start(),它不会找到它。这种行为似乎只出现在 64 位 Vista 和 Windows 7 上,32 位机器一直运行良好。
  • 这个 32 位代码是否误认为它已安装到 `C:\Program Files`?
  • @BasedAsFunk - 我没有观察到这样的事情。在 64 位 Windows 7 上运行良好。
  • @sixlettervariables - 我想这是可能的,但我不确定这样的混淆是如何发生的。此外,卸载并重新安装此特定程序无需更改代码即可解决问题(可能是因为它重新将其 bin 目录添加到 PATH 的前面),如果您的 PATH 变量太长,是否有限制?
【解决方案2】:

您可以使用 System.IO.Directory.EnumerateFiles() 方法来搜索文件 这是一个例子

 System.IO.Directory.EnumerateFiles(Environment.SystemDirectory,"YourFile.exe",SearchOption.AllDirectories)

它返回一个包含路径的字符串数组。

【讨论】:

  • "System.IO.Directory.Exists" 将单个参数作为输入,即目录的路径并返回真/假。你从哪里得到 Exists 方法的这个定义?
猜你喜欢
  • 1970-01-01
  • 2018-01-04
  • 2014-12-26
  • 1970-01-01
  • 2010-11-30
  • 2016-06-21
  • 2017-04-22
相关资源
最近更新 更多