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ファイルを開こうとすると、別のOutlookが開きました。現在のプロセスを再利用し、別の見通しを開かないようにする方法はありますか?stackoverflow.com/questions/28534358/...
user1166085

4
usingステートメントを使用するか、プロセスを破棄する
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とともに使用すると、システムのデフォルトのWebブラウザーを使用してURLを開くことができるという利点もあります。
レモンシード

これをサーバーとして使用する場合、サーバーブラウザーまたはクライアントブラウザーで開きますか?
これはトラップです。

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ページであることに注意してください。少し即興でやってみるべきです。



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.