La conversion d'une application Delphi à exécuter en tant que service - est-il nécessaire?
J'ai un delphi application qui enregistre les données à partir de divers endroits, et écrit les données dans un fichier. L'application dispose d'une vaste interface graphique pour permettre l'affichage des données, la configuration des options, etc.
Un utilisateur a demandé à ce que l'application soit modifié pour qu'il puisse être exécuté en tant que service. Son raisonnement est que l'application peut alors être lancé lors du démarrage et de l'exécuter sans aucun utilisateur enregistré et serait disponible indépendamment de ce qui a été connecté.
Ma question est la suivante: Est-il une autre solution qui me permettrait d'installer l'application telle qu'elle existe maintenant de sorte qu'il serait encore exécuter sans que l'utilisateur connecté et toujours disponible pour tous les utilisateurs?
Mon sentiment est que la conversion de l'application de s'exécuter en tant que service n'est pas trivial. Je suppose que vous aurait besoin de 2 applications - la "tête" de l'application de service, et une interface graphique qui a été exécuté par les utilisateurs sur la demande qui pourraient interagir avec le service (commentaires bienvenus ici aussi).
Voir aussi: autonome Delphi application qui peut aussi être installé en tant que service windows [stackoverflow.com/questions/2387383/...
OriginalL'auteur rossmcm | 2010-11-05
Vous devez vous connecter pour publier un commentaire.
Commercial (et gratuit) les solutions de Firedaemon, qui sera (presque) n'importe quelle application comme un service.
Sur un passage, il ne devrait pas vraiment être difficile de séparer la logique et l'interface utilisateur, vous devriez ai déjà fait lorsque vous avez développé l'application. Tout simplement parce que Delphi facilite l'écriture d'une logique d'entreprise dans le code derrière associés avec l'interface utilisateur, cela ne signifie pas que vous devriez vraiment le faire. Regarder le modèle de présentation est à Martin Fowler site.
OriginalL'auteur Jim Brissom
J'ai l'habitude de créer mon application de telle manière qu'il peut être lancé en tant que service ou comme une interface graphique, via une ligne de commande de l'interrupteur
/GUI
.Lorsque l'application s'exécute avec une interface graphique, j'instancie et démarrer le service de classe "à la main".
Avantages:
Il va exécuter le même code, le rendant très facile à déboguer le service. Vous pouvez simplement mettre des points d'arrêt et l'étape à l'aide de votre code sans avoir à "attacher" à une application en cours d'exécution.
À cause de l'interface graphique, vous pouvez voir ce que votre service serait à faire, et d'interagir avec elle, via listviews et boutons, même sur des serveurs distants où vous ne disposez pas d'un débogueur. D'avoir à interagir avec votre service via les journaux et les configurations sont nazes et lent.
Exemple rmr, à partir d'un projet qui fonctionne comme ceci:
Oh, une autre chose à garder à l'esprit est que les services de l'habitude de fonctionner comme un "système" de l'utilisateur, ce qui signifie que vous aurez différents privilèges et les paramètres (par exemple mappages de lettre de lecteur).
OriginalL'auteur Wouter van Nifterick
En général est possible d'avoir un mélange unique exe qui fonctionne comme un service ou fonctionne comme une interface graphique complète d'application standard.
La façon dont beaucoup d'efforts de votre application a besoin pour s'adapter à cette catégorie est question de la façon dont il est conçu, spécialement dans le type de couplage entre la logique métier et la logique de l'interface utilisateur.
Un excellent exemple de ce type d'application est livré avec Delphi lui-même: scktsrvr.exe dans votre $DELPHI\bin s'exécute comme une application graphique ou en tant que service (exécuter scktsrvr.exe /installer à l'auto-inscription du service et de l'utilisation de la console de gestion pour le démarrer/l'arrêter.
dans le dossier $DELPHI\source\db, vous trouverez les fichiers de projet (scktsrvr.rmr/res, ScktCnst.pas, ScktMain.pas/dfm). Prenez votre temps pour examiner la manière dont c'est fait, et, qui sait... c'est peut-être ce que vous cherchez pour votre application.
Prendre en compte depuis Windows Vista services interactifs ne sont pas autorisés à interagir avec l'utilisateur à son bureau. Un administrateur doit activer le détection de services interactifs et l'utilisateur d'avoir à changer à la session 0 ordinateur de bureau afin d'interagir avec votre service (par interagissent cela signifie de voir et d'interagir avec votre service de formulaires)
OriginalL'auteur jachguate
Vous pouvez essayer d'utiliser svrany, un outils pour exécuter une application en tant que service.
C'est des pièces de Serveur Outils du Kit de Ressources.
essayez ce lien pour 2003 kit de ressources de serveur de téléchargement.
OriginalL'auteur Hasan S
Ça dépend un peu de votre application, mais en général, il est réalisable. Essayez ceci: http://iain.cx/src/nssm. N'oubliez pas de démarrer tous les services qui vous demande dépend AVANT le début de votre application en tant que service. Autour de Google pour plus d'informations sur la façon de le faire.
OriginalL'auteur avra
Vous pourriez écrire un simple service qui lance votre application. Mais si vous vous souciez de votre application avenir, j'irais le service. Oui, vous devez diviser l'application en deux morceaux, le client/la partie GUI et le service lui-même, surtout depuis Vista et 7 fait bien plus difficile pour un service pour afficher une interface utilisateur pour des raisons de sécurité.
Les Services ont plusieurs avantages, ils courent à leur session, ils peuvent être réglés pour fonctionner à un utilisateur donné, qui peut être différent de la session, seul utilisateur avec les privilèges adéquats peut les contrôler, Windows peut redémarrer automatiquement (ou perfom d'autres actions) quand ils échouent.
OriginalL'auteur