Jak rozpocząć proces w języku C #?

155

Jak rozpocząć proces, taki jak uruchomienie adresu URL, gdy użytkownik kliknie przycisk?

Peter Mortensen
źródło

Odpowiedzi:

220

Jak sugeruje Matt Hamilton, szybkim podejściem, w którym masz ograniczoną kontrolę nad procesem, jest użycie statycznej metody Start w klasie System.Diagnostics.Process ...

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

Alternatywą jest użycie instancji klasy Process. Pozwala to na znacznie większą kontrolę nad procesem, w tym nad harmonogramem, rodzajem okna, w którym będzie działać i, co jest dla mnie najbardziej przydatne, możliwością czekania na zakończenie procesu.

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.

Ta metoda zapewnia znacznie większą kontrolę, niż wspomniałem.

Andy McCluggage
źródło
Użyłem tej metody do otwarcia pliku .msg za pomocą programu Outlook, ale kiedy próbuję otworzyć inny plik .msg, otworzyło się inne okno. czy jest jakiś sposób na ponowne wykorzystanie obecnego procesu i uniknięcie otwierania innej perspektywy? stackoverflow.com/questions/28534358/…
user1166085
4
Powinieneś użyć instrukcji using lub pozbyć się procesu stackoverflow.com/questions/16957320/ ...
Hoppe
25

Aby rozpocząć proces, można użyć metody System.Diagnostics.Process.Start . Możesz nawet przekazać adres URL jako ciąg znaków, który uruchomi domyślną przeglądarkę.

Matt Hamilton
źródło
14

Tak jak mówi Matt, użyj Process.Start .

Możesz podać adres URL lub dokument. Zostaną uruchomione przez zarejestrowaną aplikację.

Przykład:

Process.Start("Test.Txt");

Spowoduje to uruchomienie Notepad.exe z załadowanym Text.Txt.

GvS
źródło
4
Co się stanie, jeśli żaden program nie jest zarejestrowany dla tego typu?
LC
2
@LC Win32Exception(0x80004005) „Żadna aplikacja nie jest skojarzona z określonym plikiem dla tej operacji”
Yousha Aleayoub
9

W swoim własnym programie użyłem następujących elementów.

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

To trochę podstawowe, ale spełnia swoje zadanie.

Blackvault
źródło
1
W przypadku użycia z adresem URL, jak ma to miejsce w przykładzie, ma to również tę zaletę, że do otwarcia adresu URL używana jest domyślna przeglądarka internetowa systemu.
Lemonseed
jeśli użyję tego serwera, czy otworzy się on w przeglądarce serwera, czy w przeglądarce klienta?
To pułapka,
6
var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "/YourSubDirectory/yourprogram.exe");
Process.Start(new ProcessStartInfo(path));
SimperT
źródło
5

Możesz użyć tej składni do uruchamiania dowolnej aplikacji:

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

To samo dotyczy adresu URL. Po prostu wpisz swój adres URL między to ().

Przykład:

System.Diagnostics.Process.Start("http://www.google.com");
alireza amini
źródło
4

Użyj klasy Process . Dokumentacja MSDN zawiera przykład, jak go używać.

Franci Penov
źródło
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
źródło
3

Zadeklaruj to

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

I umieść to w swojej funkcji (pamiętaj, że „checkInstalled” jest opcjonalne, ale jeśli będziesz go używać, musisz go zaimplementować)

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

UWAGA: Nie jestem pewien, czy to zadziała, gdy działa więcej niż jedno wystąpienie pliku .exe.

Carla Jesus
źródło
2

Uwzględnij using System.Diagnostics;.

A potem zadzwoń do tego Process.Start("Paste your URL string here!");

Spróbuj czegoś takiego:

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

Należy pamiętać, że jest to przykładowa strona ASP.NET jako przykład. Powinieneś trochę zaimprowizować.

AVIK DUTTA
źródło
2

Na przykład, aby uruchomić Microsoft Word , użyj tego kodu:

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

Więcej wyjaśnień znajdziesz pod tym linkiem .

user4340666
źródło
0

Jeśli używasz w systemie Windows

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

Działa dla .Net Framework, ale dla Net core 3.1 również należy ustawić UseShellExecute na true

Process process = new Process();
process.StartInfo.Filename = "Test.txt";
process.StartInfo.UseShellExecute = true;
process.Start();
Woskowanie Księżyca
źródło