【问题标题】:How to check if executable started as service or from SYSTEM account?如何检查可执行文件是作为服务启动还是从系统帐户启动?
【发布时间】:2015-03-28 10:28:29
【问题描述】:

我有一个可以作为服务安装和启动的程序,或者可以使用 'at' 命令从 SYSTEM 帐户启动。我需要找到一种方法来了解可执行文件是作为服务启动还是从 SYSTEM 帐户启动,这样我才能知道是否需要调用 ServiceBase.Run 或在可执行入口点(主函数)执行其他工作。

Environment.UserInteractive 在这两种情况下都是假的。

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

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

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

【问题讨论】:

  • 作为服务打开并检查其状态?
  • Am I Running as a Service 的可能重复项
  • @HuorSwords 不,不是,因为在这两种情况下,我都以 SYSTEM 帐户运行...
  • 关于该问题的已接受答案看起来对您有用 - 它会检查您是否从 ServiceBase 运行。
  • @Richard 好吧,我什至在问这个问题之前就对其进行了测试,在任何情况下 BaseType.FullName 都是 System.Object ...

标签: c# windows


【解决方案1】:

您可以尝试查看进程的父进程。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多