<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>WinForms</title><link>https://www.dotnetzone.gr:443/cs/forums/12/ShowForum.aspx</link><description>Θέματα για rich client / windows εφαρμογές, σε οποιαδήποτε γλώσσα (VB.NET, C#, managed C++, κ.α.)</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ:Πως περνάμε parameters σε μια Windows Service</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/24556.aspx</link><pubDate>Tue, 06 Feb 2007 01:25:15 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:24556</guid><dc:creator>agrammenos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/24556.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=24556</wfw:commentRss><description>&lt;P&gt;Για σας καταρχήν,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Πιστεύω πως η συγκεκριμένη λύση με το application config και το UI που το κάνει modify σαν tool είναι ότι καλύτερο, γιατί όσοι έχουν γράψει παρόμοιες εφαρμογές (p.x. Windows Services) η οτιδήποτε άλλο που θέλει modify σε setting, σίγουρα έχουμε ληφθεί τηλεφωνήματα(όπως είπε και ο Παναγιώτης στο προηγούμενο post του) στις 11 το βραδυ ρωτώντας πως γίνετε edit αυτό η το άλλο. Καλο θα ήταν λοιπόν όσο power user και&amp;nbsp;να είναι ο χρηστης&amp;nbsp;καλο θα ήταν να του δίνουμε όσο πιο πολλές ευκολίες γίνετε χωρίς να τον κάνουμε να αισθάνεται πως τον μεταχειριζόμαστε σαν αρχάριο. Εδώ πρέπει να σημειωθεί ότι το πάντρεμα τις πολυπλοκότητας και τις απλότητας είναι πολύ δύσκολο...Για αυτό και θέλει πολύ προσοχή (μιλάω από προσωπική εμπειρία) αλλα το αποτέλεσμα είναι πολύ καλο και για εμενα (που δεν θα με περνούν τηλ) αλλα&amp;nbsp;και για τον πελάτη που θα κάνει την δουλειά του error free.&lt;/P&gt;</description></item><item><title>Απ:Πως περνάμε parameters σε μια Windows Service</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/24537.aspx</link><pubDate>Mon, 05 Feb 2007 21:40:24 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:24537</guid><dc:creator>Νατάσα Μανουσοπούλου</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/24537.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=24537</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Παναγιώτης Καναβός:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Είναι κάτι το οποίο έπρεπε να είχα βάλει από την αρχή, και το οποίο δεν προλαβαίνω να βάλω τώρα.&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;&lt;br&gt;Τα είπες όλα σε μια πρόταση &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;br&gt;</description></item><item><title>Απ:Πως περνάμε parameters σε μια Windows Service</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/24536.aspx</link><pubDate>Mon, 05 Feb 2007 21:32:01 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:24536</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/24536.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=24536</wfw:commentRss><description>&lt;P&gt;Τα Trace Listeners τα ανέφερα ήδη, πριν αναφέρω το Enterprise Library. Με το Enterprise Library η δουλειά γίνεται πολύ ευκολότερη, όχι δυσκολότερη. Αντί να αντιγράφω συνέχεια logging κώδικα, γράφω μία γραμμή και τελείωσα. Όσον αφορά το UI, άλλο να λες στον πελάτη ή τον consultant "Πήγαινε σε εκείνη τη γραμμή που λέει PollingTime και βάλε την τιμή xyz" ή "πήγαινε εκεί που λέει connection string και βάλε το server" και άλλο να υπάρχει ένα UI στο οποίο ο άλλος θα βάλει τις τιμές με validation για τυχόν λάθη. &lt;/P&gt;
&lt;P&gt;Από την αρχή ανέφερα ότι όσα γράφω είναι η εμπειρία των τελευταίων μηνών. Ειδικά το θέμα του UI με έχει "τσουρουφλίσει" καθώς κάθε φορά που κάποιος θέλει να αλλάξει μία γραμμή στο app.config με παίρνει τηλέφωνο και ρωτάει "Που είπαμε ότι βάζω το polling ?". Είναι κάτι το οποίο έπρεπε να είχα βάλει από την αρχή, και το οποίο δεν προλαβαίνω να βάλω τώρα.&lt;/P&gt;</description></item><item><title>Απ:Πως περνάμε parameters σε μια Windows Service</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/24532.aspx</link><pubDate>Mon, 05 Feb 2007 20:45:42 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:24532</guid><dc:creator>Dimitris Papadimitriou</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/24532.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=24532</wfw:commentRss><description>&lt;p&gt;Να προσθέσω μόνο ένα πραγματάκι, μήπως και φοβήθηκε κανείς διαβάζοντας τα περί Enterprise Library. Η δυνατότητα καταγραφής σε log και επιλογής της τοποθεσίας που αυτό θα αποθηκευτεί είναι δυνατή και εγγενώς από το .NET, απλά με την Enterpise Library μπορεί κανείς να κάνει πολλά περισσότερα, όπως λέει και ο Παναγιώτης.&lt;/p&gt;&lt;p&gt;Όσο για το UI, Παναγιώτη κι αυτό δεν θα ενημέρωνε το app.config; Ίσως θα μπορούσε να τα έστελνε και με κάποιο .NET remoting στο service για να μην γίνει restart... αλλά τον μπλέκουμε τον άνθρωπο! Νομίζω για τις γνώσεις του καλύτερο είναι το app.config και restart του service όταν γίνει αλλαγή.... αλλά και πάλι το arguments είναι κι αυτό μια λύση, αν και λιγάκι παλιομοδίτικη και όχι τόσο .net oriented!&amp;nbsp;&lt;/p&gt;</description></item><item><title>Απ:Πως περνάμε parameters σε μια Windows Service</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/24526.aspx</link><pubDate>Mon, 05 Feb 2007 20:14:23 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:24526</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/24526.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=24526</wfw:commentRss><description>&lt;P&gt;Να σας πω κι εγώ την εμπειρία μου, καθότι τον τελευταίο καιρό δουλεύω συνέχεια με services. Καταρχήν, αν περάσεις τις παραμέτρους σαν arguments θα πρέπει να κάνεις προσεκτικό parsing για να πιάσεις τυχόν λάθη του χρήστη. Καθώς τα services δεν μπορούν να εμφανίσουν μηνύματα λάθους, τα μηνύματα θα πρέπει να τα γράψεις στο event log για να τα δει και ο χρήστης. Χρησιμοποιώντας το app.config μειώνονται αρκετά οι πιθανότητες να κάνει λάθος ο χρήστης αν και θέλει λίγο παραπάνω φασαρία για να βρει το αρχείο και να το κάνει edit. &lt;/P&gt;
&lt;P&gt;Γενικά πάντως, δεν έχει πλάκα να βάζεις settings είτε σαν arguments είτε στο app.config! Λάθη θα γίνουν και στις δύο περιπτώσεις, ενώ ο χρήστης που δεν έχει μεγάλη ιδέα από το service σου και τις παραμέτρους που έχεις ορίσει, θα δυσκολεύεται να κάνει αλλαγές. Το καλύτερο θα είναι κάπου να φτιάξεις ένα UI για να θέτεις τις παραμέτρους, είτε σαν ανεξάρτητο utility, είτε ενσωματώνοντας το στην εφαρμογή σου. Θέλει λίγη δουλειά παραπάνω, αλλά θα γλυτώσεις αρκετή γκρίνια και ψάξιμο του τί συνέβει και δεν δουλεύει το service!&lt;/P&gt;
&lt;P&gt;Όσον αφορά το logging τώρα, μπορείς να χρησιμοποιήσεις τους ενσωματωμένους Trace Listeners για να γράψεις ταυτόχρονα στο event log, σε log αρχεία ή αλλού. Γενικά, την χρειάζεσαι αυτή τη δυνατότητα, καθώς στα αρχεία μπορείς να γράψεις πολύ περισσότερα στοιχεία απ' ότι στο event log. Αν γράψεις π.χ. ένα ολόκληρο exception message στο event log, μαζί με το call stack του, ο χρήστης θα τρομάξει. Άσε που περιοδικά μπορεί να σβήνει το event log και να χάσεις έτσι χρήσιμα μηνύματα. &lt;/P&gt;
&lt;P&gt;Εδώ είναι που έχω βρει το Enterprise Library σωτήριο, καθώς μου επιτρέπει να ορίζω το που θα αποθηκευθεί ποιό μήνυμα από το app.config αντί για τον κώδικα μου. Γλύτωσα πολύ, μα πάρα πολύ επαναλαμβανόμενο κώδικα με αυτό τον τρόπο, απλά χρησιμοποιώντας τα Exception και Logging Application Blocks του Enterprise Library. Χρησιμοποιώ .NET 2.0 και το αντίστοιχο Enterprise Library το οποίο μου δίνει event log, flat file, database, email και MSMQ listeners, οι οποίοι μου φάνηκαν όλοι χρήσιμοι σε διάφορες φάσεις. Π.χ. ο email listener θα στείλει ένα κρίσιμο μήνυμα στον admin ότι έπεσε π.χ. το service. Επειδή όμως η διαδικασία αποστολής ενός email μπορεί να πάρει πάνω από 10 sec, χρησιμοποιώ τον MSMQ listener για να στείλω το email ασύγχρονα. Και το ωραίο είναι, ότι όλα αυτά στήνονται χωρίς εγώ να γράψω παρά μία εντολή Logger.Write! Όλα τα άλλα τα ορίζω στο app.config!&lt;/P&gt;
&lt;P&gt;Ένα πολύ σημαντικό σημείο τέλος έχει να κάνει με τα μηνύματα που γράφεις στα Log. Πρέπει να ξεχωρίσεις μεταξύ των exceptions και των admin μηνυμάτων. Ο χρήστης του service σου δεν θα καταλάβει τί σημαίνει ένα exception message. Θα πρέπει να στείλεις μηνύματα τα οποία καταλαβαίνει αυτός, τα οποία θα έχουν νόημα για τη δουλειά του. Π.χ. "το service ξεκίνησε", "το service σταματάει λόγω λάθους", "εκτελέστηκε η συναλλαγή χψω", ή "Η συναλλαγή χψω απέτυχε λόγω υπέρβασης ορίου". Είναι επίσης σημαντικό να γράφεις μηνύματα για τη δραστηριότητα του service, π.χ. "παρελήφθει νέα συναλλαγή", "η συναλλαγή ολοκληρώθηκε". Ο λόγος είναι ότι αν πάει κάτι στραβά, αυτά τα μηνύματα είναι τα μόνα που θα έχει στη διάθεση του ο χρήστης για να καταλάβει ότι κάτι πήγε λάθος και να το διορθώσει, ή να σε καλέσει να το διορθώσεις.&lt;/P&gt;</description></item><item><title>Απ:Πως περνάμε parameters σε μια Windows Service</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/24524.aspx</link><pubDate>Mon, 05 Feb 2007 19:38:36 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:24524</guid><dc:creator>dtakis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/24524.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=24524</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Νατάσα Μανουσοπούλου:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Dimitris Papadimitriou:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;
&lt;P&gt;Καταρχήν το if δεν λέγεται βρόγχος. Βρόγχοι είναι τα for/next foreach, do κλπ. Αυτό γιατί κατά τα άλλα βλέπω ότι προσέχεις πως εκφράζεσαι. Αλλιώς δεν θα το ανέφερα καθόλου! &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Αφού πιάσαμε το γλωσσικό, τα for, while κλπ είναι βρόχοι. Βρό&lt;FONT color=#a52a2a&gt;γ&lt;/FONT&gt;χος είναι αυτό που βάζεις γύρω από το λαιμό σου όταν θέλεις να κρεμαστείς &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-4.gif" alt="Stick out tongue" /&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Και εγώ το ίδιο: &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-10.gif" alt="Embarrassed" /&gt;&lt;/P&gt;</description></item><item><title>Απ:Πως περνάμε parameters σε μια Windows Service</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/24523.aspx</link><pubDate>Mon, 05 Feb 2007 19:36:05 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:24523</guid><dc:creator>dtakis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/24523.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=24523</wfw:commentRss><description>&lt;P&gt;Ευχαριστώ για την παρατήρησή σου (τα λάθη πρέπει να διορθώνονται ακόμα και αν είναι εκ παραδρομής). Δεν σου ανέφερα ότι δουλεύω αναγκαστικά σε 1.1 &amp;amp; VS2003. &lt;/P&gt;
&lt;P&gt;Και εγώ αυτό υπέθεσα και έγραψα αυτό που μου προτείνεις τώρα&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;if&lt;/SPAN&gt;(args.Length==0)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;timeInterval &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; 3000;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;else&lt;/SPAN&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;try&lt;/SPAN&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;timeInterval &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; Convert.ToInt32(args[0])*1000;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;catch&lt;/SPAN&gt; (Exception ex)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;timeInterval &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; 3000; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:green;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;// default value&lt;/SPAN&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;throw&lt;/SPAN&gt;;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;timer1.Interval=timeInterval;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Τώρα με το app.config θεωρώ ότι είναι σωστή προσέγγιση όπως και το web.config για net αλλά στην προκειμένη ο χρήστης είναι power user και ο θα κάνει κατά βούληση start &amp;amp; restart οπότε τον βολεύει να αλλάζει μόνο αυτή την παράμετρο από το Start Parameters και είναι κάτι σαν παγιωμένη προδιαγραφή. Τώρα αν μου ζητήσει και άλλες παραμέτρους (δηλαδή ξεπαγώσουν οι προδιαγραφές) θα το γυρίσω σε app.config. Ελπίζω μόνο να υπάρχει σε VS 2003&amp;nbsp;αυτή η δυνατότητα!&lt;/P&gt;
&lt;P&gt;Χίλια Ευχαριστώ για την βοήθειά σου.&lt;/P&gt;</description></item><item><title>Απ:Πως περνάμε parameters σε μια Windows Service</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/24522.aspx</link><pubDate>Mon, 05 Feb 2007 19:35:49 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:24522</guid><dc:creator>Dimitris Papadimitriou</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/24522.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=24522</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Νατάσα Μανουσοπούλου:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Dimitris Papadimitriou:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;Καταρχήν το if δεν λέγεται βρόγχος. Βρόγχοι είναι τα for/next foreach, do κλπ. Αυτό γιατί κατά τα άλλα βλέπω ότι προσέχεις πως εκφράζεσαι. Αλλιώς δεν θα το ανέφερα καθόλου! &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/p&gt;&lt;p&gt;Αφού πιάσαμε το γλωσσικό, τα for, while κλπ είναι βρόχοι. Βρό&lt;font color="#a52a2a"&gt;γ&lt;/font&gt;χος είναι αυτό που βάζεις γύρω από το λαιμό σου όταν θέλεις να κρεμαστείς &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-4.gif" alt="Stick out tongue" /&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-10.gif" alt="Embarrassed" /&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Απ:Πως περνάμε parameters σε μια Windows Service</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/24520.aspx</link><pubDate>Mon, 05 Feb 2007 19:30:00 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:24520</guid><dc:creator>Νατάσα Μανουσοπούλου</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/24520.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=24520</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Dimitris Papadimitriou:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;Καταρχήν το if δεν λέγεται βρόγχος. Βρόγχοι είναι τα for/next foreach, do κλπ. Αυτό γιατί κατά τα άλλα βλέπω ότι προσέχεις πως εκφράζεσαι. Αλλιώς δεν θα το ανέφερα καθόλου! &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/p&gt;&lt;p&gt;Αφού πιάσαμε το γλωσσικό, τα for, while κλπ είναι βρόχοι. Βρό&lt;font color="#a52a2a"&gt;γ&lt;/font&gt;χος είναι αυτό που βάζεις γύρω από το λαιμό σου όταν θέλεις να κρεμαστείς &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-4.gif" alt="Stick out tongue" /&gt;&lt;br&gt;&lt;/p&gt;</description></item><item><title>Απ:Πως περνάμε parameters σε μια Windows Service</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/24519.aspx</link><pubDate>Mon, 05 Feb 2007 19:21:12 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:24519</guid><dc:creator>Dimitris Papadimitriou</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/24519.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=24519</wfw:commentRss><description>&lt;p&gt;Καταρχήν το if δεν λέγεται βρόγχος. Βρόγχοι είναι τα for/next foreach, do κλπ. Αυτό γιατί κατά τα άλλα βλέπω ότι προσέχεις πως εκφράζεσαι. Αλλιώς δεν θα το ανέφερα καθόλου! &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/p&gt;&lt;p&gt;Χρειάζεσαι ένα μηχανισμό logging για ένα σωστό windows service, έτσι ώστε να καταγράφονται τα σφάλματα που συμβαίνουν. Πρόκειται για unattended process και επειδή δεν μπορείς να εμφανίζεις μηνύματα σε κάποιο χρήστη, πρέπει να τα καταγράφεις σε κάποιο σημείο. Ψάξε για .net event log και θα βρεις παραδείγματα.&lt;/p&gt;&lt;p&gt;Το σφάλμα που έβγαινε όταν δεν έβαζες κανένα argument ήταν μάλλον γιατί το args[0] δεν υπήρχε, δηλαδή args.Length=0. Οπότε ο σωστός έλεγχος στο if που γράφεις είναι if (args.Length==0)&lt;br&gt;&lt;/p&gt;&lt;p&gt;Σημείωση!!! Σταματώ να επιμένω στο app.config, αφού επιμένεις εσύ στο args! &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-5.gif" alt="Wink" /&gt;&lt;br&gt;&lt;/p&gt;</description></item><item><title>Απ:Πως περνάμε parameters σε μια Windows Service</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/24518.aspx</link><pubDate>Mon, 05 Feb 2007 19:10:16 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:24518</guid><dc:creator>dtakis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/24518.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=24518</wfw:commentRss><description>&lt;P&gt;Ευχαριστώ πολυ για την απάντησή σου,&lt;/P&gt;
&lt;P&gt;είχα γράψει κάτι παρόμοιο χωρίς try catch &lt;/P&gt;
&lt;P&gt;if(args[0].Length==0)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;timeInterval = 3000;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;timeInterval = Convert.ToInt32(args[0]);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//timeInterval = args(0).ToInteger();//Problematic declaration&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;timeInterval=timeInterval*1000;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;
&lt;P&gt;αλλά παρόλο που δεν πέρναγα ως παράμετρο κάτι το service τερμάτιζε αμέσως βγάζοντας το μήνυμα: The Test service on Local Computer started and then stopped.&amp;nbsp; Some services stop automatically if they have no work to do, for example, the Performance Logs and Alerts service.&lt;/P&gt;
&lt;P&gt;Δηλαδή δεν μπήκε ποτέ στο βρόγχο για να πάρει την τιμή 3000, το ίδιο έγινε και όταν έβαλα έλεγχο timeInterval&amp;gt;0 και με τον δικό σου κώδικα.&lt;/P&gt;
&lt;P&gt;Με το Convert τιμή βγαίνει αν δεν έχουμε περάσει τίποτα; Το arg δεν θα είναι null ; Απορώ πως κολλήσαμε εδώ!&lt;/P&gt;</description></item><item><title>Απ:Πως περνάμε parameters σε μια Windows Service</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/24517.aspx</link><pubDate>Mon, 05 Feb 2007 18:51:52 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:24517</guid><dc:creator>Dimitris Papadimitriou</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/24517.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=24517</wfw:commentRss><description>&lt;p&gt;Αν θέλεις οπωσδήποτε arguments θα το έκανα έτσι (περίπου δηλαδή όπως το κάνεις κι εσύ):&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; int timeInterval;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; timeInterval = Convert.ToInt32(args[0]);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (Exception ex)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; timeInterval = 100; // default value&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/p&gt;&lt;p&gt;&lt;b&gt;Επιμένω όμως να το κάνεις με app.config&lt;/b&gt;. Είναι ο προτεινόμενος τρόπος να δουλεύεις στο .net. Ναι, είναι αρχείο που πρέπει να επεξεργαστεί ο χρήστης. Ο κώδικας που θα γράψεις είναι ο εξής (σε vs 2005 και .net 2):&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int timeinterval = Properties.Settings.Default.timeInterval;&lt;/p&gt;&lt;p&gt;και θα πρέπει να δημιουργήσεις το timeInterval setting ανοίγοντας τα properties του project σου και πηγαίνοντας στο Settings tab.&amp;nbsp;&lt;/p&gt;</description></item><item><title>Απ:Πως περνάμε parameters σε μια Windows Service</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/24516.aspx</link><pubDate>Mon, 05 Feb 2007 18:42:16 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:24516</guid><dc:creator>dtakis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/24516.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=24516</wfw:commentRss><description>&lt;P&gt;Μήπως το παραπάνω πρόβλημα είναι επειδή μάλλον το έγραψα όπως είδα σε tutorial ότι χρησιμοποιούν τα args στην VB;&lt;/P&gt;
&lt;P&gt;Δοκίμασα timeInterval = Convert.ToInt32(args[0]);&lt;/P&gt;
&lt;P&gt;και το build παίζει κανονικά!&lt;/P&gt;</description></item><item><title>Απ:Πως περνάμε parameters σε μια Windows Service</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/24515.aspx</link><pubDate>Mon, 05 Feb 2007 18:37:07 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:24515</guid><dc:creator>dtakis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/24515.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=24515</wfw:commentRss><description>&lt;P&gt;Θα ήθελα να χρησιμοποιήσω τις παραμέτρους από τις ιδιότητες του service ώστε να το κάνει αυτό ο χρήστης όποτε θέλει να αλλάξει τον ρυθμό λειτουργίας του. Στοχεύω προς την λύση 1.&lt;/P&gt;
&lt;P&gt;Για την 3. Το app.config είναι ένα αρχείο που θα πρέπει να κάνει edit ο χρήστης για να αλλάξει την παράμετρο που θέλει ο χρήστης έτσι;&lt;/P&gt;
&lt;P&gt;Μπορείς να μου δώσεις έναν τρόπο να διαβάσω τα arguments για το 1 γιατί δεν είμαι σίγουρος; Επίσης πως θα περάσω default τιμή; Αν κάνω έλεγχο αν το timeInterval είναι μεγαλύτερο του 0 να περνάει default τιμή 3 (επί 1000 msec για να είμαστε πάντα σωστοί) ή χρειάζεται try catch αυτή η περίπτωση;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;protected override void OnStart(string[] args)&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;int timeInterval;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// TODO: Add code here to start your service.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;timer1.Enabled = true;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;timeInterval = args(0).ToInteger();&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;
&lt;P&gt;Δοκίμασα το παραπάνω και στο build μου αναφέρει ότι The name 'args' does not exist in the class or namespace. Τι πρέπει να κάνω για αυτό;&lt;/P&gt;
&lt;P&gt;Any help welcomed!!!&lt;/P&gt;</description></item><item><title>Απ:Πως περνάμε parameters σε μια Windows Service</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/24512.aspx</link><pubDate>Mon, 05 Feb 2007 18:23:04 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:24512</guid><dc:creator>Dimitris Papadimitriou</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/24512.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=24512</wfw:commentRss><description>&lt;p&gt;Τρεις τρόπους μου έρχονται στο μυαλό για να περάσεις παραμέτρους σε ένα windows service:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Μέσω του OnStart, όπως γράφεις κι εσύ (ναι, έτσι λειτουργεί όπως το περιγράφεις)&lt;/li&gt;&lt;li&gt;Με .NET Remoting, για real time τροποποίηση παραμέτρων (απλά το αναφέρω. Δεν κάνει για την περίπτωσή σου)&lt;/li&gt;&lt;li&gt;Μέσω του app.config, το οποίο και προτείνω γι αυτό που θέλεις να κάνεις.&lt;br&gt;&lt;/li&gt;&lt;/ol&gt;</description></item></channel></rss>