Come posso avviare un processo da C #?


Risposte:


220

Come suggerito da Matt Hamilton, l'approccio rapido in cui si ha un controllo limitato sul processo, consiste nell'utilizzare il metodo Start statico nella classe System.Diagnostics.Process ...

using System.Diagnostics;
...
Process.Start("process.exe");

L'alternativa è utilizzare un'istanza della classe Process. Ciò consente un maggiore controllo sul processo, inclusa la pianificazione, il tipo di finestra in cui verrà eseguito e, utilmente per me, la possibilità di attendere il completamento del processo.

using System.Diagnostics;
...
Process process = new Process();
// Configure the process using the StartInfo properties.
process.StartInfo.FileName = "process.exe";
process.StartInfo.Arguments = "-n";
process.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
process.Start();
process.WaitForExit();// Waits here for the process to exit.

Questo metodo consente un controllo molto maggiore di quello che ho menzionato.


ho usato questo metodo per aprire il file .msg utilizzando Outlook ma quando provo ad aprire un altro file .msg, si apre un altro Outlook. c'è un modo per riutilizzare l'attuale processo ed evitare di aprire un'altra prospettiva? stackoverflow.com/questions/28534358/...
user1166085

4
È necessario utilizzare un'istruzione using o eliminare il processo, nonché stackoverflow.com/questions/16957320/…
Hoppe


14

Proprio come dice Matt, usa Process.Start .

Puoi passare un URL o un documento. Saranno avviati dall'applicazione registrata.

Esempio:

Process.Start("Test.Txt");

Ciò avvierà Notepad.exe con Text.Txt caricato.


4
Cosa succede se nessun programma è registrato per questo tipo?
LC

2
@LC Win32Exception(0x80004005) "Nessuna applicazione associata al file specificato per questa operazione"
Yousha Aleayoub

9

Ho usato quanto segue nel mio programma.

Process.Start("http://www.google.com/etc/etc/test.txt")

È un po 'semplice, ma fa il lavoro per me.


1
Se utilizzato con un URL come nell'esempio, ciò ha anche il vantaggio di utilizzare il browser Web predefinito del sistema per aprire l'URL.
Lemonseed,

se uso questo è un server, si aprirà nel browser del server o nel browser del client?
È una trappola il

6
var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "/YourSubDirectory/yourprogram.exe");
Process.Start(new ProcessStartInfo(path));

5

È possibile utilizzare questa sintassi per eseguire qualsiasi applicazione:

System.Diagnostics.Process.Start("Example.exe");

E lo stesso per un URL. Basta scrivere il tuo URL tra questo ().

Esempio:

System.Diagnostics.Process.Start("http://www.google.com");


4
class ProcessStart
{
    static void Main(string[] args)
    {
        Process notePad = new Process();

        notePad.StartInfo.FileName   = "notepad.exe";
        notePad.StartInfo.Arguments = "ProcessStart.cs";

        notePad.Start();
    }
}

3

Dichiaralo

[DllImport("user32")]
private static extern bool SetForegroundWindow(IntPtr hwnd);
[DllImport("user32")]
private static extern bool ShowWindowAsync(IntPtr hwnd, int a);

E inseriscilo nella tua funzione (nota che "checkInstalled" è facoltativo, ma se lo utilizzerai, devi implementarlo)

if (ckeckInstalled("example"))
{
    int count = Process.GetProcessesByName("example").Count();
    if (count < 1)
        Process.Start("example.exe");
    else
    {
        var proc = Process.GetProcessesByName("example").FirstOrDefault();
        if (proc != null && proc.MainWindowHandle != IntPtr.Zero)
        {
            SetForegroundWindow(proc.MainWindowHandle);
            ShowWindowAsync(proc.MainWindowHandle, 3);
        }
    }
}

NOTA: non sono sicuro che funzioni quando sono in esecuzione più di un'istanza di .exe.


2

Includi il using System.Diagnostics;.

E poi chiama questo Process.Start("Paste your URL string here!");

Prova qualcosa del genere:

using System.Web.UI;
using System.Web.UI.WebControls;
using System.Diagnostics;

namespace btnproce
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            string t ="Balotelli";
            Process.Start("http://google.com/search?q=" + t);
        }
    }
}

Si noti che è una pagina ASP.NET di esempio come esempio. Dovresti provare e improvvisare un po '.


2

Per avviare Microsoft Word, ad esempio, utilizzare questo codice:

private void button1_Click(object sender, EventArgs e)
{
    string ProgramName = "winword.exe";
    Process.Start(ProgramName);
}

Per ulteriori spiegazioni, consulta questo link .


0

Se si utilizza su Windows

Process process = new Process();
process.StartInfo.Filename = "Test.txt";
process.Start();

Funziona con .Net Framework ma anche per Net core 3.1 è necessario impostare UseShellExecute su true

Process process = new Process();
process.StartInfo.Filename = "Test.txt";
process.StartInfo.UseShellExecute = true;
process.Start();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.