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);
,但就像我说的 - 它工作。我只是无法在列表中看到我的服务。
你确定文件的编码在IL-Code中产生了正确的编码吗?我建议通过字符串文字中的['\ uxxxx'](http://msdn.microsoft.com/zh-cn/library/aa664669)编码来编写字符,以确保它将映射到正确的字符...或者,您必须确保您的源文件保存为“UTF-8”或“UNICODE”(请参阅http://msdn.microsoft.com/en-us/library/w0kyekyh) –
我不知道如果是我失明,或者昨天发布了一些系统问题。我试过使用unicode编码等昨天,一切都起到了魅力。今天突然间,我的问题消失了,并且原始的“服务显示名称”可见(无编码)。不管怎样,谢谢。 –
唯一没有工作的是: SynchronizationServiceController.InstallAndStart(“u0142u0020u0105”,“\ u0142 \ u0020 \ u0105”,路径);获取错误1078(错误的服务名称或显示名称),当您尝试安装两个不具有唯一的显示名称/名称的服务时,也会返回该错误。如果名称相同 - >服务已安装。如果displayname与现有svc的名称相同 - 则会出现错误1078。 –