【问题标题】:Launching process from service under system account从系统帐户下的服务启动进程
【发布时间】:2013-10-15 06:23:38
【问题描述】:

我在从系统帐户启动进程时遇到问题。我只是想明确一点,我不是试图在交互式会话下运行它,也不是试图冒充任何帐户。我要做的就是从系统帐户启动一个进程到同一个会话中。我相信 NTAUTHORITY\SYSTEM 所在的会话是 0 。

我创建了一个简单的 Windows 服务,它基本上只是使用 Process.start 来启动可执行文件。该服务是一项系统服务。

我是这样使用 SC 安装服务的:

sc create "MYSERVICE" binpath= "C:\Projects\MyService\MyService.exe" displayname= "My Awesome Service"

当我尝试手动启动该服务时,我收到一条提示“本地计算机上的 ServiceName 服务已启动然后停止。如果某些服务没有被其他服务或程序使用,它们会自动停止。”

除此之外,可执行文件从未真正启动。在 processhacker 中监视它时,我可以看到该服务确实启动了,但它尝试的可执行文件没有。谁能帮我弄清楚为什么?

正如我之前所说,我的服务非常基础,它所做的只是在启动时尝试启动可执行文件:

  protected override void OnStart(string[] args)
    {
        Process.Start("svrexec.exe");
    }

    protected override void OnStop()
    {
    }

【问题讨论】:

标签: c# .net windows windows-services


【解决方案1】:

您是否指定了可执行文件的完整路径?系统用户的工作文件夹是 %windir%\System32。

尝试 Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "svrexec.exe"),或设置 Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory

【讨论】:

  • 感谢您的回复。不,我没有费心指定一个,因为可执行文件实际上在 system32 文件夹中。我只是尝试直接指向它,但没有好的结果。该文件是一个系统文件,我想知道 Windows 是否有他们自己的小 rootkit,比如设置正在进行以防止用户触摸它们。当我尝试直接从资源管理器从普通用户帐户执行它时,我收到一条错误消息,提示找不到文件。
【解决方案2】:

您是否 100% 确定它没有运行? 我试过了,我的运行在系统用户名下 勾选在任务管理器中显示所有用户的进程

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多