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


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.


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


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.


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.


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

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


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

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.


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


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 .


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();
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.