我运行一个音频转发器应用程序,它允许我通过我的耳机播放声音&演讲者同时发言。 应用程序本身可以将自己设置为“RealTime”,但它只将其设置为高,所以此刻我必须自己在任务管理器中设置它。
我决定自动执行此操作,因此我在C#中编写了一个小脚本,它会改变我的进程优先级(我会在完成后添加启动)
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();
}
}
}
问题是它不适用更改。
有谁知道为什么这不起作用?
答案 0 :(得分:10)
您需要使用管理权限运行您的脚本。
答案 1 :(得分:5)
试试这个:
using (Process p = Process.GetCurrentProcess())
p.PriorityClass = ProcessPriorityClass.High;
答案 2 :(得分:0)
您可以以管理员身份运行或删除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'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
}
}