gpt4 book ai didi

linux - 使用 Process.start 在 Linux 中的 .Net Core 中获取 "Permission denied"

转载 作者:太空宇宙 更新时间:2023-11-04 11:45:35 24 4
gpt4 key购买 nike

我已经在 Linux 中使用 Proccess.start 从我的 .Net Core 控制台应用程序调用 virsh 好几个月了,但突然出现权限错误:

Permission denied
at Interop.Sys.ForkAndExecProcess(String filename, String[] argv, String[] envp, String cwd, Boolean redirectStdin, Boolean redirectStdout, Boolean redirectStderr, Boolean setUser, UInt32 userId, UInt32 groupId, Int32& lpChildPid, Int32& stdinFd, Int32& stdoutFd, Int32& stderrFd, Boolean shouldThrow)
at System.Diagnostics.Process.StartCore(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at wconfig.Menus.MAIN.Test(Object& Obj)
  • 我以 root 身份运行我的 .Net Core 应用
  • 我可以从 shell 中正常运行 virsh 命令
  • 如果我使用 bash -c MyVirshCmd...
  • ,我可以使用 Process.Start 正常运行 virsh 命令
  • 我可以在我的 .Net Core 应用程序中运行其他命令,我只看到 virsh 的问题

native .net 核心函数 ForkAndExecProcess 和 virsh 中发生了一些奇怪的事情。

.Net 核心代码示例:

Dim PI As New ProcessStartInfo
PI.RedirectStandardOutput = False
PI.FileName = "virsh"
PI.Arguments = "list --all"
Using proc As New Process
proc.StartInfo = PI
proc.Start()
End Using

/etc/libvirt/qemu.conf 配置文件中,它说 The user for QEMU processes run by the system instance.?我试图将文件中的 usergroup 设置为“root”,但没有帮助。

无奈之下我尝试重启服务器,当然没有帮助。
我想不出服务器上发生了什么变化,它昨天突然停止工作了。
使用 Debian 克星 (10)
我迷路了?

最佳答案

是的,我明白了!
通过使用 strace -f -o/tmp/strace.txt MyDotNetApp 我可以看到 dotnet 正在执行 /root/virsh??.
事实证明这个文件出于某种原因存在并且是 0KB!
显然 dotnet 的路径搜索顺序不同于 shell,因此 dotnet 执行了 /root/virsh 而 shell 执行了真正的 virsh in /usr/bin/virsh
天哪……我可能要花很长时间才能找到,好吧,但可能要花一个月的时间(吓人)!

我的系统环境PATH是:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

所以看起来 dotnet 使用它自己的“路径”:-(

关于linux - 使用 Process.start 在 Linux 中的 .Net Core 中获取 "Permission denied",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57864556/

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