0

这些是相同方法的 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);

但正如我所说 - 它有效。我只是无法在列表中看到我的服务。

4

1 回答 1

0

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

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

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

于 2013-07-17T09:50:45.887 回答