我使用Proccess.start
从Linux中的.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)
我以根用户身份运行.Net核心应用程序
我可以从shell运行virsh命令
如果使用
Process.Start
我可以在我的.Net核心应用程序中运行其他命令好吧,我只看到过virsh的问题
在本机.net核心函数
bash -c MyVirshCmd...
和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配置文件中显示
ForkAndExecProcess
?我曾试图将文件中的
The user for QEMU processes run by the system instance.
和user
设置为“根”,但没有帮助。在绝望中我试图重启服务器,当然没有帮助。
我想不出服务器上有什么变化,它昨天突然停止工作了。
使用Debian Buster(10)
我迷路了?
最佳答案
是的,我明白了!
通过使用strace -f -o /tmp/strace.txt MyDotNetApp
我可以看到dotnet正在执行/root/virsh
??.
事实证明这个文件是因为某种原因而存在的,而且是0KB!
显然dotnet比shell有另一个路径搜索顺序,因此dotnet执行了/root/virsh
而shell执行了/usr/bin/virsh
中的真正virsh。
天啊…这可能要花我很长时间才能找到,是的,但可能要花上一个月(可怕的)!
我的系统环境路径是:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
因此,似乎dotnet使用了自己的“路径”:-(
关于linux - 使用Process.start在Linux的.Net Core中获取“权限被拒绝”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57864556/