Skip to content

Gestionnaire de service ​

Application WinForms résidant dans la zone de notification Windows. Elle pilote le service Windows du backend (démarrer, arrêter, redémarrer), ouvre le client de supervision, affiche le journal du backend en direct et porte la boîte d'activation de licence.

TechnologieWinForms .NET 9 (net9.0-windows)
Point d'entréeProgram.cs
Nom d'assemblySuperviseur-ServiceManager
Référence projetdotnet/shared
PaquetsSystem.ServiceProcess.ServiceController, System.Text.Json
Service pilotéSuperviseur-Service (ServiceName de app.config.json)

Structure ​

FichierRôle
Program.csMutex d'instance unique, puis lancement du contexte d'application
TrayApplicationContext.csIcône, menu contextuel, minuteur d'état, actions sur le service
AppConfig.csChargement de app.config.json par la classe partagée
Loc.csLibellés français / anglais
LicenseDialog.csDemande d'activation et application d'une licence
PasswordDialog.csSaisie du mot de passe administrateur

Mécanismes non évidents ​

Le gestionnaire pilote le service installé, jamais un backend lancé depuis le dépôt ​

Il s'adresse à Superviseur-Service par ServiceController. Un dotnet run --project dotnet/backend n'est pas un service Windows : le menu le montre alors comme arrêté ou inconnu, et les actions échouent.

Les actions sur le service passent par une élévation ​

ÉlémentDétail
MécanismeProcess.Start avec le verbe runas
Refus de l'invite UACWindows lève une Win32Exception de code natif 1223 (ERROR_CANCELLED), interceptée pour afficher « opération annulée » au lieu d'une erreur brute

Le menu est construit une fois, puis mis à jour en place ​

Un minuteur rafraîchit l'état toutes les 5 s. Les libellés et l'activation des entrées sont ajustés sur le ContextMenuStrip existant : le reconstruire ferait scintiller un menu ouvert.

Le mot de passe est vérifié par le backend, en HTTPS de bouclage ​

ÉlémentDétail
AppelPOST https://localhost:{DefaultPort}/api/auth/verify-admin-password
CertificatLe rappel de validation accepte le certificat uniquement si l'URI est de bouclage — le certificat auto-signé du service n'a donc pas à être approuvé par le magasin Windows
Service injoignableUn message d'erreur réseau, et l'action est refusée

La console du backend lit un fichier, pas un flux ​

L'entrée « Voir la console du backend » ouvre une fenêtre PowerShell sur le journal le plus récent.

Emplacement cherchéCas
%ProgramData%\Superviseur\logsPoste installé, cherché en premier
%LOCALAPPDATA%\Superviseur_Dev\logsRepli, poste de développement

Le fichier retenu est le plus récent log-*.txt, suivi par Get-Content -Wait -Tail 200.

Le client est cherché à deux endroits ​

..\client\{ClientName}.exe relativement au répertoire de l'exécutable — la disposition d'un poste installé — puis {ClientName}.exe à côté du gestionnaire.

app.config.json est copié auprès de l'exécutable ​

Le gestionnaire est installé dans {app}\manager, hors de portée du app.config.json déposé auprès du backend. Le .csproj en copie donc un exemplaire à la compilation ; sans lui, AppConfig.Load() retombe sur ses valeurs par défaut — version, URL et port erronés.

La langue suit celle du système ​

Loc choisit le français si CultureInfo.CurrentUICulture a pour code langue fr, l'anglais sinon. Même règle que le client de supervision, pour qu'un poste n'affiche jamais deux langues selon la fenêtre ouverte.

JwtSecret n'est délibérément pas chargé ​

AppConfig.Load mappe la configuration partagée à l'exception du secret JWT : le gestionnaire s'authentifie auprès de l'API et ne signe jamais de jeton lui-même.

Contraintes actives ​

ContrainteConséquence si elle est ignorée
Une seule instance à la foisUn mutex nommé {AppName}ServiceManager-Mutex fait sortir silencieusement la seconde
Les gestionnaires de clic sont async voidChacun encapsule son corps dans un try/catch : une exception non capturée ferait tomber tout le processus
Le projet cible net9.0-windowsIl ne se compile ni ne s'exécute hors Windows

Tests ​

dotnet/tests/manager — couverture du chargement de configuration.

powershell
dotnet test dotnet/tests/manager/manager.tests.csproj

Documentation Technique