【发布时间】:2023-04-01 09:45:01
【问题描述】:
我创建了一个带有 ASP.net 核心服务的 docker 容器。但是,该服务应该在 docker 容器内启动另一个服务。我现在面临的问题是 Process.Start() 在这个 Linux 容器中似乎不起作用。
这是我迄今为止尝试过的:
Process process;
ProcessStartInfo processInfo;
string fileName = "bin/bash dotnet run /root/SubService/SubService.API.dll";
string arguments = $"Company --urls http://localhost:5000/SolutionName";
string escapedArguments = $"-c /{arguments}/";
processInfo = new ProcessStartInfo(escapedFilename, escapedArguments)
{
CreateNoWindow = true,
UseShellExecute = false,
WindowStyle = ProcessWindowStyle.Hidden,
RedirectStandardError = false,
RedirectStandardOutput = false
};
try
{
process = Process.Start(processInfo);
process.WaitForExit();
process.Close();
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
当 Process.Start(processInfo) 被调用时,我得到异常“没有这样的文件或目录”。但是,路径是正确的。 可能是什么问题呢?或者是否有另一种方法可以从 asp.net 核心服务启动进程。
谢谢。
【问题讨论】:
-
该文件名参数肯定有问题。尝试运行其他命令提示符或记事本,看看它是否与文件名参数有关或与 c# 程序的其余部分有关。那么如果是关于文件名,我们可以弄清楚。
-
我也尝试过 UseShellExecute,但不幸的是,这并没有帮助。我很确定文件名参数是正确的。你怎么不这么认为@ÖzgürGüzeldereli?
-
好吧,可能没有错,抱歉。我想到了别的东西。您可以尝试使用 Process.start 运行 bash 以外的其他东西吗?除了你想要的命令之外的任何东西。例如一个文本编辑器,但具有相同的 startInfo。如果您可以使用 process.start 打开其他内容,那么问题出在文件名/路径/参数
-
会尝试,但可能需要一些时间。谢谢!
-
好的没问题慢慢来。完成后,将此处的输出或结果写给我,我会看看接下来我们能做什么。顺便说一句,您的代码不包括正在定义的转义文件名。
标签: docker asp.net-core