Bagaimana cara memulai proses dari C #?

155

Bagaimana cara memulai proses, seperti meluncurkan URL ketika pengguna mengklik tombol?

Peter Mortensen
sumber

Jawaban:

220

Seperti yang disarankan oleh Matt Hamilton, pendekatan cepat di mana Anda memiliki kontrol terbatas atas proses, adalah dengan menggunakan metode Mulai statis pada System.Diagnostics. Kelas proses ...

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

Alternatifnya adalah menggunakan turunan dari kelas Proses. Ini memungkinkan lebih banyak kontrol atas proses termasuk penjadwalan, jenis jendela yang akan dijalankan dan, yang paling berguna bagi saya, kemampuan untuk menunggu proses selesai.

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.

Metode ini memungkinkan kontrol jauh lebih banyak daripada yang saya sebutkan.

Andy McClrolley
sumber
saya menggunakan metode ini untuk membuka file .msg menggunakan outlook tetapi ketika saya mencoba untuk membuka file .msg lain, itu membuka pandangan lain. Adakah cara untuk menggunakan kembali proses saat ini dan menghindari membuka pandangan lain? stackoverflow.com/questions/28534358/…
user1166085
4
Anda harus menggunakan pernyataan menggunakan atau membuang proses juga stackoverflow.com/questions/16957320/…
Hoppe
25

Anda dapat menggunakan metode System.Diagnostics.Process.Start untuk memulai proses. Anda bahkan dapat meneruskan URL sebagai string dan itu akan memulai peramban default.

Matt Hamilton
sumber
14

Seperti yang Matt katakan, gunakan Process.Start .

Anda dapat mengirimkan URL, atau dokumen. Mereka akan dimulai oleh aplikasi terdaftar.

Contoh:

Process.Start("Test.Txt");

Ini akan memulai Notepad.exe dengan Text.Txt dimuat.

GvS
sumber
4
Apa yang terjadi, jika tidak ada program yang terdaftar untuk jenis ini?
LC
2
@LC Win32Exception(0x80004005) "Tidak ada aplikasi yang dikaitkan dengan file yang ditentukan untuk operasi ini"
Yousha Aleayoub
9

Saya menggunakan yang berikut ini di program saya sendiri.

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

Ini agak mendasar, tetapi itu berhasil bagi saya.

Blackvault
sumber
1
Ketika digunakan dengan URL seperti contoh Anda, ini juga memiliki keuntungan menggunakan browser web default sistem untuk membuka URL.
Biji Lemon
jika saya menggunakan ini adalah server, apakah itu akan terbuka di browser server, atau browser klien?
Ini jebakan
6
var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "/YourSubDirectory/yourprogram.exe");
Process.Start(new ProcessStartInfo(path));
Sederhana
sumber
5

Anda dapat menggunakan sintaks ini untuk menjalankan aplikasi apa pun:

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

Dan yang sama untuk URL. Cukup tulis URL Anda di antara ini ().

Contoh:

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

Gunakan kelas Proses . Dokumentasi MSDN memiliki contoh cara menggunakannya.

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

Nyatakan ini

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

Dan letakkan ini di dalam fungsi Anda (perhatikan bahwa "checkInstalled" adalah opsional, tetapi jika Anda akan menggunakannya, Anda harus mengimplementasikannya)

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

CATATAN: Saya tidak yakin apakah ini berfungsi ketika lebih dari satu instance dari .exe berjalan.

Carla Jesus
sumber
2

Sertakan using System.Diagnostics;.

Dan kemudian panggil ini Process.Start("Paste your URL string here!");

Coba sesuatu seperti ini:

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

Harap perhatikan bahwa ini adalah contoh halaman ASP.NET sebagai contoh. Anda harus mencoba dan berimprovisasi sedikit.

AVIK DUTTA
sumber
2

Untuk memulai Microsoft Word misalnya, gunakan kode ini:

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

Untuk penjelasan lebih lanjut, lihat tautan ini .

pengguna4340666
sumber
0

Jika menggunakan Windows

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

Bekerja untuk .Net Framework tetapi untuk Net core 3.1 juga perlu mengatur UseShellExecute menjadi true

Process process = new Process();
process.StartInfo.Filename = "Test.txt";
process.StartInfo.UseShellExecute = true;
process.Start();
Moon Waxing
sumber