这些是相同方法的 4 次调用,仅参数不同:
SynchronizationServiceController.InstallAndStart("test", "test", path);
SynchronizationServiceController.InstallAndStart("test1", "test1", path);
SynchronizationServiceController.InstallAndStart("test2", "\"Usługa synchronizacji systemu B2B1\"", path);
SynchronizationServiceController.InstallAndStart(serviceName, "Usługa synchronizacji systemu B2B", path);
通过反复试验,我设法发现CreateService方法的“显示服务名称”参数(lpDisplayName [in,可选])是问题的原因。如果它简短(没有空格(即使有转义括号)和变音符号)svc 出现在服务列表中(案例 1 和 2)。否则它会正确安装并且可以以编程方式管理(启动/停止/卸载)而不会出现任何错误,但是我在列表中看不到它。
这是安装方法代码:
public static void InstallAndStart(string serviceName, string displayName, string fileName)
{
IntPtr scm = OpenSCManager(ScmAccessRights.AllAccess);
try
{
IntPtr service = OpenService(scm, serviceName, ServiceAccessRights.AllAccess);
if (service == IntPtr.Zero)
{
service = CreateService(scm, serviceName, displayName, ServiceAccessRights.AllAccess, SERVICE_WIN32_OWN_PROCESS, ServiceBootFlag.AutoStart, ServiceError.Normal, fileName, null, IntPtr.Zero, null, null, null);
但正如我所说 - 它有效。我只是无法在列表中看到我的服务。