Пример использования задачи «Служба существует MSBuild» в Microsoft.Sdc.Tasks? - PullRequest
1 голос
/ 06 октября 2008

Я пытаюсь использовать Microsoft.Sdc.Tasks.ServiceProcess.Exists, чтобы проверить, существует ли служба. Хотя в документации нет примеров его использования. У кого-нибудь есть?

Ответы [ 2 ]

2 голосов
/ 06 октября 2008

Вот так мы проверяем, существует ли служба, останавливаем ее, если что-то делаем, делаем что-то и снова запускаем службу (если она была и была запущена).

Цель помощника:

<target name="service_exists">
    <script language="C#">
        <references>
            <include name="System.ServiceProcess.dll" />
        </references>
        <code><![CDATA[
            public static void ScriptMain(Project project) {
                String serviceName = project.Properties["service.name"];
                project.Properties["service.exists"] = "false";
                project.Properties["service.running"] = "false";

                System.ServiceProcess.ServiceController[] scServices;
                scServices = System.ServiceProcess.ServiceController.GetServices();

                foreach (System.ServiceProcess.ServiceController scTemp in scServices)
                {
                    if (String.Compare(scTemp.ServiceName.ToUpper(), serviceName.ToUpper()) == 0)
                    {
                        project.Properties["service.exists"] = "true";
                        project.Log(Level.Info, "Service " + serviceName + " exists");
                        if (scTemp.Status.Equals(System.ServiceProcess.ServiceControllerStatus.Running))
                            project.Properties["service.running"] = "true";
                        project.Log(Level.Info, "Service " + serviceName + " is running: " + project.Properties["service.running"]);
                        return;
                    }
                }
                project.Log(Level.Info, "Service " + serviceName + " doesn't exist");
            }
        ]]></code>
    </script>
</target>

Использование:

<property name="service.name" value="Selection.Service" />
<call target="service_exists" />

<servicecontroller action="Stop" service="${service.name}" machine="${host}" timeout="60000" if="${service.exists}"/>

<!-- Do something -->

<servicecontroller action="Start" service="${service.name}" machine="${host}" timeout="60000" if="${bool::parse(service.exists) and bool::parse(service.running) == true}"/>

Надеюсь, я ничего не пропустил - наш администратор сборки хранит все в одном файле msbuild, который теперь содержит более 3600 строк: |

1 голос
/ 06 октября 2008

На самом деле я сам не использовал это в производственной среде, и я не уверен, какая у вас версия (у меня есть копия Выпуска 2.1.3155.0) и, согласно прилагаемому файлу помощи .chm, Задача имеет следующие свойства :

  • DoesExist Возвращает TRUE, если указанная служба существует
  • IsDisabled Возвращает TRUE, если служба отключена
  • ServiceName Краткое имя, идентифицирующее сервис для системы.

Имя_службы должно быть установлено на «Короткое имя, которое идентифицирует службу для системы, например,« W3SVC »».

Возможно, вы захотите попробовать его с хорошо известным сервисом (например, mssqlserver) и проверить результат двух других свойств (DoesExist / IsDisabled).

Обновление: вот пример (работает):

Импортировать задачи, затем вызвать (например,)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...