Windows服务安装-复杂的显示名称不在服务列表中



这是同一方法的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方法的"显示服务名称"param(lpDisplayName[in,optional])是问题的原因。如果它的简短(没有空格(即使有转义括号)和变音符号标记)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);

但正如我所说,它有效。我只是在名单上看不到我的服务。

您确定文件的编码在IL代码中产生了正确的编码吗?

我建议在字符串文字中通过\uxxxx编码来编写字符,以确保它将映射到正确的字符。。。

或者,您必须确保源文件保存为UTF-8或UNICODE

最新更新