Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取服务内部的服务名称_C#_Winapi_Powershell_Service_Permissions - Fatal编程技术网

C# 获取服务内部的服务名称

C# 获取服务内部的服务名称,c#,winapi,powershell,service,permissions,C#,Winapi,Powershell,Service,Permissions,我想在服务中获取服务名称。大致的想法是获取进程id,并将进程id与WMI、ServiceCotroller或EnumServicesStatusEx()API枚举的服务进行比较 问题是服务是在域帐户(不是本地管理员)下运行的。当我想枚举运行服务中的服务时,枚举中缺少运行服务本身 如果我将服务帐户移动到本地管理员,则会找到正在运行的服务。所以这不是代码问题。(如果代码出现问题,行为应相同:找不到服务。) 如果我将逻辑提取到控制台应用程序(或通过powershell)并在服务帐户下运行应用程序或po

我想在服务中获取服务名称。大致的想法是获取进程id,并将进程id与WMI、ServiceCotroller或EnumServicesStatusEx()API枚举的服务进行比较

问题是服务是在域帐户(不是本地管理员)下运行的。当我想枚举运行服务中的服务时,枚举中缺少运行服务本身

如果我将服务帐户移动到本地管理员,则会找到正在运行的服务。所以这不是代码问题。(如果代码出现问题,行为应相同:找不到服务。)

如果我将逻辑提取到控制台应用程序(或通过powershell)并在服务帐户下运行应用程序或powershell,也会找到该服务。所以这不是权限问题。(如果存在权限问题,则行为应相同:找不到服务。)

当服务帐户不是管理员且在服务内部时,无法枚举该服务。这是一个非常棘手的问题

我检查了MSDN中EnumServicesStatusEx的文档,发现本地管理员比本地经过身份验证的用户拥有额外的SC_MANAGER_锁。这是原因吗?但我无法将锁与服务枚举链接

或者,请指定一种在服务中查询服务名称的方法

谢谢

顺便说一句,它在Windows2008R2上

我发现了一个相关的问题:。 这对我来说是不可接受的。我想提供一个公共库,对安装程序没有控制权。
我也有同样的想法。我想这和我的结果应该是一样的。

这不是一个纯粹的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”,因此连接。您是否尝试在提升模式下运行服务?