C #에서 프로세스를 시작하려면 어떻게합니까?


답변:


220

Matt Hamilton이 제안한 것처럼 프로세스를 제한적으로 제어 할 수있는 빠른 방법은 System.Diagnostics.Process 클래스에서 정적 Start 메서드를 사용하는 것입니다.

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

대안은 Process 클래스의 인스턴스를 사용하는 것입니다. 이를 통해 스케줄링, 실행되는 창 유형 및 가장 유용하게는 프로세스가 완료 될 때까지 기다리는 기능을 포함하여 프로세스를 훨씬 더 제어 할 수 있습니다.

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.

이 방법을 사용하면 위에서 언급 한 것보다 훨씬 많은 제어가 가능합니다.


나는이 방법을 사용하여 Outlook을 사용하여 .msg 파일을 열었지만 다른 .msg 파일을 열려고하면 다른 전망이 열립니다. 현재 프로세스를 재사용하고 다른 전망을 열지 않는 방법이 있습니까? stackoverflow.com/questions/28534358/…
user1166085

4
using 문을 사용하거나 프로세스를 폐기해야합니다. stackoverflow.com/questions/16957320/…
Hoppe


14

Matt가 말했듯이 Process.Start를 사용하십시오 .

URL 또는 문서를 전달할 수 있습니다. 등록 된 응용 프로그램에 의해 시작됩니다.

예:

Process.Start("Test.Txt");

그러면 Text.Txt가로드 된 Notepad.exe가 시작됩니다.


4
이 유형에 등록 된 프로그램이 없으면 어떻게됩니까?
LC

2
@LC Win32Exception(0X80004005) "없음 응용 프로그램이이 작업에 대해 지정한 파일과 연관된"
Yousha Aleayoub을

9

내 프로그램에서 다음을 사용했습니다.

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

약간 기본이지만 나를 위해 일합니다.


1
예제와 같이 URL과 함께 사용하면 시스템의 기본 웹 브라우저를 사용하여 URL을 열 수 있다는 이점도 있습니다.
Lemonseed

서버를 사용하는 경우 서버 브라우저 또는 클라이언트 브라우저에서 열립니까?
그것은 함정이다

6
var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "/YourSubDirectory/yourprogram.exe");
Process.Start(new ProcessStartInfo(path));

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를 true로 설정해야합니다.

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.