¿Cómo inicio un proceso desde C #?

Respuestas:

220

Según lo sugerido por Matt Hamilton, el enfoque rápido en el que tiene un control limitado sobre el proceso es utilizar el método de inicio estático en la clase System.Diagnostics.Process ...

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

La alternativa es usar una instancia de la clase Process. Esto permite mucho más control sobre el proceso, incluida la programación, el tipo de ventana en la que se ejecutará y, lo más útil para mí, la capacidad de esperar a que termine el proceso.

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.

Este método permite mucho más control del que he mencionado.

Andy McCluggage
fuente
Utilicé este método para abrir un archivo .msg usando Outlook, pero cuando trato de abrir otro archivo .msg, abrió otro Outlook. ¿Hay alguna forma de reutilizar el proceso actual y evitar abrir otra perspectiva? stackoverflow.com/questions/28534358/…
user1166085
44
Debe usar una declaración de uso o desechar el proceso también stackoverflow.com/questions/16957320/…
Hoppe
25

Puede usar el método System.Diagnostics.Process.Start para iniciar un proceso. Incluso puede pasar una URL como una cadena y se iniciará el navegador predeterminado.

Matt Hamilton
fuente
14

Tal como Matt dice, usa Process.Start .

Puede pasar una URL o un documento. Serán iniciados por la aplicación registrada.

Ejemplo:

Process.Start("Test.Txt");

Esto iniciará Notepad.exe con Text.Txt cargado.

GvS
fuente
44
¿Qué sucede si no hay un programa registrado para este tipo?
LC
2
@LC Win32Exception(0x80004005) "Ninguna aplicación está asociada con el archivo especificado para esta operación"
Yousha Aleayoub
9

Usé lo siguiente en mi propio programa.

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

Es un poco básico, pero hace el trabajo por mí.

Blackvault
fuente
1
Cuando se usa con una URL como lo hace su ejemplo, esto también tiene la ventaja de usar el navegador web predeterminado del sistema para abrir la URL.
Lemonseed
si uso este es un servidor, ¿se abrirá en el navegador del servidor o en el navegador del cliente?
Es una trampa
6
var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "/YourSubDirectory/yourprogram.exe");
Process.Start(new ProcessStartInfo(path));
SimperT
fuente
5

Puede usar esta sintaxis para ejecutar cualquier aplicación:

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

Y el mismo para una URL. Simplemente escriba su URL entre esto ().

Ejemplo:

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

Use la clase de proceso . La documentación de MSDN tiene un ejemplo de cómo usarla.

Franci Penov
fuente
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
fuente
3

Declarar esto

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

Y ponga esto dentro de su función (tenga en cuenta que "checkInstalled" es opcional, pero si lo va a usar, debe 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: No estoy seguro de si esto funciona cuando se está ejecutando más de una instancia de .exe.

Carla jesus
fuente
2

Incluye el using System.Diagnostics;.

Y luego llama a esto Process.Start("Paste your URL string here!");

Intenta algo como esto:

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

Tenga en cuenta que es un ejemplo de página ASP.NET como ejemplo. Deberías probar e improvisar un poco.

AVIK DUTTA
fuente
2

Para iniciar Microsoft Word, por ejemplo, use este código:

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

Para obtener más explicaciones, consulte este enlace .

usuario4340666
fuente
0

Si se usa en Windows

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

Funciona para .Net Framework pero para Net core 3.1 también necesita establecer UseShellExecute en true

Process process = new Process();
process.StartInfo.Filename = "Test.txt";
process.StartInfo.UseShellExecute = true;
process.Start();
Luna encerada
fuente