gpt4 book ai didi

c# - Process.Start() 和 PATH 环境变量

转载 作者:可可西里 更新时间:2023-11-01 08:39:45 34 4
gpt4 key购买 nike

我有以下简单的 C# 应用程序,它只是尝试启动“jconsole.exe”,它在我的机器上位于 C:\Programs\jdk16\bin 中。

using System;
using System.Diagnostics;

namespace dnet {
public class dnet {
static void Main( string[] args ) {
try {
Process.Start("jconsole.exe");
Console.WriteLine("Success!");
} catch (Exception e) {
Console.WriteLine("{0} Exception caught.", e);
}
}
}
}

如果我的 PATH 环境变量设置为

c:\windows;c:\windows\sytem32;c:\programs\jdk16\bin

它完美地工作。但是,如果 PATH 环境变量设置为

c:\windows;c:\windows\sytem32;c:\\programs\jdk16\bin

(注意“c:”和“程序”之间的两个反斜杠),它因 win32 异常而失败。

System.ComponentModel.Win32Exception (0x80004005): The system cannot find the file specified
at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
at dnet.dnet.Main(String[] args)

有趣的是,在运行 .NET 程序并出现异常的同一命令提示符下,我只需键入“jconsole.exe”,程序就会启动。 Windows 似乎可以轻松找到 PATH 中带有双反斜杠的可执行文件,但 Process.Start() 确实如此。

为什么 PATH 中的额外反斜杠会导致问题,我该如何解决这个问题?我不知道我要调用的可执行文件在运行时位于何处,因此我宁愿依赖 PATH 变量。

最佳答案

不太清楚为什么会出现问题。不过,我可以想到一种适用于我的机器的解决方案:

var enviromentPath = System.Environment.GetEnvironmentVariable("PATH");

Console.WriteLine(enviromentPath);
var paths = enviromentPath.Split(';');
var exePath = paths.Select(x => Path.Combine(x, "mongo.exe"))
.Where(x => File.Exists(x))
.FirstOrDefault();

Console.WriteLine(exePath);

if (string.IsNullOrWhiteSpace(exePath) == false)
{
Process.Start(exePath);
}

我确实找到了一个段落,它给了我这个解决方案的想法。来自documentation for Process.Start

If you have a path variable declared in your system using quotes, you must fully qualify that path when starting any process found in that location. Otherwise, the system will not find the path. For example, if c:\mypath is not in your path, and you add it using quotation marks: path = %path%;"c:\mypath", you must fully qualify any process in c:\mypath when starting it.

我读它的方式,即使 PATH 变量包含 Windows 能够使用的有效路径,Process.Start 也无法使用它并且需要完全限定路径 .

关于c# - Process.Start() 和 PATH 环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12392913/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com