我回答了你的还有其他非常相似的问题 https://stackoverflow.com/questions/52613775/c-sharp-under-linux-workingdirectory-not-working-properly/52880852#52880852,但这是对此问题的具体答案。
忘记WorkingDirectory,它不会指定新进程可执行文件的位置,除非您设置UseShellExecute = true
. 这是文档 https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.processstartinfo.workingdirectory?view=netcore-2.1#System_Diagnostics_ProcessStartInfo_WorkingDirectory.
您必须在 FileName 中使用项目根目录的相对路径。像这样:process.StartInfo.FileName="bin/wrapper.sh";
我不知道如何从 dotnet core 和 C# 中执行文件并在 Linux 上设置该进程的工作目录。
您可以做的是创建一个包装脚本来执行 lib 中的文件。
在我们的项目根目录下有两个文件。确保两者都有chmod +x
.
-
bin/wrapper.sh
- 该文件将执行 lib/a.out
-
lib/a.out
- 你好世界!
bin/wrapper.sh
#!/bin/bash
cd lib
pwd
./a.out
程序.cs
using System;
using System.Diagnostics;
namespace SO_Question_52599105
{
class Program
{
static void Main(string[] args)
{
Process process = new Process();
process.StartInfo.FileName="bin/wrapper.sh";
process.Start();
}
}
}
=== 输出 ===
larntz@dido:/home/larntz/SO_Question_52599105$ ls
bin hello.c lib obj Program.cs SO_Question_52613775.csproj
larntz@dido:/home/larntz/SO_Question_52599105$ ls bin/
Debug wrapper.sh
larntz@dido:/home/larntz/SO_Question_52599105$ ls lib/
a.out
larntz@dido:/home/larntz/SO_Question_52599105$ dotnet run
/home/larntz/SO_Question_52599105/lib
Hello, World!