C# 获取服务内部的服务名称
我想在服务中获取服务名称。大致的想法是获取进程id,并将进程id与WMI、ServiceCotroller或EnumServicesStatusEx()API枚举的服务进行比较 问题是服务是在域帐户(不是本地管理员)下运行的。当我想枚举运行服务中的服务时,枚举中缺少运行服务本身 如果我将服务帐户移动到本地管理员,则会找到正在运行的服务。所以这不是代码问题。(如果代码出现问题,行为应相同:找不到服务。) 如果我将逻辑提取到控制台应用程序(或通过powershell)并在服务帐户下运行应用程序或powershell,也会找到该服务。所以这不是权限问题。(如果存在权限问题,则行为应相同:找不到服务。) 当服务帐户不是管理员且在服务内部时,无法枚举该服务。这是一个非常棘手的问题 我检查了MSDN中EnumServicesStatusEx的文档,发现本地管理员比本地经过身份验证的用户拥有额外的SC_MANAGER_锁。这是原因吗?但我无法将锁与服务枚举链接 或者,请指定一种在服务中查询服务名称的方法 谢谢 顺便说一句,它在Windows2008R2上 我发现了一个相关的问题:。 这对我来说是不可接受的。我想提供一个公共库,对安装程序没有控制权。C# 获取服务内部的服务名称,c#,winapi,powershell,service,permissions,C#,Winapi,Powershell,Service,Permissions,我想在服务中获取服务名称。大致的想法是获取进程id,并将进程id与WMI、ServiceCotroller或EnumServicesStatusEx()API枚举的服务进行比较 问题是服务是在域帐户(不是本地管理员)下运行的。当我想枚举运行服务中的服务时,枚举中缺少运行服务本身 如果我将服务帐户移动到本地管理员,则会找到正在运行的服务。所以这不是代码问题。(如果代码出现问题,行为应相同:找不到服务。) 如果我将逻辑提取到控制台应用程序(或通过powershell)并在服务帐户下运行应用程序或po
我也有同样的想法。我想这和我的结果应该是一样的。这不是一个纯粹的PowerShell答案,但就EXE、DLL和服务而言,您有一个很好的工具 查看/FI和/FO。在下面的示例中,我获得了搜索服务的信息
tasklist /FI "SERVICES eq WSearch" /FO "CSV"
要将其与PowerShell集成,您可以使用:
tasklist /FI "SERVICES eq WSearch" /FO "CSV" | ConvertFrom-Csv
这是一个权限问题 从系统内部运行psservice,如:
psservice.exe security InstrumentationTestService
我得到了以下结果:
PsService v2.24 - Service information and configuration utility
Copyright (C) 2001-2010 Mark Russinovich
Sysinternals - www.sysinternals.com
SERVICE_NAME: InstrumentationTestService
DISPLAY_NAME: InstrumentationTestService
ACCOUNT: LocalSystem
SECURITY:
[ALLOW] NT AUTHORITY\SYSTEM
Query status
Query Config
Interrogate
Enumerate Dependents
Pause/Resume
Start
Stop
User-Defined Control
Read Permissions
[ALLOW] BUILTIN\Administrators
All
[ALLOW] NT AUTHORITY\INTERACTIVE
Query status
Query Config
Interrogate
Enumerate Dependents
User-Defined Control
Read Permissions
[ALLOW] NT AUTHORITY\SERVICE
Query status
Query Config
Interrogate
Enumerate Dependents
User-Defined Control
Read Permissions
表示我的服务账号没有查询服务状态的权限
如果我使用服务帐户运行powershell/WMI/ServiceController,该服务帐户将变为交互式用户。因此具有查询服务状态的权限
解决方案是授予服务帐户查询状态权限。谢谢您的回复。我得到服务PID并尝试运行tasklist,比如:tasklist/FI“PID eq{PID}”/SVC/NH。它返回的服务名称为N/A。顺便说一句,如果我使用服务帐户在powershell中运行tasklist,它可以返回正确的服务名称。所以你的解决方案失败了。我也是。你确定叫对了吗?您能给出您使用的确切语法吗?
tasklist/FI“PID eq 2524”/SVC
在控制台中返回“sqlservr.exe 2524 MSSQLSERVER”,在服务调试输出中返回“sqlservr.exe 2524 N/A”,因此连接。您是否尝试在提升模式下运行服务?