nontasg Δημοσ. 12 Ιουλίου 2006 Δημοσ. 12 Ιουλίου 2006 Να συμπληρώσω απλώς πως δεν υπάρχει πιο σπαστικό πράγμα από το να εγκαθιστάς ένα πρόγραμμα και να σου ζητά επανεκκίνηση... Ε αυτό εννοείται,αλλά τι να κάνουμε???:-| :-|
accipio Δημοσ. 12 Ιουλίου 2006 Δημοσ. 12 Ιουλίου 2006 Κάπου διάβαζα, αν δεν κάνω λάθος, ότι με τα Vista θα ελαχιστοποιηθεί η ανάγκη των επανεκκινήσεων. Για να δούμε.
nontasg Δημοσ. 12 Ιουλίου 2006 Δημοσ. 12 Ιουλίου 2006 Κάπου διάβαζα, αν δεν κάνω λάθος, ότι με τα Vista θα ελαχιστοποιηθεί η ανάγκη των επανεκκινήσεων. Για να δούμε. Ναι κι εγώ το έχω ακούσει αυτό....Μακάρι να είναι έτσι...
pusher Δημοσ. 14 Ιουλίου 2006 Μέλος Δημοσ. 14 Ιουλίου 2006 Και κάτι που δεν έθιξα. Κατά την απεγκατάσταση προγραμμάτων και πάλι επανεκκίνηση; Και μιλάω για τα προγράμματα που μετά το πέρας της απεγκατάστασής τους δε ζητούν από μόνα τους επανεκκίνηση. Και μ' αυτά που ζητούν τι γίνεται αν επιλέξουμε να κάνουμε επανεκκίνηση μόνοι μας αργότερα; Μέχρι την επανεκκίνηση απαγορεύεται η απεγκατάσταση ή η εγκατάσταση άλλου προγράμματος;
alkisg Δημοσ. 14 Ιουλίου 2006 Δημοσ. 14 Ιουλίου 2006 Όλα εξαρτώνται από αυτόν που έκανε τον installer. Υπάρχει η δυνατότητα να φτιάξω ένα πρόγραμμα εγκατάστασης (ή απεγκατάστασης, παρόμοιο είναι) με τον nsis και ενώ χρειάζεται επανεκκίνηση να μην ζητήσω. Αν πρόκειται για απλά προγράμματα που ουσιαστικά απλά κάνουν extract κάποια αρχεία στο C:\Program files\[Application] και βάζουν και shortcuts στο start menu και στο desktop, δε χρειάζεται (σχεδόν) ποτέ επανεκκίνηση. Αν πρόκειται για πιο πολύπλοκα, όπως dll, common program files, updates, drivers, services μερικές φορές χρειάζεται επανεκκίνηση. Ευτυχώς στα XP με το ενσωματωμένο system file protection το φαινόμενο dll hell (ασύμβατες εκδόσεις dll που πιθανόν να κρέμαγαν και το σύστημα) έχει ελαχιστοποιηθεί. Οι installers που φτιάχνονται με την τεχνολογία msi της Microsoft είναι λίγο πιο αξιόπιστοι επειδή η υπηρεσία του installer φροντίζει να μη γίνονται πολλά ... περίργα. Οι υπόλοιποι (nsis, innosetup κτλ) εξαρτώνται από αυτόν που γράφει το αντίστοιχο script. Επομένως, όταν ένα πρόγραμμα ζητάει επανεκκίνηση (είτε στην εγκατάσταση είτε στην απεγκατάσταση), καλύτερα να κάνουμε επανεκκίνηση.
8086 Δημοσ. 14 Ιουλίου 2006 Δημοσ. 14 Ιουλίου 2006 Ωραίος ο alkisg...Πολύ κατατοπιστική η απάντησή σου....:wink:
Eusebius Δημοσ. 14 Ιουλίου 2006 Δημοσ. 14 Ιουλίου 2006 Κάπου διάβαζα, αν δεν κάνω λάθος, ότι με τα Vista θα ελαχιστοποιηθεί η ανάγκη των επανεκκινήσεων. Για να δούμε. Έχω μια υποψία ότι εξαρτάται και από τα ίδια τα προγράμματα. Π.χ., τα: * PeerGuardian 2 και * TrueCrypt ενω εγκαθιστούν και τα δύο οδηγούς, δεν θέλουν επανεκκίνηση. Μόνο και μόνο γι' αυτό, μου είχαν κάνει πολύ καλή εντύπωση από την πρώτη στιγμή. Τόσο δύσκολο είναι αυτό που κάνουν αυτά τα δύο;
alkisg Δημοσ. 14 Ιουλίου 2006 Δημοσ. 14 Ιουλίου 2006 Τόσο δύσκολο είναι αυτό που κάνουν αυτά τα δύο; Δύσκολη ερώτηση! Ξέρω ότι υπάρχουν device drivers που εγκαθίστανται χωρίς επανεκκίνηση, αλλά δεν ξέρω τις συγκεκριμένες συναρτήσεις του API των Windows που κάνουν αυτή τη διαφορά, μπορεί π.χ. οι user mode drivers να μη χρειάζονται επανεκκίνηση ενώ οι kernel mode να χρειάζονται... Το ίδιο δε γίνεται και με κάποιους device drivers για hardware; Π.χ. όταν βάζουμε drivers για κάρτα γραφικών προφανώς χρειάζεται επανεκκίνηση (το GUI των Windows αντίθετα με το Linux τρέχει σε ring 0), ενώ π.χ. για κάρτα ήχου ή κάποια συσκευή USB μερικές φορές δε χρειάζεται... Για σίγουρη απάντηση πρέπει να μελετήσουμε το DDK των Windows! http://www.microsoft.com/whdc/devtools/ddk/default.mspx Πάντως ξέρω ότι υπάρχουν περιπτώσεις που αν οι προγραμματιστές είχαν λίγο περισσότερη "όρεξη" θα μπορούσαν να καλέσουν κάποιες συναρτήσεις και να γλυτώσουν την επανεκκίνηση, αλλά προτιμούν την εύκολη λύση... edit: Στα Vista αν θυμάμαι καλά αλλάζει το framework για τους drivers, και επίσης και η διαχείριση των dll γίνεται διαφορετικά, οπότε γι' αυτό θα υπάρχουν λιγότερες επανεκκινήσεις... Αντίστοιχη (αν και μικρότερη) βελτίωση είχε γίνει και από τα 9x στα 2000...
Eusebius Δημοσ. 15 Ιουλίου 2006 Δημοσ. 15 Ιουλίου 2006 Ευχαριστώ για την απάντηση, alkisg Τώρα που είπες για τα dll στα Vista, νά κι άλλο ένα (αντι)παράδειγμα. Το 7-Zip (όπως κι άλλα παρόμοια συμπιεστικά, υποθέτω), εξαιτίας ενός dll, ζητάει επανεκκίνηση σε κάθε αναβάθμιση. Επειδή παρακολουθώ από κοντά τις εκδόσεις του, έψαξα να βρω έναν τρόπο να γλιτώσω τον μπελά. Είναι απλό: τερματίζεις και ξαναξεκινάς το explorer.exe, οπότε το dll ελευθερώνεται. Γι' αυτό λέω: άμα εγώ ο άσχετος μπορώ να γλιτώσω την επανεκκίνηση με μια τέτοια μαϊμουδιά, θα πρέπει να είναι δυνατόν και σε επίπεδο κώδικα.
alkisg Δημοσ. 15 Ιουλίου 2006 Δημοσ. 15 Ιουλίου 2006 Ναι αλλά φαντάζεσαι την ώρα που έκανες απεγκατάσταση το 7-zip να σου έκλεινε ξαφνικά όλα τα παράθυρα Explorer, να χανόταν η taskbar και μετά να επανερχόταν; Δε θα ... τρόμαζες; Πιο λογικό δε θα σου φαινόταν απλά να ζητάει επανεκκίνηση; Αν και οι Installers που φτιάχνονται με τον "πολλά βαρύ" InstallShield Wizard βγάζουν μήνυμα "τα τάδε παράθυρα/προγράμματα πρέπει να κλείσουν για να συνεχιστεί η (απ)εγκατάσταση"... Το κακό είναι ότι δεν έχουν όλες οι εταιρίες φράγκα να αγοράσουν τον installshield, ή δεν θέλουν να τον χρησιμοποιήσουν επειδή φτιάχνει τεράστια αρχεία εγκατάστασης... Και επίσης ελάχιστες εταιρίες ασχολούνται να φτιάξουν καλό installer, προτιμούν τις εύκολες λύσεις... Δηλαδή μην περιμένεις από τους προγραμματιστές του 7-zip να αφιερώσουν μια βδομάδα για να κάνουν installer της προκοπής! Πάντως η συζήτηση πλέον είναι ... φιλοσοφική! Το ότι σε πολλούς installers "σπαταλούνται" επανεκκινήσεις είναι γεγονός, αλλά αν δεν αλλάξουν τον κώδικά τους δεν μπορούμε να κάνουμε κάτι γι' αυτό! :) Εκτός αν έχεις όρεξη να φτιάξεις τον νέο 7-zip installer που τα κάνει όλα και συμφέρει! :) edit: επίσης, τεχνικά, δεν είναι σωστό να σταματάς με το ζόρι τον explorer, ούτε οποιαδήποτε άλλη διεργασία... ότι ανοιχτά αρχεία έχει κλείνονται βάναυσα και οι buffers δε γράφονται στον δίσκο. ΟΚ, συνήθως αυτό δεν επηρεάζει και πολύ, αλλά έστω και μια περίπτωση να υπάρχει για πρόβλημα, δεν μπορείς να το βάλεις σε κώδικα installer.
Eusebius Δημοσ. 15 Ιουλίου 2006 Δημοσ. 15 Ιουλίου 2006 Ναι αλλά φαντάζεσαι την ώρα που έκανες απεγκατάσταση το 7-zip να σου έκλεινε ξαφνικά όλα τα παράθυρα Explorer, να χανόταν η taskbar και μετά να επανερχόταν; Δε θα ... τρόμαζες; Πιο λογικό δε θα σου φαινόταν απλά να ζητάει επανεκκίνηση; Όχι ρε συ! Δεν εννοούσα να το κάνουν με την ίδια μαϊμουδιά. Απλά, σκέφτομαι, άμα γίνεται μαϊμουδίστικα, πρέπει να γίνεται και κάπως με ομαλό τρόπο να ελευθερώσεις το dll. Πάντως η συζήτηση πλέον είναι ... φιλοσοφική! Το ότι σε πολλούς installers "σπαταλούνται" επανεκκινήσεις είναι γεγονός, αλλά αν δεν αλλάξουν τον κώδικά τους δεν μπορούμε να κάνουμε κάτι γι' αυτό! Συμφωνώ. Και είναι και θέμα προσφοράς και ζήτησης, και προτεραιοτήτων. Ο πολύς ο κόσμος δεν το θεωρεί ζήτημα. Μπορεί να τους ενοχλεί λιγάκι, αλλά δεν έχουν δει και τίποτε άλλο που να μη ζητάει συνέχεια επανεκκινήσεις και θεωρούν ότι έτσι είναι το φυσιολογικό. Οπότε και οι προγραμματιστές δεν ασχολούνται. Φαντάζομαι ότι οι λίγοι που ασχολούνται είναι τίποτα μερακλήδες που για κάποιο λόγο τους ενοχλεί ιδιαίτερα το θέμα του reboot, και το παίρνουν πατριωτικά να φτιάξουν έναν «rebootless» εγκαταστάτη.
alkisg Δημοσ. 15 Ιουλίου 2006 Δημοσ. 15 Ιουλίου 2006 Case study: Θέλουμε να απεγκαταστήσουμε το 7-zip. Τρέχουμε τον uninstaller. Αυτός καλεί την DeleteFile και διαγράφει όλα τα αρχεία που έφτιαξε ένα ένα. Όμως ένα από αυτά (π.χ. το 7-zip.dll) χρησιμοποιείται, και έτσι δεν μπορεί να το διαγράψει. Παρένθεση - εξήγηση γιατί χρησιμοποιείται και από ποιον. Ο explorer έχει τη δυνατότητα να διαχειρίζεται τα συμπιεσμένα αρχεία σαν φακέλους. Έτσι, στο αριστερό παραθυράκι (folders) μας δείχνει π.χ. το αρχείο mycompressedfile.7z σαν φάκελο, και αν το ανοίξουμε μας δείχνει τα περιεχόμενά του. Αυτό (λέγεται shell extension) προϋποθέτει ότι ο explorer καλεί το 7-zip.dll για να διαβάσει τα περιεχόμενα του συμπιεσμένου αρχείου. Και για να μην ανοίγει προγραμματιστικά συνέχεια το dll και αργεί, το κρατάει συνέχεια ανοιχτό ώστε να διαβάζει τα συμπιεσμένα αρχεία πιο γρήγορα. Συνεχίζουμε με τον uninstaller. Αφού η DeleteFile απέτυχε, ο uninstaller μπορεί π.χ. να κάνει ένα από τα παρακάτω: 1) Να καλέσει τη MoveFileEx με παράμετρο MOVEFILE_DELAY_UNTIL_REBOOT, ώστε να σβηστεί στην επόμενη επανεκκίνηση των Windows, αφού κατά την εκκίνηση δεν θα το χρησιμοποιεί κανένας. Ο προγραμματιστής που φτιάχνει τον uninstaller ξεμπέρδεψε γρήγορα, θύμωσε όμως τον Eusebius αφού ζητάει επανεκκίνηση, και μάλιστα πλέον δεν τρέχει σε 9x, αφού η MoveFileEx υποστηρίζεται από 2000 και πάνω. Αν ο προγραμματιστής έχει πολύ όρεξη, καλεί δυναμικά την αντίστοιχη LoadLibrary για τη MoveFileEx ώστε να μην του λέει "Entry point not found on dll τάδε" στα 98, και στα 98 χρησιμοποιεί εναλλακτικά το [rename] section του αρχείου WININIT.INI. Η παραπάνω μπερδεμένη διαδικασία είναι η εύκολη μέθοδος. 2) Η δύσκολη μέθοδος, περιληπτικά και στο περίπου επειδή είναι μεγάλη! Θα πρέπει να καλέσει άλλες συναρτήσεις επαναληπτικά για να βρει το handle του εκτελέσιμου που έχει ανοιχτό το αρχείο 7-zip.dll, μετά να καλέσει άλλη συνάρτηση για να πάρει το όνομα του αρχείου (explorer.exe) ή τον αντίστοιχο τίτλο του παραθύρου, και να τον εμφανίσει στο χρήστη ώστε ο ΧΡΗΣΤΗΣ να κλείσει το αντίστοιχο παράθυρο. Δεν είναι "ηθικό" ένα πρόγραμμα να κλείνει κάποιο άλλο χωρίς να ρωτάει το χρήστη. Πριν το κάνει αυτό, θα πρέπει να ελέγξει ότι το πρόγραμμα που χρησιμοποιεί το dll είναι κάτι "χειροπιαστό" από πλευράς χρήστη, και όχι π.χ. ένα service ενθυλακωμένο μέσα στο svchost.exe που ο χρήστης δεν μπορεί να το δει και να το κλείσει. Αν πρόκειται για service, πιθανώς να μπορεί να το κάνει pause και μετά restart, αν δεν είναι κάτι vital για τη λειτουργία του συστήματος. Και πάλι εδώ θέλει διαφορετικό χειρισμό στα 2000/XP από τα 9x. Τελικά και αφού μπει σ' αυτόν τον κόπο, αν δεν καταφέρει να κλείσει το πρόγραμμα που χρησιμοποιεί το αρχείο, θα πρέπει να κάνει fallback στην πρώτη μέθοδο και να καταφύγει στην κλασσική επανεκκίνηση... ...και όλα αυτά μόνο για ένα αρχείο που χρησιμοποιείται, υπάρχουν κι άλλα προβλήματα στους uninstallers, όπως registry entries, explorer namespaces, το να χρησιμοποιεί κάποιο client πρόγραμμα μια υπηρεσία που παρέχει το πρόγραμμα που γίνεται uninstalled κτλ κτλ Ακριβώς επειδή τα πράγματα είναι λίγο φρικιαστικά γι' αυτούς που φτιάχνουν installers, η MS έβγαλε την τεχνολογία MSI για να τους διευκολύνει, ώστε τέτοια θέματα να τα αναλαμβάνει η υπηρεσία και όχι ο uninstaller... Με δυο λόγια, δε βγάζεις εύκολα άκρη!
Eusebius Δημοσ. 17 Ιουλίου 2006 Δημοσ. 17 Ιουλίου 2006 Ευχαριστώ για την ανάλυση, alkisg Τώρα καταλαβαίνω λίγο καλύτερα ΥΓ Θυμήθηκα ένα σχετικό προγραμματάκι που είχα βρει παλιότερα: WhyReboot. Κάτω-κάτω στη σελίδα έχει ενδιαφέροντα λινκ.
pusher Δημοσ. 19 Ιουλίου 2006 Μέλος Δημοσ. 19 Ιουλίου 2006 Καλά όλα αυτά. Αλλά ισχύουν τα ίδια αν το πρόγραμμα που πρόκειται να εγκαταστήσουμε/απεγκατηστήσουμε πρόκειται να εγκαταστθεί σε/απεγκατασταθεί από ένα δίσκο στον οποίο δεν είναι περασμένο το λειτουργικό (π.χ. εξωτερικό, δεύτερο εσωτερικό ή οτιδήποτε...);
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.