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


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é.


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


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é.


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.


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

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


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

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.


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.


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 .


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();
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.