C# एप्लिकेशन से एक्सटर्नल एप्लिकेशन Process क्लास का उपयोग करके चलाया जा सकता है। एक प्रोसेस आपके कंप्यूटर पर चल रहा प्रोग्राम है। यह एक छोटे बैकग्राउंड टास्क (जैसे स्पेल-चेकर) से लेकर फुल-ब्लोन एप्लिकेशन (जैसे Notepad) तक कुछ भी हो सकता है।
Process क्लास अवलोकन
- नेमस्पेस:
System.Diagnostics - प्रत्येक प्रोसेस प्रोग्राम निष्पादित करने के लिए आवश्यक संसाधन प्रदान करता है
- प्रत्येक प्रोसेस एक सिंगल थ्रेड (प्राइमरी थ्रेड) के साथ शुरू होता है
- प्रोसेस में प्राइमरी थ्रेड के अलावा कई थ्रेड्स हो सकते हैं
- प्रोसेस सिस्टम संसाधनों पर भारी निर्भर होते हैं (हैवीवेट), जबकि थ्रेड्स को न्यूनतम संसाधन चाहिए (लाइटवेट)
उदाहरण 1: Notepad चलाना आर्गुमेंट्स के साथ
using System;
using System.Diagnostics;
namespace DemoApplication
{
class Program
{
static void Main()
{
Process notepad = new Process();
notepad.StartInfo.FileName = "notepad.exe";
notepad.StartInfo.Arguments = "DemoText.txt"; // फाइल नाम आर्गुमेंट के रूप में
notepad.Start();
Console.WriteLine("Notepad शुरू किया गया। एंटर दबाएं बाहर निकलने के लिए...");
Console.ReadLine();
}
}
}
उदाहरण 2: ब्राउज़र में URL खोलना
using System;
using System.Diagnostics;
namespace DemoApplication
{
class Program
{
static void Main()
{
// डिफ़ॉल्ट ब्राउज़र में URL खोलें
Process.Start("https://www.google.com/");
// या स्पेसिफिक ब्राउज़र में
// Process.Start("chrome.exe", "https://www.google.com/");
Console.WriteLine("ब्राउज़र खोला गया। एंटर दबाएं बाहर निकलने के लिए...");
Console.ReadLine();
}
}
}
उदाहरण 3: एडवांस्ड Process कॉन्फिगरेशन
using System;
using System.Diagnostics;
using System.IO;
namespace DemoApplication
{
class Program
{
static void Main()
{
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "dotnet.exe",
Arguments = "run --project MyProject.csproj",
WorkingDirectory = @"C:\Projects\MyApp",
UseShellExecute = false, // आउटपुट रीडायरेक्ट करने के लिए आवश्यक
RedirectStandardOutput = true, // स्टैंडर्ड आउटपुट कैप्चर करें
RedirectStandardError = true, // एरर आउटपुट कैप्चर करें
CreateNoWindow = true, // कंसोल विंडो न दिखाएं
StandardOutputEncoding = System.Text.Encoding.UTF8,
StandardErrorEncoding = System.Text.Encoding.UTF8
}
};
process.OutputDataReceived += (sender, e) =>
{
if (!string.IsNullOrEmpty(e.Data))
Console.WriteLine($"[OUTPUT] {e.Data}");
};
process.ErrorDataReceived += (sender, e) =>
{
if (!string.IsNullOrEmpty(e.Data))
Console.WriteLine($"[ERROR] {e.Data}");
};
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
Console.WriteLine($"प्रोसेस समाप्त हुआ। एक्जिट कोड: {process.ExitCode}");
}
}
}
उदाहरण 4: प्रोसेस पूरा होने का इंतजार करना और परिणाम प्राप्त करना
static string RunCommand(string fileName, string arguments, string workingDir = null)
{
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = fileName,
Arguments = arguments,
WorkingDirectory = workingDir ?? Directory.GetCurrentDirectory(),
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true
}
};
process.Start();
string output = process.StandardOutput.ReadToEnd();
string error = process.StandardError.ReadToEnd();
process.WaitForExit();
if (process.ExitCode != 0)
throw new Exception($"कमांड विफल: {error}");
return output;
}
// उपयोग
var result = RunCommand("git", "status", @"C:\MyProject");
Console.WriteLine(result);
ProcessStartInfo के महत्वपूर्ण गुण
| गुण | विवरण |
|---|---|
FileName | चलाने के लिए एप्लिकेशन/दस्तावेज़ का नाम |
Arguments | कमांड-लाइन आर्गुमेंट्स |
WorkingDirectory | प्रोसेस के लिए कार्य निर्देशिका |
UseShellExecute | शेल का उपयोग करके शुरू करें (डिफ़ॉल्ट true)। रीडायरेक्शन के लिए false होना चाहिए |
RedirectStandardOutput | आउटपुट स्ट्रीम रीडायरेक्ट करें |
RedirectStandardError | एरर स्ट्रीम रीडायरेक्ट करें |
CreateNoWindow | नई विंडो न बनाएं |
Verb | "runas" एडमिन के रूप में चलाने के लिए |
UserName, Password | अलग यूजर के रूप में चलाएं |
आम उपयोग के मामले
- कमांड-लाइन टूल्स चलाना (git, dotnet, npm, docker)
- दस्तावेज़ खोलना (डिफ़ॉल्ट एप्लिकेशन के साथ)
- ब्राउज़र में URL लॉन्च करना
- बैकग्राउंड सर्विसेज/वर्कर्स शुरू करना
- बिल्ड/डिप्लॉयमेंट स्क्रिप्ट्स चलाना
- लिगेसी COM/Win32 एप्लिकेशन के साथ इंटरऑप
सुरक्षा नोट: अनट्रस्टेड इनपुट को आर्गुमेंट्स में पास करते समय सावधान रहें - कमांड इंजेक्शन से बचने के लिए हमेशा इनपुट को मान्य करें।