2013-07-16 20 views
0

这些仅仅是通过参数调用4不同的方法相同的:Windows服务安装 - 复杂的显示名称没有出现在服务列表中

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); 

通过试验和错误我已经成功地找到“显示服务名称”方法的原因是参数(lpDisplayName [in,optional])为CreateService。如果它的简短和简单(没有空格(即使带有斜杠)和变音符号)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); 

,但就像我说的 - 它工作。我只是无法在列表中看到我的服务。

+0

你确定文件的编码在IL-Code中产生了正确的编码吗?我建议通过字符串文字中的['\ uxxxx'](http://msdn.microsoft.com/zh-cn/library/aa664669)编码来编写字符,以确保它将映射到正确的字符...或者,您必须确保您的源文件保存为“UTF-8”或“UNICODE”(请参阅​​http://msdn.microsoft.com/en-us/library/w0kyekyh) –

+0

我不知道如果是我失明,或者昨天发布了一些系统问题。我试过使用unicode编码等昨天,一切都起到了魅力。今天突然间,我的问题消失了,并且原始的“服务显示名称”可见(无编码)。不管怎样,谢谢。 –

+0

唯一没有工作的是: SynchronizationServiceController.InstallAndStart(“u0142u0020u0105”,“\ u0142 \ u0020 \ u0105”,路径);获取错误1078(错误的服务名称或显示名称),当您尝试安装两个不具有唯一的显示名称/名称的服务时,也会返回该错误。如果名称相同 - >服务已安装。如果displayname与现有svc的名称相同 - 则会出现错误1078。 –

回答

0

你确定文件的编码在IL-Code中产生了正确的编码吗?

我建议通过字符串文字在为\ uXXXX编码写的字,可以肯定,这将映射到正确的字符...

或者你必须确保你的 source file is saved as UTF-8 or UNICODE