Comment démarrer un processus à partir de C #?

155

Comment démarrer un processus, tel que lancer une URL lorsque l'utilisateur clique sur un bouton?

Peter Mortensen
la source

Réponses:

220

Comme suggéré par Matt Hamilton, l'approche rapide où vous avez un contrôle limité sur le processus consiste à utiliser la méthode statique Start sur la classe System.Diagnostics.Process ...

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

L'alternative consiste à utiliser une instance de la classe Process. Cela permet beaucoup plus de contrôle sur le processus, y compris la planification, le type de fenêtre dans laquelle il s'exécutera et, surtout pour moi, la possibilité d'attendre la fin du processus.

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.

Cette méthode permet beaucoup plus de contrôle que ce que j'ai mentionné.

Andy McCluggage
la source
J'ai utilisé cette méthode pour ouvrir le fichier .msg en utilisant Outlook, mais lorsque j'essaie d'ouvrir un autre fichier .msg, cela a ouvert une autre perspective. existe-t-il un moyen de réutiliser le processus actuel et d'éviter d'ouvrir une autre perspective? stackoverflow.com/questions/28534358/…
user1166085
4
Vous devez utiliser une instruction using ou supprimer le processus également stackoverflow.com/questions/16957320/…
Hoppe
25

Vous pouvez utiliser la méthode System.Diagnostics.Process.Start pour démarrer un processus. Vous pouvez même passer une URL sous forme de chaîne et cela lancera le navigateur par défaut.

Matt Hamilton
la source
14

Tout comme Matt le dit, utilisez Process. .

Vous pouvez transmettre une URL ou un document. Ils seront lancés par l'application enregistrée.

Exemple:

Process.Start("Test.Txt");

Cela démarrera Notepad.exe avec Text.Txt chargé.

GvS
la source
4
Que se passe-t-il si aucun programme n'est enregistré pour ce type?
LC
2
@LC Win32Exception(0x80004005) "Aucune application n'est associée au fichier spécifié pour cette opération"
Yousha Aleayoub
9

J'ai utilisé ce qui suit dans mon propre programme.

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

C'est un peu basique, mais ça fait le travail pour moi.

Blackvault
la source
1
Lorsqu'il est utilisé avec une URL, comme le fait votre exemple, cela présente également l'avantage d'utiliser le navigateur Web par défaut du système pour ouvrir l'URL.
Lemonseed
si j'utilise c'est un serveur, s'ouvrira-t-il dans le navigateur du serveur ou le navigateur client?
C'est un piège le
6
var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "/YourSubDirectory/yourprogram.exe");
Process.Start(new ProcessStartInfo(path));
SimperT
la source
5

Vous pouvez utiliser cette syntaxe pour exécuter n'importe quelle application:

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

Et le même pour une URL. Écrivez simplement votre URL entre cela ().

Exemple:

System.Diagnostics.Process.Start("http://www.google.com");
alireza amini
la source
4

Utilisez la classe Process . La documentation MSDN a un exemple de son utilisation.

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

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

        notePad.Start();
    }
}
Ravi Kumar GN
la source
3

Déclarez ceci

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

Et mettez ceci dans votre fonction (notez que "checkInstalled" est facultatif, mais si vous l'utilisez, vous devez l'implémenter)

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);
        }
    }
}

REMARQUE: je ne suis pas sûr que cela fonctionne lorsque plusieurs instances du .exe sont en cours d'exécution.

Carla Jesus
la source
2

Inclure le using System.Diagnostics; .

Et puis appelle ça Process.Start("Paste your URL string here!");

Essayez quelque chose comme ceci:

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);
        }
    }
}

Veuillez noter qu'il s'agit d'un exemple de page ASP.NET. Vous devriez essayer et improviser un peu.

AVIK DUTTA
la source
2

Pour démarrer Microsoft Word par exemple, utilisez ce code:

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

Pour plus d'explications, consultez ce lien .

user4340666
la source
0

Si vous utilisez Windows

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

Fonctionne pour .Net Framework, mais pour Net core 3.1, vous devez également définir UseShellExecute sur true

Process process = new Process();
process.StartInfo.Filename = "Test.txt";
process.StartInfo.UseShellExecute = true;
process.Start();
Épilation à la lune
la source