+ Rispondi al Thread
Pagina 1 di 6 123 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 56

Discussione: Autoclose applicazione a comando

  1. #1
    MD_CORPORATION non è in linea Novello
    Post
    49

    Question Autoclose applicazione a comando

    Ciao a tutti, ho creato una applicazione per catalogare la documentazione tecnica delle macchine di stabilimento.

    L'applicazione viene utilizzata da svariati utenti, l'eseguibile è sul server ed ogni utente ha un collegamento all'eseguibile che utilizza per la ricerca della documentazione.

    Tutto funziona egregiamente bene.

    Essendo un programma in continuo sviluppo con richieste di modifiche/aggiunte ecc ecc... ho necessità di sostituire l'eseguibile spesso e volentieri.

    Qui avviene il problema, in quanto l'eseguibile non può essere sovrascritto fin quando in uso dagli utenti.... Posso ricorrere all'IT del server per "killare" gli users che utilizzano l'eseguibile... ma non è sempre così immediata la cosa.... perchè l'IT è spesso e sovente impegnata su altri fronti.

    Volevo dunque sviluppare una parte di codice del programma che mi permetta tramite una text box che gli utenti utilizzano per accedere come login ... l'immissione di una mia Password per la chiusura dell'applicazione a tutti gli utenti.

    Avevo pensato ad una cosa simile (cosciente del fatto che c'è molto ancora che devo sapere/capire):

    Un timer (che però credo sia appartenente al form di dichiarazione...) una volta avviato ogni 5/10 secondi va in un determinato percorso a leggere un file .txt dove se è presente "1" effettua la chiusura del programma.

    A complicare la cosa, il programma ha molteplici form .... quindi il "timer.tick" deve sempre essere attivo su tutte le form...

    Molto probabilmente il timer non è la soluzione giusta...
    Mi sembra di aver capito che dovrei utilizzare il Multithreading... ma non ne ho mai fatto uso...

    Potete aiutarmi?

    Grazie

  2. #2
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,614
    Blogs
    5
    Ma l'aggiornamento è così scritto da doverlo fare così in ragtime? Non è meglio che l'applicazione si aggiorni subito dopo l'avvio?
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  3. #3
    MD_CORPORATION non è in linea Novello
    Post
    49
    Ciao Antonio.

    In realtà non è un aggiornamento... è una funzione interna al programma che deve ogni 5/10 secondi verificare se io gli sto chiedendo di chiudersi.

    Altrimenti quando voglio sostituire l'eseguibile ed un utente ha lasciato il programma aperto... sono fregato.

  4. #4
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,614
    Blogs
    5
    L'eseguibile è in rete su cartella condivisa non è locale?

    Devi anche pensare che l'eseguibile sia in uso da parte dell'utente, glielo chiudi mentre lavora?
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  5. #5
    L'avatar di _alka_
    _alka_ ora è in linea Very Important Person
    Luogo
    Reggio Emilia
    Post
    1,244
    Quote Originariamente inviato da MD_CORPORATION Visualizza il messaggio
    Altrimenti quando voglio sostituire l'eseguibile ed un utente ha lasciato il programma aperto... sono fregato.
    In realtà, questa problematica riguarda più gli aspetti di comunicazione e organizzazione, che gli aspetti tecnici, anche perché forzare la chiusura di un programma non ti mette al riparo da fregature se, come ti è stato detto, chiudi un'applicazione mentre qualcuno ci lavora.

    Detto questo, molto probabilmente un Timer sarebbe più che sufficiente a gestire la cosa: non vedo perché scomodare il multi-threading per un compito così semplice e soprattutto sporadico (controllerai la presenza del file al max una volta o due al minuto).

    Magari inserisci il Timer nel Form principale: se è verificata la condizione del file, è sufficiente chiudere quel Form per far terminare l'applicazione.

    Io però prima verificherei se ci sono soluzioni migliori ed esporrei soprattutto la reale necessità, cioè il problema vero, anche per capire se la soluzione che stai implementando ha un senso ed è quella migliore.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Altri link...

  6. #6
    MD_CORPORATION non è in linea Novello
    Post
    49
    Dunque:

    L'eseguibile è in rete sul server.... gli utenti accedono utilizzando un semplice collegamento all'eseguibile.

    Quando faccio una modifica al programma tramite Visual Studio e ricompilo.... devo poi prendere l'eseguibile e sostituirlo a quello sul server.

    Ma.... se in uso dall'utente non posso sovrascriverlo.... il problema è che non posso aspettare minuti prima che chiudano il programma ecc ecc... devo sostituirlo e basta. Gli utenti i quali hanno il programma aperto gli si chiuderà davanti a gli occhi. Se proprio voglio mettere una finezza, gli mando un message box senza richiesta di conferma per avvisarli ... e basta.

    Non vi sono operazioni per il quale un'interruzione brusca del programma crei problematiche.

    Per il discorso del timer:

    Sembra semplice.... in realtà il timer che avvio ed abilitito ipotizziamo nel form1 di avvio.....
    parte....
    poi l'utente va sul form2 (dopo che si è chiuso il form1... l'applicazione ha sempre solo 1 form per volta visibile ed attivo).... il mio timer non esiste più.... perchè è stato istanziato in un altro form.

  7. #7
    Luogo
    Lazio
    Post
    1,655
    Blogs
    21
    Quote Originariamente inviato da MD_CORPORATION Visualizza il messaggio
    ...
    Per il discorso del timer:

    Sembra semplice.... in realtà il timer che avvio ed abilitito ipotizziamo nel form1 di avvio.....
    parte....
    poi l'utente va sul form2 (dopo che si è chiuso il form1... l'applicazione ha sempre solo 1 form per volta visibile ed attivo).... il mio timer non esiste più.... perchè è stato istanziato in un altro form.
    Ciao,
    prova a cercare in rete :
    .NET Form Inheritance

    HTH
    Ciao sspintux
    ------------------------------------------------------------

    O Santo Protettore dell'informatico quadratico medio, se puoi allontana da me questo cetriolo amaro!
    Azz! ... questo è un grande porck-around; potremmo addirittura farlo passare per una funzionalità avanzata

  8. #8
    MD_CORPORATION non è in linea Novello
    Post
    49
    Quote Originariamente inviato da sspintux Visualizza il messaggio
    Ciao,
    prova a cercare in rete :
    .NET Form Inheritance

    HTH
    Grazie del consiglio... ho dato uno sguardo... calcola che ho 12 form... significherebbe dover ereditare gli attributi ad ogni apertura di form corretto?

    Il problema a parer mio è che il codice che creo per la lettura e verifica del comando di chiusura del programma non voglio doverlo scrivere su ogni form.. ma lo vorrei racchiudere in una funzione che lavora in maniera parallela chiamata al Tick del timer ereditato dal form1 (principale dal quale ho dato lo start al timer)

    Poi oltretutto... con il close del form il timer non viene "distrutto"? O meglio... esiste come oggetto ma il suo conteggio ecc... sono nothing al momento del close ...?
    Ultima modifica di MD_CORPORATION; 14-05-2020 09:51 

  9. #9
    MD_CORPORATION non è in linea Novello
    Post
    49
    Ho provato... sembra che funzioni effettivamente... il conteggio rimane attivo sembra...

    Faccio 2 prove ed aggiorno

  10. #10
    L'avatar di _alka_
    _alka_ ora è in linea Very Important Person
    Luogo
    Reggio Emilia
    Post
    1,244
    Quote Originariamente inviato da MD_CORPORATION Visualizza il messaggio
    Sembra semplice.... in realtà il timer che avvio ed abilitito ipotizziamo nel form1 di avvio.....
    parte....
    poi l'utente va sul form2 (dopo che si è chiuso il form1... l'applicazione ha sempre solo 1 form per volta visibile ed attivo).... il mio timer non esiste più.... perchè è stato istanziato in un altro form.
    In genere, non è un bel pattern avere un'applicazione priva di un Form principale, o che apre e chiude diversi Form togliendo quelli di provenienza.

    Potresti anche prevedere una alternativa: utilizzare un'applicazione ad hoc esterna che gira in background e si occupa di "killare" il processo quando rileva le condizioni specifiche.

    In tutti quanti i casi, mi sembra un accrocchio, ma questo è dovuto al fatto che hai "deviato" da tutti i possibili standard: a livello di interfaccia e architettura dell'applicazione, a livello di installazione, a livello di politica di aggiornamento, ecc. quindi è normale e auspicabile che, una volta risolto un problema fortunosamente, se ne presenti un altro inatteso.

    Io ne approfitterei per rivedere le politiche di aggiornamento, magari usando tecnologie come ClickOnce, fare un publish dell'applicazione, gestire l'upgrade delle versioni in modo pulito, non scaricare il programma dalla rete, non forzare la chiusura dei programmi, non scambiare delle finestre, ecc.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Homepage | Blog | Delphi Podcast | Altri link...

+ Rispondi al Thread
Pagina 1 di 6 123 ... ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi