Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    26

    [VB.NET] spostare un file alla chiusura di un programma

    come da titolo, è possibile spostare un file dopo che si è chiuso un eseguibile?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Che vuoi dire?

    Con "dopo che si è chiuso un eseguibile" intendi quando non c'è nessun programma in esecuzione che possa farlo ? Così la risposta è scontata ma forse non ho capito ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Concordo con Oregon.

    Traduci, perchè la tua richiesta è incomprensibile.

  4. #4
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539

    credo che intenda una cosa del genere :

    c'è un processo aperto di nome xxx, quando lui lo chiude vorrebbe spostare un detto file (magari scritto dal exe) da un altra parte...

    @file001
    in questo caso dovresti aprire un secondo exe che fa da watchdog process, ovvero controlla periodicamente l'esistenza o meno di detto processo, quando non esiste più fai partire la routine per lo spostamento del file. Tradotto in un help dovresti guardare la classe system.diagnostics.process per monitorare i processi, e la System.IO.File per spostare il file.

    eccoti un esempio di codice :

    codice:
    public class ProcessMonitor
        {
            public delegate void ProcessEventHandler(object sender, ProcessEventArgs e);
    
            public List<Process> ProcessList { get; private set; }
            Timer timer;
            string processName;
            ProcessEventHandler processEventHandler = null;
    
            public int Interval { get { return timer.Interval; } set { timer.Interval = value; } }
    
            public enum ProcessAction { Open, Close}
    
            public ProcessMonitor(string ProcessName, int Interval = 1000, bool StartTimer = true)
            {
                this.processName = ProcessName;
                ProcessList = new List<Process>();
                timer = new Timer();
                timer.Interval = Interval;
                timer.Tick += new EventHandler(t_Tick);
                if (StartTimer) Start();
            }
    
            public event ProcessEventHandler ProcessStateChanged
            {
                add { this.processEventHandler += value; }
                remove { this.processEventHandler -= value; }
            }
    
            void t_Tick(object sender, EventArgs e)
            {
                var pl = Process.GetProcessesByName(this.processName);
                List<Process> processClosedList = new List<Process>();
                ProcessList.ForEach(process =>
                {
                    if (!pl.Select(s => s.Id).Contains(process.Id))
                    {
                        processClosedList.Add(process);
                    };
                });
                pl.ToList().ForEach(p =>
                {
                    if (!ProcessList.Select(s => s.Id).Contains(p.Id))
                    {
                        ProcessList.Add(p);
                        OnProcessStateChanged(p, ProcessAction.Open);
                    }
                });
                processClosedList.ForEach(process =>
                {
                    ProcessList.Remove(process);
                    OnProcessStateChanged(process, ProcessAction.Close);
                });
            }
    
            protected void OnProcessStateChanged(Process process, ProcessAction Action)
            {
                if (processEventHandler != null)
                {
                    ProcessEventArgs e = new ProcessEventArgs()
                    {
                        Process = process,
                        Action = Action
                    };
                    processEventHandler(this, e);
                }
            }
    
            public void Start()
            {
                this.timer.Start();
            }
    
            public void Stop()
            {
                this.timer.Stop();
            }
    
            public class ProcessEventArgs : EventArgs
            {
                public Process Process {get;set;}
                public ProcessAction Action {get;set;}
            }
        }
    e puoi usarlo creando una nuova istanza di "ProcessMonitor" passando nel costruttore il nome del processo che vuoi monitorare (senza .exe), l'intervallo di tempo nella quale fai il controllo, e un valore che indica se far partire il monitor subito o a mano quando meglio credi, infine aggiungi un handler a .ProcessStateChanged. Nel ProcessMonitor.ProcessEventArgs troverai due proprietà, una (ProcessMonitor.ProcessAction Action) indica se il processo è stato aperto o chiuso, l'altra (Process Process) il processo che lo riguarda.

    ad esempio puoi usarla così :

    codice:
    public partial class Form1 : Form
        {
            ProcessMonitor monitor;
            public Form1()
            {
                InitializeComponent();
                monitor = new ProcessMonitor("notepad",1000,false);
                monitor.ProcessStateChanged += new ProcessMonitor.ProcessEventHandler(monitor_ProcessStateChanged);
                this.Load += new EventHandler(Form1_Load);            
            }
    
            void Form1_Load(object sender, EventArgs e)
            {
                monitor.Start();
            }
    
            void monitor_ProcessStateChanged(object sender, ProcessMonitor.ProcessEventArgs e)
            {
                if (e.Action == ProcessMonitor.ProcessAction.Open)
                {
                    //aperto un nuovo processo
                }
                else
                {
                    //chiuso un processo
                }
                this.dataGridView1.DataSource = null;
                this.dataGridView1.DataSource = monitor.ProcessList;
            }
        }
    EDIT :
    Dimenticavo... la traduzione del codice da c# a vb.net è abbastanza semplice e ti servirà per capire come fare senza avere la pappa pronta sarà un ottimo esercizio vedrai... diversamente prova con i traduttori online

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da U235
    credo che intenda una cosa del genere :
    Bisogna anche essere esperti in chiaroveggenza in questo forum ... ma la sfera di cristallo non l'ho ancora comprata ...

    dovresti aprire un secondo exe
    Ah ... quindi niente Harry Potter ... c'è sempre un exe!
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,539
    Originariamente inviato da oregon
    Bisogna anche essere esperti in chiaroveggenza in questo forum ... ma la sfera di cristallo non l'ho ancora comprata ...



    Ah ... quindi niente Harry Potter ... c'è sempre un exe!
    Io l'ho comprata ma mi sa che è un bidone... credo spari a caso... hai presente gli occhiali a raggi x dei giornali?

    si comunque se la sfera vale il pacchetto di patatine dove l'ho trovata credo sia obbligato a tenere aperto un secondo programma, se no ci vorrebbe il folletto della microsoft che sta nei computer e manualmente sposta i file quando lo paghi per farlo

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da U235
    hai presente gli occhiali a raggi x dei giornali?
    Io stavo per comprarli, ai miei tempi ... ma era un periodo in cui ragionavo con gli ormoni ...

    ci vorrebbe il folletto della microsoft
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Io stavo per comprarli, ai miei tempi ... ma era un periodo in cui ragionavo con gli ormoni ...
    ... bei tempi ... quando il significato di OOP era principalmente Oggetto Orientato alla Patata
    naturalmente coniato in compagnia degli amici alla fine
    di una cena a tema rigorosamente informatico

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.