Ответ 1
Вам нужно запустить ВАШ script с административной привилегией.
Я запускаю приложение Audio Repeater, которое позволяет мне воспроизводить звук через наушники и динамики одновременно. Само приложение имеет возможность устанавливать себя в "RealTime", но оно только устанавливает его на высокий, поэтому в данный момент я должен сам установить его в диспетчере задач.
Я решил автоматизировать это, поэтому я написал немного script в С#, который изменил бы приоритет процесса для меня (что я бы добавил, чтобы начать, как только закончите)
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();
}
}
}
Проблема заключается в том, что он не применяет изменения.
Кто-нибудь знает, почему это не сработает?
Вам нужно запустить ВАШ script с административной привилегией.
Попробуйте следующее:
using (Process p = Process.GetCurrentProcess())
p.PriorityClass = ProcessPriorityClass.High;
Вы можете запускаться как администратор или удалять UAC, потому что вам нужны права на доступ к процессу, который вы не запускали.
Это работает для меня:
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 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
}
}