【问题标题】:How to run a service as LocalSystem in Windows 7?如何在 Windows 7 中将服务作为 LocalSystem 运行?
【发布时间】:2023-03-11 07:54:01
【问题描述】:

我正在尝试按照 Windows SDK 中的说明编写我的第一个服务应用程序。我使用以下代码安装了该服务:

SC_HANDLE schs=CreateService(sch,
                             SERVICENAME,"VMFS - Servidor de arquivos",
                             SC_MANAGER_CREATE_SERVICE,
                             SERVICE_WIN32_OWN_PROCESS,
                             SERVICE_AUTO_START,
                             SERVICE_ERROR_NORMAL,
                             pathexe,
                             NULL/*LoadOrderGroup*/,
                             NULL/*TagId*/,
                             NULL/*Dependencies*/,
                             NULL/*Account:Local System*/,
                             NULL/*Password*/);

服务器没有启动(错误 1053)。

但是,如果我转到 services.msc 并将服务更改为以我的帐户名 (Valdeci) 登录,则该服务将启动。所以这似乎是一个登录错误。怎么了?我也想在 Windows XP 和 Vista 中运行我的服务,但没有尝试,因为我的开发机器有 Windows 7。

【问题讨论】:

  • LocalSystem 是默认帐户。我将专注于调试您的服务的启动代码,所以看看为什么当用户帐户不是您自己的时候它会失败。
  • 我不知道如何调试服务启动代码。我使用 C++ Builder。

标签: c++ winapi windows-7 windows-services


【解决方案1】:

尝试使用 NULL 代替“.\\LocalSystem”,如CreateService documentation 中所述。

【讨论】:

  • 我试过了,但没用,我改成了“.\\LocalSystem”,但也没有用。
  • 您的服务正在启动,但没有及时报告其状态(这就是 1053 的意思)。您的代码在 ServiceMain() 中做了什么,调用该函数来启动您的服务?它是否访问网络、映射驱动器、注册表等?尝试尽可能地剥离它以调试情况。
  • 感谢您的回答。我将尝试将代码减少到最低限度,看看它是否有效。但是,正如我所说,当我将帐户更改为我的个人帐户时,它可以工作,并且我的 ServiceMain 会快速报告状态。
  • 好的。我提到的事情(访问映射驱动器、读取注册表)对每个用户的操作方式不同,并且可以解释为什么该服务在您的帐户中有效,但在 LocalSystem 中无效。
【解决方案2】:

我解决了我的问题!我遵循了收到的提示:将代码剥离为“无所事事”服务,但它仍然无法正常工作。所以我得出结论,问题不在于代码本身。由于“缺少” DLL,该程序甚至没有启动。我发现“路径”在作为 LocalSystem 运行时的工作方式不同,因此我将所有运行时 DLL 复制到服务的文件夹中。这是我通常安装程序的方式,但在开发时我使用路径。

感谢您的宝贵时间!

【讨论】:

  • 我的系统路径不包括 DLL 的路径。仅设置了用户路径。现在,我使系统路径等于用户路径,不需要将我的 DLL 复制到服务路径。
猜你喜欢
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
相关资源
最近更新 更多