Windows服务安装-复杂的显示名称不在服务列表中
本文关键字:服务列表 显示 安装 服务 复杂 Windows | 更新日期: 2023-09-27 18:22:41
这是同一方法的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