none
Esecuzione di programmi RRS feed

  • Domanda

  • Salve,

    Sto programmando una console application, per cercare di riprodurre una shell.

    Vorrei far eseguire dei programmi ma, mentre il programma è in esecuzione (nel caso dei programmi che girano in ambiente DOS o dei file batch), continua a chiedermi di inserire un comando e funziona parallelamente al programma e vanno in confilitto con l'input dell'utente.

    Ho provato ad usare System.Threading.Thread.Sleep(60000) ma, avendo un limite di tempo, inizia di nuovo il conflitto.

    Come potrei dire alla mia shell di aspettare fino alla fine dell'esecuzione del programma?

    Ringrazio in anticipo.

    _Emanuele_

    sabato 18 marzo 2017 15:52

Risposte

  • Può darsi che usavi ProcessStartInfo. Puoi continuare a farlo:

        Sub Main()
            Dim psi = New ProcessStartInfo("find.exe")
            psi.Arguments = "/?"
            psi.UseShellExecute = False
    
            Dim calc As New Process()
            calc.StartInfo = psi
            calc.Start()
            calc.WaitForExit()
    
            Console.WriteLine()
            Console.WriteLine("find.exe terminato.")
            Console.ReadKey()
        End Sub


    • Modificato BlueLed domenica 19 marzo 2017 17:35
    • Contrassegnato come risposta _Emanuele_ domenica 19 marzo 2017 17:45
    domenica 19 marzo 2017 17:34

Tutte le risposte

  • Per attendere la fine del programma lanciato con Process, puoi usare il metodo WaitForExit

    Questo esempio lancia la calcolatrice ed attende che l'utente la chiuda:

        Sub Main()
            Dim calc As Process = System.Diagnostics.Process.Start("calc.exe")
            calc.WaitForExit()
            Console.WriteLine("calc.exe terminato.")
            Console.ReadKey()
        End Sub
    


    domenica 19 marzo 2017 12:50
  • Grazie BlueLed,  ora funziona tutto come desideravo

    Solo un'altra domanda: prima le applicazioni console o i file batch mi venivano visualizzati nella stessa finestra del mio programma, ora invece me ne apre una a parte...

    Come potrei fare?

    _Emanuele_

    domenica 19 marzo 2017 16:25
  • Può darsi che usavi ProcessStartInfo. Puoi continuare a farlo:

        Sub Main()
            Dim psi = New ProcessStartInfo("find.exe")
            psi.Arguments = "/?"
            psi.UseShellExecute = False
    
            Dim calc As New Process()
            calc.StartInfo = psi
            calc.Start()
            calc.WaitForExit()
    
            Console.WriteLine()
            Console.WriteLine("find.exe terminato.")
            Console.ReadKey()
        End Sub


    • Modificato BlueLed domenica 19 marzo 2017 17:35
    • Contrassegnato come risposta _Emanuele_ domenica 19 marzo 2017 17:45
    domenica 19 marzo 2017 17:34
  • Ancora una volta grazie BlueLed! Ora tutto funziona alla perfezione.

    Grazie ancora,

    _Emanuele_

    domenica 19 marzo 2017 17:44