2012-12-19 16 views
10

काम नहीं करती है, मैं एक ऑडियो रिपेटर एप्लिकेशन चलाता हूं जो मुझे अपने हेडसेट & एक ही समय में वक्ताओं के माध्यम से ध्वनि चलाने की अनुमति देता है। एप्लिकेशन में स्वयं को "रीयलटाइम" पर सेट करने की क्षमता है, लेकिन यह केवल इसे उच्च पर सेट करता है, इस समय मुझे इसे टास्क मैनेजर में सेट करना होगा।बदलें प्रक्रिया प्राथमिकता

मैं स्वचालित करने के लिए इस तो मैं सी # में एक छोटे से स्क्रिप्ट जो मेरे लिए प्रक्रिया प्राथमिकता बदल जाएगा (मैं एक बार मैं समाप्त कर लिया है शुरू करने जोड़ना होगा कि)

namespace ProcessRealtime 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Process[] processes = Process.GetProcessesByName("audiorepeater"); 
      foreach (Process proc in processes) 
      { 
       Console.WriteLine("Changing Priority for: "+proc.Id+" To RealTime"); 
       proc.PriorityClass = ProcessPriorityClass.RealTime; 
       if (proc.PriorityClass == ProcessPriorityClass.RealTime) 
       { 
        Console.WriteLine("Worked"); 
       } 
      } 
      Console.ReadLine(); 
     } 
    } 
} 

समस्या यह है कि है लिखा निर्णय लिया यह परिवर्तन लागू नहीं करता है। Screenshot of Desktop

क्या किसी को पता है कि यह क्यों काम नहीं करेगा?

+2

उम्म, आप एक व्यवस्थापक के रूप में अपने कार्यक्रम चलाने की कोशिश कर रहा हो सकता है। कुछ मामलों में यह आवश्यक हो सकता है। – FrostyFire

+0

पुष्टि कर सकता है कि @JABFreeware ने क्या कहा सही है। –

+0

@ सिमन व्हाइटहेड धन्यवाद, मैंने एक उत्तर – FrostyFire

उत्तर

8

आपको प्रशासनिक विशेषाधिकार के साथ अपनी स्क्रिप्ट चलाने की आवश्यकता है।

+0

जोड़ा है, मैंने विजुअल स्टूडियो को व्यवस्थापक और सामान्य रूप से चलाने के द्वारा Win7 पर इसका परीक्षण किया। चूंकि प्रशासक ने काम किया (जबकि ओपी के मुद्दे के अनुसार गैर प्रशासक इसे उच्च पर सेट करता है)। –

+0

धन्यवाद, मेरे द्वारा थोड़ी सी निगरानी थी क्योंकि कार्य प्रबंधक को रीयलटाइम को बढ़ाने के लिए व्यवस्थापक की आवश्यकता नहीं होती है लेकिन शांत। उपयोगकर्ता इंटरैक्शन के बिना इसे काम करने के लिए बस एक तरीका खोजने की आवश्यकता है (व्यवस्थापक के रूप में चलाने की अनुमति है)। मैं इसे एक सेवा बनाने की सोच रहा था। –

+0

@ ऑलिवरबेकर यदि आप एक प्रशासनिक उपयोगकर्ता हैं तो टास्क मैनेजर यूएसी प्रॉम्प्ट के बिना खुद को ऊपर उठाने के लिए "पारदर्शी ऊंचाई" कर सकता है। [केवल "माइक्रोसॉफ्ट विंडोज" प्रमाण पत्र द्वारा हस्ताक्षरित सॉफ्टवेयर यह कर सकता है] (https://technet.microsoft.com/en-us/magazine/2009.07.uac.aspx)। –

5

इस प्रयास करें:

using (Process p = Process.GetCurrentProcess()) 
    p.PriorityClass = ProcessPriorityClass.High; 
0

आप एक व्यवस्थापक के रूप चलाने के लिए या यूएसी को दूर क्योंकि आप एक प्रक्रिया आप नहीं चला था के लिए उपयोग करने के अधिकार की जरूरत है सकते हैं।

यह मेरे लिए काम करता है:

using System; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

// #define DEBUG 

namespace ProcessRealtime 
{ 
    class PUBG_RealTime 
    { 
     static string processName = "TslGame"; 
     static ProcessPriorityClass newPriority = ProcessPriorityClass.High; 

     static void Main(string[] args) 
     { 
#if DEBUG 
      PutDebug("Start!"); 
#endif 
      Process[] processes = Process.GetProcessesByName(processName); 
#if DEBUG 
      PutDebug(processes.Length + " processed found"); 
#endif 
      foreach (Process proc in processes) 
      { 
#if DEBUG 
       PutDebug("New process found"); 
#endif 
       Console.WriteLine("Changing Priority for id:" + proc.Id + " to " + newPriority.ToString()); 
       proc.PriorityClass = newPriority; 
#if DEBUG 
       PutDebug("Changed priority for " + proc.Id); 
#endif 
      } 
#if DEBUG 
      PutDebug("No more processes.."); 
#endif 
      Console.Write("Press a key, it's over !"); 
      Console.ReadLine(); 
     } 

#if DEBUG 
     static bool debug = true; 
     static int debugInc = 1; 
     static void PutDebug(string info = "") 
     { 
      if(debug){ 
       Console.WriteLine("Debug" + debugInc + ": " + info); 
       debugInc++; 
      } 
     } 
#endif 
    } 
} 
संबंधित मुद्दे