প্রক্রিয়া.স্টার্ট সি # থেকে কনসোল উইন্ডোটি লুকান


103

আমি সিস্টেম.ডায়াগনস্টিক্স.প্রসেস ক্লাস ব্যবহার করে একটি রিমোট মেশিনে প্রক্রিয়া তৈরি করার চেষ্টা করছি। আমি একটি প্রক্রিয়া তৈরি করতে সক্ষম। তবে সমস্যাটি হ'ল একটি পরিষেবা তৈরি করতে অনেক সময় লাগে এবং কনসোল উইন্ডো প্রদর্শিত হয়। আরেকটি বিরক্তিকর বিষয় হ'ল কনসোল উইন্ডোটি আমার উইন্ডো ফর্মের উপরে প্রদর্শিত হয় এবং আমি সেই ফর্মটিতে অন্য কোনও ক্রিয়াকলাপ করতে পারি না। আমি সমস্ত বৈশিষ্ট্য যেমন সেট করেছি CreateNoWindow = true,

proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden

তবে এখনও এটি কনসোল উইন্ডোটি দেখায়। এমনকি আমি পৃথক প্রবাহে আউটপুট এবং ত্রুটিগুলি পুনঃনির্দেশিত করেছি তবে কোনও ভাগ্য নেই।

কনসোল উইন্ডোটি লুকানোর কোনও অন্য উপায় আছে? আমাকে সাহায্য করুন .

এখানে আমার কোডের অংশটি আমি sc কমান্ডটি কার্যকর করতে ব্যবহার করেছি।

Process proc = new Process();
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.FileName = "sc";
proc.StartInfo.Arguments = string.Format(@"\\SYS25 create MySvc binPath= C:\mysvc.exe");
proc.StartInfo.RedirectStandardError = false;
proc.StartInfo.RedirectStandardOutput = false;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
proc.WaitForExit();

আপনি সেট করার চেষ্টা করেছেন proc.StartInfo.RedirectedStandardOutput = true? আমি একটি উইন্ডোজ অ্যাপ্লিকেশন সঙ্গে কাজ করতে এটি পেয়েছি।
poy

পুরো উত্স কোড নমুনা নিয়ে কোন চূড়ান্ত সমাধান সম্পর্কে কাজ করছে?
কিকিনেট

একটি উইন্ডোজ কনসোল অ্যাপ্লিকেশনে, কেবল ব্যবহারের শেলএক্সেকিউট - ডাব্লু / ও পুনঃনির্দেশ বা অন্য যে কোনও কিছু - সেট করে আমার জন্য কাজ করেছে। এখানে দেখুন ।
পল

কনসোল উইন্ডোটি ফর্মটি খোলা এবং লক আউট করা পর্যন্ত আপনার কাজটি টাস্ক হিসাবে বা একটি নতুন থ্রেডে চালানো উচিত
রায়ান ডলি

আপনি কেন UseShellExecuteএবং CreateNoWindowদুইবার স্থাপন করছেন ?
মাইক লোরি

উত্তর:


121

কনসোল উইন্ডো না দেখিয়ে কোনও প্রক্রিয়া শুরু করার চেষ্টা করার সময় আমারও একই সমস্যা ছিল। আমি সম্পত্তি মূল্যগুলির বিভিন্ন বিভিন্ন সংমিশ্রণ দিয়ে পরীক্ষা করেছি যতক্ষণ না আমি এমন একটি সন্ধান পেয়েছি যা আমার পছন্দসই আচরণ প্রদর্শন করে।

UseShellExecuteসম্পত্তিটি মিথ্যাতে কেন সেট করতে হবে তা বিশদে এখানে একটি পৃষ্ঠা রয়েছে ।
http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.createnowindow.aspx

পৃষ্ঠায় মন্তব্য বিভাগের অধীনে:

যদি UseShellExecute বৈশিষ্ট্যটি সত্য হয় বা ব্যবহারকারীর নাম এবং পাসওয়ার্ডের বৈশিষ্ট্যগুলি শূন্য না হয় তবে CreateNoWindow বৈশিষ্ট্যের মান উপেক্ষা করা হবে এবং একটি নতুন উইন্ডো তৈরি করা হবে।

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = fullPath;
startInfo.Arguments = args;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;

Process processTemp = new Process();
processTemp.StartInfo = startInfo;
processTemp.EnableRaisingEvents = true;
try
{
    processTemp.Start();
}
catch (Exception e)
{
    throw;
}

4
কিছু অতিরিক্ত বিশদ যুক্ত করতে যত্নশীল? কেন এই বদলে কাজ করে কিভাবে
অ্যাকোয়া

4
এটি কি কারণ স্ট্যান্ডার্ড আউটপুট উইন্ডোটি বিদ্যমান থাকতে বাধ্য করছে?
ডেনিস স্কিডমোর

4
এবং স্পষ্টতই আপনি বিন্যাস ছাড়াই স্ট্যান্ডার্ড আউটপুট পুনর্নির্দেশ করতে পারবেন নাstartInfo.UseShellExecute = false;
ডেনিস স্কিডমোর

4
আমি কৌতূহলী কেন, এই অন্যান্য উত্তরে তারা UseShellExecute = সত্য ব্যবহার করেছে? stackoverflow.com/questions/2317767/c-process-start-hide
ডেনিস স্কিডমোর

11
আমি কখনই বুঝতে পারি না কেন লোকেরা ব্যতিক্রম কেন ধরে রাখে তারা যেভাবেই আবার ছুঁড়ে মারছে।
অন্ধ

55

এই উত্তরটির সাথে আমার ভাগ্য খারাপ হয়েছে, প্রক্রিয়াটির সাথে (উইক্স লাইট.এক্সএই) মূলত মধ্যাহ্নভোজনে বেরোতে এবং রাতের খাবারের জন্য সময় মতো বাড়িতে না আসার সাথে। তবে, নিম্নলিখিতটি আমার পক্ষে ভাল কাজ করেছে:

Process p = new Process();
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
// etc, then start process

4
আমার জন্য কাজ - চমৎকার এবং সহজ!
জে সি

4
এটি সত্যই গ্রহণযোগ্য উত্তর হওয়া উচিত। একটি যাদুমন্ত্র মত কাজ করে.
শাশ্বত 21

4
CreateNoWindow = trueআমার পক্ষে কাজ করেনি, এটি করেছেন :)
স্টেফান মনোভ

4
এটা তোলে এর কাজ শুধুমাত্র জানালা দিয়ে অ্যাপ্লিকেশনের জন্য, কনসোল অ্যাপ্লিকেশন এখনও উইন্ডো প্রদর্শন
Geograph

19

এটি কাজ করা উচিত, চেষ্টা করুন;


একটি সিস্টেম রেফারেন্স যুক্ত করুন।

using System.Diagnostics;

তারপরে কোনও হিডেন সিএমডি উইন্ডোতে আপনার কমান্ডটি চালানোর জন্য এই কোডটি ব্যবহার করুন।

Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
cmd.StartInfo.Arguments = "Enter your command here";
cmd.Start();

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.