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

しかし、私が言うように - それは動作します。リストに自分のサービスが表示されません。

4

1 に答える 1