2009-05-05 14 views
5

Mam kilka usług systemu Windows napisanych w języku C#, które mam skonfigurowane do obsługi uruchamiania z wiersza poleceń jako aplikacja konsolowa, jeśli określony parametr zostanie przekazany. Działa świetnie, ale chciałbym móc wykryć, czy aplikacja jest uruchamiana przez menedżera kontroli usług, czy z linii poleceń.Jak sprawdzić, czy proces jest uruchamiany przez Menedżera sterowania usługami

Czy jest jakiś sposób, aby powiedzieć w czasie wykonywania, jeśli moja aplikacja została uruchomiona przez SCM?

Odpowiedz

2

Environment.UserInteractive zwróci wartość false, jeśli proces działa pod kontrolą SCM.

+3

Działa to dobrze, o ile nie włączono opcji "Zezwalaj usłudze na interakcję z pulpitem" w SCM. Nie stanowi problemu dla naszych usług. Dzięki, Guardi! – BrettRobi

1

SCM wywoła metodę OnStart, aby można było zaznaczyć to zdarzenie i upewnić się, że po uruchomieniu z wiersza poleceń nie wywołuje się OnStart. Można również sprawdzić parametry uruchamiania, aby zobaczyć, jak aplikacja została uruchomiona.

0

W C funkcja StartServiceCtrlDispatcher() zakończy się niepowodzeniem z ERROR_FAILED_SERVICE_CONTROLLER_CONNECT. To jest najlepszy sposób w C, zastanawiam się, czy C# to ujawnia?

ERROR_FAILED_SERVICE_CONTROLLER_CONNECT

Ten błąd jest zwracany, jeśli program jest uruchamiany jako aplikacja konsoli, a nie jako usługa. Jeśli program zostanie uruchomiony jako aplikacja konsolowa do celów debugowania, skonstruuj go tak, aby kod specyficzny dla usługi nie był wywoływany po zwróceniu tego błędu.

Powiązane problemy