【问题标题】:Launching external programs in C# without knowing the exact path在不知道确切路径的情况下在 C# 中启动外部程序
【发布时间】:2012-04-17 21:19:49
【问题描述】:

我正在尝试创建一个 C# 程序来启动其他外部应用程序。我搜索了一下,发现了这个:http://www.dotnetperls.com/process-start,我认为这是一个非常好的教程。我唯一的问题是我并不总是知道程序的路径。

例如,如果我这样做:

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "firefox.exe";
Process.Start(startInfo);

它成功启动了Firefox。但是,如果我这样做:

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "chrome.exe";
Process.Start(startInfo);

它失败了,因为它找不到 chrome,而且看起来我需要从它的确切路径启动它。所以我的问题是有没有办法访问所有已安装应用程序的通用注册表并从那里启动?谢谢。

【问题讨论】:

  • 没有。并非所有程序都“安装”传统意义上的。我建议您调查您计划启动的程序以找到它们的常用安装位置。
  • 您可以随时在文件系统中搜索“chrome.exe”,找到后保存路径以备后用。
  • @Magnus:如果有多个“chrome.exe”?

标签: c# .net launch process.start


【解决方案1】:

应用程序的文件夹路径在“PATH”环境变量中时可以直接启动。

这个变量可以在以下位置查看和编辑:

  1. 右键单击“计算机”
  2. 属性。
  3. 高级设置如果您使用的是“Windows7”或“Vista”
  4. 高级标签
  5. 环境变量

条目以;分隔。

我认为您可以启动 Firefox,因为 Firefox 已经将其文件夹放入 PATH。

【讨论】:

  • 如果他知道路径(添加环境变量),他可能宁愿将其添加到他的程序中。
  • 但问题是某些程序或某些安装没有注册 PATH。所以他需要知道在硬盘上很难找到一个假设的程序。
  • 我认为 Venatu 和 Magnus 是对的。没有可以启动的通用注册表,所以我应该只搜索 exe 文件。一旦我找到它,我会提示用户验证这确实是正确的路径
  • 如果您不介意使用哪种浏览器,您可以使用网页的 url 像 'localhost:8888/bla.htm' 作为 startInfoFilename b>
  • 我认为一定有办法实现这一点。内置的命令行程序“开始”如何知道去哪里看?如果您打开命令行并编写 start chromestart firefox chrome 或 firefox 将启动而无需我指定路径或将其添加到任何环境变量...(至少在我的计算机上)
【解决方案2】:

我知道这是一个老问题,但我想我已经找到了解决方案。

看看下面的注册表项:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App 路径\

每个已安装的程序都有一个密钥。例如 Chrome.exe。

参考: http://msdn.microsoft.com/en-us/library/windows/desktop/ee872121(v=vs.85).aspx

【讨论】:

    【解决方案3】:

    我认为您正在搜索Environment.GetEnvironmentVariable 方法。 可以这样使用:

    Environment.GetEnvironmentVariable("PATH")

    它将返回分配给该变量的字符串。

    程序通常在该字符串中签名,以便能够被 Windows 操作系统启动机制自动定位。

    这意味着在这种情况下,您可能不知道可执行文件的路径,但必须知道要启动的程序的名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      • 2020-12-18
      • 2015-07-08
      • 2018-02-06
      • 2017-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多