Sinon, il existe des solutions de déploiement comme LANDesk software deployment portal ... normalement, cela devrait l'équipe Cloud Ops et Dev Ops de ta société qui devrait fournir ce genre d'outil avec toutes les sécurités possibles.
Je pense aussi à Ansible ou Jenkinsn idéal pour automatiser compilation, packaging et déploiement vers le Cloud après pour l'agent local, ça tu as un tas de prestataire qui en fournisse pour les sociétés qui investisse dans un gestionnaire d'asset avec outil de RMM Deployment.
Cela fait penser à PAServer sur le fonctionnement Master-Slave et sur l'inversion qui est Client Server lors de la négociation initiale de connexion, tu n'as pas de problème avec les FireWall, proxy voire les réseaux secondaires (plusieurs cartes réseau sur serveur), je déploie pas mal d'application non visible sur le réseau de l'entreprise, mais uniquement visible par des frontaux PHP/NodeJS/Python via un revert proxy NGINX, sinon derrière des fermes CITRIX idem, on déploie sur le master, pas du la prod active (du moins, je l'ai fait mais comme toi, j'ai développé mon outil, plus simpliste puisque LAN accessible)
Comment gères tu la sécurité, il y a des clés validées par des certficats à échanger lors de la communication pour éviter que n'importe qui puisse se connecter au Port et injecter n'importe quelle commande ou forcer un deny de service en saturant le port de données, prévoit éventuellement un throttling.
Comme tu échanges un record, je te recommande
TAppWatcherMessage = packed record
et veiller MINENUMSIZE au TAppWatcherCommand
Faudrait empêcher le code de se compiler en 32Bits aussi, car l'échange de HWnd change de taille entre 32 et 64 bits, sinon il te faut gérer un champ size supplémentaire dans le code pour déterminer quelle version du protocole utiliser.
Petite astuce syntaxique TAppWatcherStrCommand: array[0..10] of string = ... -> APP_WATCHER_COMMAND_STR: array[TAppWatcherCommand] of string = ... cela évite le Ord et en plus cela respecte le nommage conventionnel pour une constante
1 2 3 4
| Function TAppWatcherMessage.CmdName : string;
begin
Result := APP_WATCHER_COMMAND_STR[Command]; // à la place de // Result:= TAppWatcherStrCommand[ord(Command)];
end; |
On pourrait aussi faire cela sans constante
1 2 3 4
| Function TAppWatcherMessage.CmdName : string;
begin
Result := Copy(GetEnumName(TypeInfo(TAppWatcherCommand), Ord(Command)), Length('cmd') + 1);
end; |
Partager