ฉันจะเริ่มต้นกระบวนการจาก C # ได้อย่างไร


คำตอบ:


220

ตามที่แนะนำโดย Matt Hamilton วิธีการด่วนที่คุณมีการควบคุมกระบวนการอย่าง จำกัด คือการใช้วิธีการเริ่มแบบคงที่ในคลาส System.Diagnostics กระบวนการ ...

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

ทางเลือกคือการใช้อินสแตนซ์ของคลาสกระบวนการ สิ่งนี้ช่วยให้สามารถควบคุมกระบวนการได้มากขึ้นรวมถึงการตั้งเวลาประเภทของหน้าต่างที่จะทำงานและเป็นประโยชน์มากที่สุดสำหรับฉันความสามารถในการรอให้กระบวนการเสร็จสิ้น

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.

วิธีนี้ช่วยให้สามารถควบคุมได้มากกว่าที่ฉันเคยกล่าวไว้


ฉันใช้วิธีนี้เพื่อเปิดไฟล์. msg โดยใช้ outlook แต่เมื่อฉันพยายามเปิดไฟล์. msg อีกอันมันจะเปิด outlook อีกอันขึ้นมา มีวิธีใดที่จะนำกระบวนการปัจจุบันกลับมาใช้ใหม่และหลีกเลี่ยงการเปิดมุมมองอื่น stackoverflow.com/questions/28534358/…
user1166085

4
คุณควรใช้คำสั่งที่ใช้หรือกำจัดกระบวนการเช่นกันstackoverflow.com/questions/16957320/…
Hoppe


14

เช่นเดียวกับแมตต์กล่าวว่าใช้Process.Start

คุณสามารถส่ง URL หรือเอกสาร พวกเขาจะเริ่มโดยสมัครที่ลงทะเบียน

ตัวอย่าง:

Process.Start("Test.Txt");

สิ่งนี้จะเริ่ม Notepad.exe เมื่อโหลด Text.Txt


4
จะเกิดอะไรขึ้นหากไม่มีการลงทะเบียนโปรแกรมสำหรับประเภทนี้
LC

2
@LC Win32Exception(0x80004005) "ไม่มีแอปพลิเคชันเชื่อมโยงกับไฟล์ที่ระบุสำหรับการดำเนินการนี้"
Yousha Aleayoub

9

ฉันใช้สิ่งต่อไปนี้ในโปรแกรมของฉันเอง

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

มันค่อนข้างพื้นฐาน แต่ก็ทำงานให้ฉันได้


1
เมื่อใช้กับ URL ตามตัวอย่างของคุณสิ่งนี้มีข้อดีของการใช้เว็บเบราว์เซอร์เริ่มต้นของระบบเพื่อเปิด URL
Lemonseed

หากฉันใช้นี่เป็นเซิร์ฟเวอร์จะเปิดในเบราว์เซอร์เซิร์ฟเวอร์หรือเบราว์เซอร์ไคลเอ็นต์หรือไม่
มันเป็นกับดัก


5

คุณสามารถใช้ไวยากรณ์นี้สำหรับการเรียกใช้แอปพลิเคชันใด ๆ :

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

และอันเดียวกันสำหรับ URL เพียงแค่เขียน URL ()ของคุณระหว่างนี้

ตัวอย่าง:

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

ประกาศสิ่งนี้

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

และวางสิ่งนี้ไว้ในฟังก์ชั่นของคุณ (โปรดทราบว่า "checkInstalled" เป็นทางเลือก แต่ถ้าคุณใช้มันคุณจะต้องใช้มัน)

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

หมายเหตุ:ฉันไม่แน่ใจว่าจะทำงานได้เมื่อมี. exe ทำงานมากกว่าหนึ่งอินสแตนซ์


2

using System.Diagnostics;รวม

แล้วเรียกสิ่งนี้ Process.Start("Paste your URL string here!");

ลองสิ่งนี้:

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

โปรดทราบว่ามันเป็นหน้า ASP.NET ตัวอย่างเป็นตัวอย่าง คุณควรลองและปรับแต่งเล็กน้อย


2

เพื่อเริ่มMicrosoft Wordตัวอย่างเช่นใช้รหัสนี้:

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

สำหรับคำอธิบายเพิ่มเติมดูที่ลิงค์นี้


0

หากใช้กับ Windows

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

ใช้งานได้กับ. Net Framework แต่สำหรับ Net core 3.1 ยังต้องตั้งค่า UseShellExecute ให้เป็นจริง

Process process = new Process();
process.StartInfo.Filename = "Test.txt";
process.StartInfo.UseShellExecute = true;
process.Start();
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.