一种解决方案是DllImport
libc 并使用该getuid()
功能。如果您以 root 身份运行,则getuid()
返回 0;如果没有,它会返回一些其他的 UID:
using System.Runtime.InteropServices;
public class Program
{
[DllImport ("libc")]
public static extern uint getuid ();
public static void Main()
{
if (getuid() == 0) {
System.Console.WriteLine("I'm running as root!");
} else {
System.Console.WriteLine("Not root...");
}
}
}
这在 Mono 2.6 中运行良好。
getuid()
编辑:通过 Mono.Posix 程序集中的 Mono.Unix.Native.Syscall 包装类访问可能会更好:
using Mono.Unix.Native;
public class Program
{
public static void Main()
{
if (Syscall.getuid() == 0) {
System.Console.WriteLine("I'm running as root!");
} else {
System.Console.WriteLine("Not root...");
}
}
}
抱歉,我不是 Mono 专家。但是,无论您如何理解,进程的 UID 都是您想知道的;如果它等于 0,那么你就是 root,否则你不是 root。