有很多关于如何为Windows服务设置用户登录凭据的示例,但我无法了解您如何首先确定为该Windows服务设置的当前凭据。
我想做的是:
If(WinService.logonCredentials == LocalUser)
WinService.logonCredentials = new logonCredentials;
是否有可以访问的类可以为我提供所需的数据和/或Windows服务的其他设置?
答案 0 :(得分:2)
我不确定,但是如果你不能用.net内置的类来做它可能只是使用WMI。
这是Win32Service类:
class Win32_Service : Win32_BaseService
{
boolean AcceptPause;
boolean AcceptStop;
string Caption;
uint32 CheckPoint;
string CreationClassName;
string Description;
boolean DesktopInteract;
string DisplayName;
string ErrorControl;
uint32 ExitCode;
datetime InstallDate;
string Name;
string PathName;
uint32 ProcessId;
uint32 ServiceSpecificExitCode;
string ServiceType;
boolean Started;
string StartMode;
string StartName;
string State;
string Status;
string SystemCreationClassName;
string SystemName;
uint32 TagId;
uint32 WaitHint;
};
这就是你要问的问题:
string StartName;
我使用PowerShell在我的笔记本电脑上获取有关“远程桌面”服务的数据,我得到了更多这样的数据(其中一些数据来自Win32_BaseService,而不是Win32Service):
DesktopInteract : False
DisconnectedSessions : 1
DisplayName : Remote desktop services
ErrorControl : Normal
ExitCode : 1077
InstallDate :
Name : TermService
PathName : C:\Windows\System32\svchost.exe -k NetworkService
ProcessId : 0
ServiceSpecificExitCode : 0
ServiceType : Share Process
Started : False
StartMode : Manual
StartName : NT Authority\NetworkService
State : Stopped
Status : OK
SystemCreationClassName : Win32_ComputerSystem
SystemName : NOTEBOOK
TagId : 0
TotalSessions : 2
WaitHint : 0
我无法帮助C#中的WMI。也许你会在你正在使用的类中找到StartName属性(我不知道它是什么类,因为你没写过)。
答案 1 :(得分:0)
以下是如何在 C# 中使用 WMI 检索此信息:
public string GetWindowsServiceLoginCredentials(string serviceName)
{
var credentials = (
from x
in new ManagementObjectSearcher($"SELECT StartName FROM Win32_Service WHERE Caption = '{serviceName}'")
.Get()
.Cast<ManagementObject>()
select
x.GetPropertyValue("StartName")).FirstOrDefault();
return credentials != null ? credentials.ToString() : "";
}
您可以使用它来获取服务的其他属性,只需更改您感兴趣的属性的“StartName”即可。