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


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


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.


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


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

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


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

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.


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.


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 .


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();
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.