C# 如何检查可执行文件是作为服务启动还是从系统帐户启动?

C# 如何检查可执行文件是作为服务启动还是从系统帐户启动?,c#,windows,C#,Windows,我有一个程序,可以作为服务安装和启动,也可以使用“at”命令从系统帐户启动。我需要找到一种方法来知道可执行文件是作为服务启动的还是从系统帐户启动的,这样我就可以知道我是否需要调用ServiceBase。在可执行文件入口点(主函数)运行或执行其他工作 Environment.UserInteractive在这两种情况下均为false WindowsIdentity.GetCurrent().IsSystem在这两种情况下都为真 我不想传递任何命令行参数来解决这个问题 入口点的ReflectedTy

我有一个程序,可以作为服务安装和启动,也可以使用“at”命令从系统帐户启动。我需要找到一种方法来知道可执行文件是作为服务启动的还是从系统帐户启动的,这样我就可以知道我是否需要调用ServiceBase。在可执行文件入口点(主函数)运行或执行其他工作

Environment.UserInteractive
在这两种情况下均为false

WindowsIdentity.GetCurrent().IsSystem
在这两种情况下都为真

我不想传递任何命令行参数来解决这个问题


入口点的
ReflectedType.BaseType.FullName也不起作用。

您可以尝试查看流程的父级

public static bool IsRunningAsService() 
{
    return Process.GetCurrentProcess().Parent().ProcessName == "services";
}

作为服务打开并检查其状态?可能是@HuorSwords的重复项否,它不是,因为在这两种情况下,我都是以系统帐户的身份运行的……关于这个问题的公认答案似乎对您有用-它检查您是否从ServiceBase运行。@Richard well,我在问这个问题之前就已经测试过了,在任何情况下,BaseType.FullName都是System.Object。。。