UseShellExecuteবুলিয়ান সম্পত্তি জানালার ব্যবহার সঙ্গে সম্পর্কযুক্ত ShellExecute ফাংশন বনাম CreateProcess ফাংশন - সংক্ষিপ্ত উত্তর যদি হয় UseShellExecuteসত্য তারপর Processবর্গ ব্যবহার করবে ShellExecuteফাংশন, অন্যথায় এটি ব্যবহার করা হবে CreateProcess।
দীর্ঘতর উত্তরটি হ'ল ShellExecuteফাংশনটি একটি নির্দিষ্ট প্রোগ্রাম বা ফাইল খোলার জন্য ব্যবহৃত হয় - এটি রান ডায়ালগটিতে কার্যকর করতে কমান্ডটি টাইপ করা এবং ঠিক আছে ক্লিক করার সমতুল্য, যার অর্থ এটি ব্যবহার করা যেতে পারে (উদাহরণস্বরূপ):
- ডিফল্ট ব্রাউজারটি ব্যবহার করে এইচটিএমএল ফাইল বা ওয়েব খুলুন browser ব্রাউজারটি কী তা জানতে প্রয়োজন,
- ওয়ার্ডের ইনস্টলেশনের পথটি কী তা জেনে ছাড়াই একটি শব্দ নথি খুলুন
- উপর কোনও কমান্ড চালান
PATH
উদাহরণ স্বরূপ:
Process p = new Process();
p.StartInfo.UseShellExecute = true;
p.StartInfo.FileName = "www.google.co.uk";
p.Start();
এটি ব্যবহার করা খুব সহজ, বহুমুখী এবং শক্তিশালী তবে কিছু ত্রুটিগুলি নিয়ে আসে:
স্ট্যান্ডার্ড ইনপুট / আউটপুট / ত্রুটি হ্যান্ডলগুলি পুনর্নির্দেশ করা সম্ভব নয়
শিশু প্রক্রিয়াটির জন্য সুরক্ষা বর্ণনাকারী (বা অন্যান্য দুর্দান্ত জিনিস) নির্দিষ্ট করা সম্ভবত নয়
সুরক্ষা দুর্বলতাগুলি প্রবর্তন করার সম্ভাবনা রয়েছে যদি আপনি আসলে কী পরিচালিত হবে সে সম্পর্কে অনুমান করে:
// If there is an executable called "notepad.exe" somewhere on the path
// then this might not do what we expect
p.StartInfo.FileName = "notepad.exe";
p.Start();
CreateProcessপ্রক্রিয়া শুরুর আরও নিখুঁত উপায় - এটি কোনও পথ অনুসন্ধান করে না এবং আপনাকে শিশু প্রক্রিয়াটির স্ট্যান্ডার্ড ইনপুট বা আউটপুট পুনর্নির্দেশের অনুমতি দেয় (অন্যান্য বিষয়গুলির মধ্যে)। তবে অসুবিধাটি CreateProcessহ'ল আমি উপরে যে 3 টি উদাহরণ দিয়েছি তার কোনওটিই কাজ করবে না (এটি চেষ্টা করে দেখুন)।
সংক্ষেপে, আপনার UseShellExecuteযদি মিথ্যাতে সেট করা উচিত যদি:
- আপনি স্ট্যান্ডার্ড ইনপুট / আউটপুট / ত্রুটি পুনর্নির্দেশ করতে চান (এটি সর্বাধিক সাধারণ কারণ)
- আপনি এক্সিকিউটেবলের জন্য পথটি অনুসন্ধান করতে চান না (যেমন সুরক্ষার কারণে)
বিপরীতভাবে আপনার UseShellExecuteসত্য হওয়া উচিত যদি আপনি ডকুমেন্টস, ইউআরএল বা ব্যাচ ফাইল ইত্যাদি খুলতে চান ... তবে এক্সিকিউটেবলের জন্য স্পষ্টভাবে পথটি না দেওয়ার চেয়ে।
processStartInfo.RedirectStandardOutput=trueবলে মনে হয় আপনি এখনও স্ট্যান্ডার্ড আউটপুটটি করে পুনর্নির্দেশ করতে পারেনprocess.Arguments= "cmd /c dir >c:\\crp\\a.a"। একইভাবে একটি রান ডায়ালগ বাক্স থেকে আপনি যা করতে পারেনcmd /c dir>c:\crp\a.a