Καλό είναι να μην κάνουμε πρώιμες υποθέσεις. Η ερώτηση "πως να κάνω μία εφαρμογή να τρέχει όταν ξεκινάνε τα Windows" έχει γίνει 4-5 φορές ήδη στο forum. Κάθε φορά ο λόγος ήταν διαφορετικός:
- άλλοτε η εφαρμογή έπρεπε να εκτελείται ακόμα και αν δεν είχε κάνει κάποιος login,
- άλλοτε έπρεπε η εφαρμογή να δέχεται κλήσεις από άλλα μηχανήματα, χωρίς κάποιος να έχει κάνει login, π.χ. θέλει να στήσει .ΝΕΤ remoting
- άλλοτε υπήρχε ανάγκη να τρέχει ένα πρόγραμμα συνέχεια για να μιλάει με ειδική συσκευή,
- άλλοτε για να ελέγχει την εκτέλεση άλλων εφαρμογών βάση schedule,
- άλλοτε επειδή έπρεπε να εμφανιστεί ένα εικονίδιο στο taskbar
- κλπ, κλπ, κλπ.
Στις περιπτώσεις 1-2 υπάρχει μόνο το service, για τις 3-4 μπορεί να είναι το service, μπορεί όχι. Για την 5, καλύτερα να χρησιμοποιήσεις το startup ή το κατάλληλο registry key. Χωρίς να ξέρεις τί θέλει να κάνει ο άλλος, δεν μπορείς να προτείνεις μία λύση. Το καλύτερο που μπορείς να κάνεις είναι να προτείνεις διάφορες καταστάσεις και την αντίστοιχη λύση.
Όσον αφορά το service και το zombie state, μην ξεχνάς τί είναι το service. Το service είναι ανεξάρτητη εφαρμογή η οποία εκτελείται ανεξάρτητα από το ποιός έχει ή δεν έχει κάνει login και περιμένει κάποιο event (μία κλήση σε ένα socket, ένα timer event, μία κλήση remoting, ένα hardware event, κάτι άλλο), το επεξεργάζεται και συνεχίζει να περιμένει. Σε "zombie state" μπορεί να μπει μόνο αν λόγω κακού προγραμματισμού σταματήσει να ακούει για κλήσεις. Resources δεν χάνονται παρά μόνο αν, με το τέλος της επεξεργασίας του event, ξεχάσει κανείς να κλήσει π.χ. connections, αρχεία ή κάτι άλλο που δεν χρειάζεται. Και αυτό όμως είναι αποτέλεσμα κακού προγραμματισμού. Η εκτέλεση του service συνήθως δεν εξαρτάται από το αν εκτελείται ή όχι μία σχετική εφαρμογή.
Όσον αφορά το installation, ο Windows Installer κάνει πολύ καλά τη δουλειά του και το Visual Studio μπορεί να καλύψει εύκολα τις πιο συνηθισμένες περιπτώσεις δημιουργίας setup. Όσο για τα registry keys, μία εφαρμογή δεν χρειάζεται να ζητήσει άδεια για να γράψει πληροφορίες στα δικά της κλειδιά (τα κλειδιά κάτω από το HKLM\Software\AppName, το HKCU\Software\AppName και κάποια άλλα) ή για να προσθέσει νέους δικούς της τύπους αρχείων. Γι αυτό υπάρχει το registry. Νόημα έχει να σε ρωτήσει π.χ. αν θέλεις να αναλάβει η εφαρμογή σου άλλους τύπους αρχείων όπως τα mp3, αν θέλεις να προσθέσει shortcuts στο context menu ή στο Quick Launch menu.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos