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

 

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

Detect what Process used, when a FontFile is open?

Îåêßíçóå áðü ôï ìÝëïò Antonis.M. Τελευταία δημοσίευση από το μέλος Antonis.M στις 06-12-2008, 13:51. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  05-12-2008, 14:44 46728

    Detect what Process used, when a FontFile is open?

    Γεια σας,
    έχοντας κάνει load στο σύστημα των windows ένα FontResource (e.g. FileName.ttf), το οποίο μπορεί να χρησιμοποιηθεί από ένα οποιοδήποτε Application, υπάρχει το εξής θέμα:

    Ενώ κάνοντας unload το Font από το σύστημα (RemoveFontResource), σε πολλές περιπτώσεις για να γίνει delete το φυσικό αρχείο από το δίσκο, πρέπει να γίνει close και το Application από το οποίο ξεκίνησε η διαδικασία. Στη περίπτωση αυτή, πως μπορώ να μάθω το process που χρησιμοποιεί το συγκεκριμένο αρχείο ttf, ώστε να κάνω Kill το process και μετά να διαγραφεί το αρχείο.

    Σημείωση: Χρησιμοποιώντας εργαλεία όπως, Handle.exe ή WhoLockMe.exe, δεν ανιχνεύεται κανένα process που να δεσμεύει το αρχείο TTF.

    Καμιά ιδέα??

    Ευχαριστώ.

  •  05-12-2008, 16:10 46729 σε απάντηση της 46728

    Απ: Detect what Process used, when a FontFile is open?

    Μετέφερα εδώ την ερώτηση καθώς δεν είχε καμμία απολύτως σχέση με Enterprise Services, COM+ ή WCF. Η ερώτηση αφορά τη διαχείριση των fonts, ένα θέμα καθαρά unmanaged desktop development.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  05-12-2008, 18:49 46731 σε απάντηση της 46728

    Απ: Detect what Process used, when a FontFile is open?

    Το documentation της RemoveFontResource περιγράφει ότι θα πρέπει να στείλεις και ένα μήνυμα WM_FONTCHANGED όταν αφαιρείς το font. Είναι λίγο .... αγενές ... να σκοτώσεις κάποια άσχετη εφαρμογή του χρήστη επειδή δεν έστειλες το συγκεκριμένο μήνυμα. Οι χρήστες σου ΔΕΝ θα χαρούν.

    Τα Handle.exe, WhoLockMe.exe δεν βρίσκουν κανένα process που να δεσμεύει το αρχείο, απλά γιατί .... κανένα process δεν δεσμεύει το αρχείο. Είναι το ίδιο το λειτουργικό το οποίο δεσμεύει το αρχείο όσο κάποια άλλη εφαρμογή χρησιμοποιεί το font μέσω της CreateFont και δεν το αποδεσμεύει με την DeleteObject. Είναι περίεργο πάντως μία άσχετη εφαρμογή να ξέρει ποιό είναι και πως λέγεται το δικό σου font. Υποψιάζομαι ότι κάποια από τις εφαρμογές που έχεις φτιάξει εσύ είναι αυτή που κλειδώνει το font, εκτός και αν το χρησιμοποιείς σε κάποια εφαρμογή όπως το Word.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  06-12-2008, 13:51 46744 σε απάντηση της 46731

    Απ: Detect what Process used, when a FontFile is open?

    Αγαπητέ Παναγιώτη ευχαριστώ πολύ για την απάντηση,

    συμφωνώ είναι λίγο αγενές το σκότωμα κάποιας εφαρμογής το καταλαβαίνω. Είμαι σε μια διαδικασία διερεύνησης για τη διασφάλιση των fonts.

    Μετά την RemoveFontResource όντος στέλνω το μήνυμα SendMessage M_FONTCHANGE κ.λ.π. αλλά τι γίνεται, πριν απ' αυτό το λειτουργικό έχει πάρει το μήνυμα ότι έχει εγκατασταθεί ένα νέο Font, ο χρήστης μπορεί να το χρησιμοποιήσει σε οποιαδήποτε εφαρμογή και το κάνει, (π.χ. word, Photoshop, FireWorks, κ.λ.π.) την ώρα που κάνω remove το font, όπως ανέφερα παραπάνω, όσο ο χρήστης έχει ακόμη ανοιχτή μια απο τις εφαρμογές που χρησιμοποιούσε το Font, εγώ δεν μπορώ να κάνω delete το αρχείο από το δίσκο. Όταν κλείσει η εφαρμογή που χρησιμοποιούσε το Font τότε το αρχείο σβήνεται.

    Thread.Sleep(1000)
    Do Until fExists = False
    Try
    'If fi.Exists Then fi.Delete()
    If fi.Exists Then Kill(FileName)
    fExists =
    False
    Catch ex As Exception
    Thread.Sleep(2000)
    '****************
    End Try
    Loop

    Τα Fonts που εγκαθιστώ τα κρατάω binary σε ένα resource file, από εκεί τα ρίχνω στο δίσκο για να χρησιμοποιήσω την AddFontResource και μετά την RemoveFontResource. Υπάρχει τρόπος να μην τα κατεβάζω στο δίσκο, αλλά να εγκαθιστώ τα Fonts απευθείας από ένα stream?

    Ευχαριστώ,

    Αντώνης Μ.

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems