2012-12-19 11 views
10

Używam aplikacji Audio Repeater, która pozwala mi odtwarzać dźwięk przez mój zestaw słuchawkowy. & Głośniki w tym samym czasie. Aplikacja sama w sobie ma możliwość ustawienia się na "RealTime", ale ustawia ją tylko na wysoką, więc w tej chwili muszę ustawić ją samodzielnie w Menedżerze zadań.Zmiana priorytetu procesu nie działa

postanowiłem zautomatyzować ten więc napisałem mały skrypt w języku C#, które mogłyby zmienić priorytet procesu za mną (Że Dodałbym do uruchomienia raz Skończyłem)

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(); 
     } 
    } 
} 

Problem polega na tym, że nie stosuje zmian. Screenshot of Desktop

Czy ktoś wie, dlaczego to nie zadziała?

+2

Umm, może próbujesz uruchomić program jako administrator. Może to być konieczne w niektórych przypadkach. – FrostyFire

+0

Może potwierdzić, że to, co powiedział @JABFreeware jest poprawne. –

+0

@Simon Whitehead Dzięki, dodałem odpowiedź – FrostyFire

Odpowiedz

8

Musisz uruchomić SWÓJ skrypt z uprawnieniami administracyjnymi.

+0

Testowałem to na Win7, uruchamiając Visual Studio jako Administrator i normalnie. Ponieważ Administrator pracował (podczas gdy inny administrator ustawił go na Wysoki, zgodnie z opisem PO). –

+0

Dzięki, byłem trochę przeoczony przeze mnie, ponieważ Menedżer zadań nie wymaga, aby administrator podniósł do czasu rzeczywistego, ale fajnie. Wystarczy znaleźć sposób, aby działał bez interakcji użytkownika (zezwalając na działanie jako administrator). Myślałem o tym, żeby to była usługa. –

+0

@OliverBaker, jeśli jesteś administratorem, Menedżer zadań może wykonać "przezroczystą elewację", aby podnieść poziom bez pytania o UAC. [Tylko oprogramowanie podpisane przez certyfikat "Microsoft Windows" może to zrobić] (https://technet.microsoft.com/en-us/magazine/2009.07.uac.aspx). –

5

Spróbuj tego:

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

można uruchamiać jako administrator lub usunąć UAC, bo trzeba praw dostępu do procesu nie zostało uruchomione.

Działa to dla mnie:

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 
    } 
} 
Powiązane problemy