Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Shell & Process

Îåêßíçóå áðü ôï ìÝëïò Oldgeorge. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 22-12-2004, 17:23. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  21-12-2004, 16:18 719

    Umbrella [um] Shell & Process

    Κατ'αρχήν χρόνια πολλά και καλές γιορτές σε όλους (και ιδιαίτερα σε αυτούς που είναι ακόμα μπροστά από μερικά μόνιτορ [:^)] - μακάρι ο καλός κύριος με τα κόκκινα να σας φέρει μια 22" TFT [<:o)])

    Λοιπόν, δυο ερωτησούλες:
    α)Θέλω να σηκώνω μια δεύτερη εφαρμογή (ήδη compiled σε non-managed code και δεν υπάρχει πρόσβαση στο source) μέσα από μια εφαρμογή σε C# για WinCE 4.2 - To Shell είναι μια λύση, αλλά επειδή θέλω να ενημερώνομαι για το πότε έκλεισε η δεύτερη δεν βολεύει ιδιαίτερα. Απ'ότι κατάλαβα το System.Diagnostics.Process δεν υποστηρίζεται στο compact framework. Υπάρχει κάποιο workaround?
    β)Ομοίως, υπάρχει κάτι αντίστοιχο του FileSystemWatcher για compact framework?


    The people of the straight land have really got it made, a warm friendly sleep from the craddle to the grave
  •  21-12-2004, 23:36 721 σε απάντηση της 719

    Re: Shell & Process

    Σε ότι αφορά το (α) ερώτημα, μπορείς εναλλακτικά (σε σχέση με το shell) να "ξεπέσεις" σε κλήση σε unmanaged dll, αλλά δεν ξέρω τον βαθμό ελέγχου που έχεις με αυτόν τον τρόπο πάνω στο process που φτιάχνεις, θα πρέπει να το ψάξεις...

    http://www.c-sharpcorner.com/Code/2003/Jan/PInvokeCF.asp για περισσότερες λεπτομέρειες.


    Vir prudens non contra ventum mingit
  •  21-12-2004, 23:49 722 σε απάντηση της 719

    Re: Shell & Process

    Μην απορρίπτεις τη ShellExecuteEx τόσο γρήγορα (αυτή υποθέτω ότι θες να χρησιμοποιήσεις?). Το structure που γεμίζει περιέχει ένα πεδίο, το hProcess, που περιέχει το handle στο process που δημιουργήθηκε. Το ωραίο τώρα είναι ότι όταν κλείνει το process, το handle γίνεται signalled!
      Αν έγραφες σε unmanaged C++ θα μπορούσες να κάνεις ένα WaitForSinbleObject επάνω του από ένα δεύτερο thread. Το δεύτερο thread θα μπλοκάρει μέχρι να τερματίσει το process. Στο .NET, μπορείς να περάσεις το handle στην κλάση ManualResetEvent και να καλέσεις WaitOne, πάλι μέσα από ένα διαφορετικο thread. Βέβαια, αν η δεύτερη εφαρμογή τρέχει για μικρό χρονικό διάστημα, μπορείς και να κάνεις τις κλήσεις μέσα από ένα ασύγχρονο delegate. Αν όμως περιμένεις ότι θα αργήσει, καλύτερα να δημιουργήσεις ένα ανεξάρτητο thread.
     
    Συγγνώμη που δεν έχω και source αλλά μόλις τώρα σκέφτηκα τη λύση και δεν πρόλαβα να τη δοκιμάσω ακόμα!


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  22-12-2004, 00:05 723 σε απάντηση της 719

    Re: Shell & Process

    Και στο OpenNETCF Smart Device Framework θα υπάρχει υποστήριξη για το FileSystemWatcher. Είναι σε beta τώρα, πόσο το βιάζεσαι; Smile

    Vir prudens non contra ventum mingit
  •  22-12-2004, 00:13 725 σε απάντηση της 719

    Re: Shell & Process

    Στο δεύτερο ερώτημα: Την ίδια δουλειά με το FileSystemWatcher μπορείς να πετύχεις με τις FindFirstChangeNotification, FindNextChangeNotification, FindCloseChangeNotification. Η πρώτη δημιουργεί ένα handle το οποίο κάνει signal όταν διαπιστώσει την πρώτη αλλαγή σε ένα folder. Η δεύτερη συνεχίζει να ακούει. Η τρίτη κλείνει το handle. Μόλις πάρεις το handle, μπορείς πάλι να το περάσεις στο ManualResetEvent και να κάνεις Wait.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  22-12-2004, 14:29 729 σε απάντηση της 719

    Sleep [S] Re: Shell & Process

    Thanks guys, ελπίζω με αυτά να καταφέρω να περάσω την γιορτή μου μακριά από το πληκτρολόγιο. Αν κάνει ξανά συνάντηση η "κοινότητα" των admins κερνάω μπύρες Smile
    The people of the straight land have really got it made, a warm friendly sleep from the craddle to the grave
  •  22-12-2004, 17:23 732 σε απάντηση της 722

    Re: Shell & Process

    Και πάνω που τέλειωσα με το source, βρίσκω αυτό http://samples.gotdotnet.com/quickstart/CompactFramework/doc/waitforsingleobject.aspx

    Είναι source σε VB και C# για να κάνεις αυτό που θες. Να τονίσω βεβαίως ότι είναι σχεδόν ίδιο με τον κώδικα που έγραψα, βεβαίως, βεβαίως!

    Πρέπει μόνο να προσέξεις κάποια περίεργα πραγματάκια:
    1. Πρέπει να χρησιμοποιήσεις τη WaitForSingleObject και όχι κάποια κλάση από το System.Threading. Για κάποιο περίεργο λόγο δεν μπλοκάρουν.
    2. ΒΕΒΑΙΩΣΟΥ! ότι το application που πας να ξεκινήσεις δεν τρέχει ήδη. Διαφορετικά η WaitForSingleObject θα γίνει signaled ακόμα και αν δεν έχει κλείσει το πρώτο instance. Αυτό το τελευταίο με παίδεψε αρκετά.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems