我编写了一个应用程序,它启动第三方程序,从我的节目的电视频道下载媒体流。我正在使用的程序是rtmpdump.exe。它们作为独立的进程运行,如下所示:
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = path + rtmpdump;
startInfo.Arguments = rtmpdump_argument;
startInfo.WorkingDirectory = path;
startInfo.WindowStyle = ProcessWindowStyle.Minimized;
Process p = Process.Start(startInfo);
但是我想命名这些进程,所以如果我的程序崩溃或必须重新启动,那么我可以检查当前进程的名称,看看是否有一个名为"BBC世界新闻7“。类似这样的东西,以确定哪些已经启动,哪些正在运行。有可能吗?我想不出一个友好的名字。
发布于 2013-09-13 17:33:54
扩展Alexei的话-您可以创建一个Dictionary< int,string >来跟踪您创建的进程ID /描述性名称。也许您应该将它写到一个文件中,以防程序崩溃--但是您需要一些特殊的启动处理来处理退出的进程。
在启动时,您可能希望在文件中读取,并检查当前进程是否与您拥有的进程匹配,并删除任何不再存在的进程(进程id或exe名称错误)。您可能希望在每次创建新进程并写入文件时都这样做。
发布于 2013-09-13 17:24:27
您不能更改进程名称,但是可以:
发布于 2013-09-13 18:32:13
这是一些你可以使用的代码。
public class ProcessTracker {
public Dictionary<int, string> Processes { get; set; }
public ProcessTracker() {
Processes = new Dictionary<int, string>();
}
public void AddProcess(Process process, string name) {
Processes.Add(process.Id, name);
}
//Check if what processes are still open after crash.
public void UpdateProcesses() {
List<Process> runningProcesses =
Process.GetProcesses().ToList();
Processes = Processes
.Where(pair => runningProcesses
.Any(process => process.Id == pair.Key))
.ToDictionary(pair => pair.Key, pair => pair.Value);
}
//Use this to see if you have to restart a process.
public bool HasProcess(string name) {
return Processes.Any(pair => pair.Value != name);
}
//Write the file on crash.
public void ReadFile(string path) {
if (!(new FileInfo(path).Exists))
return;
using (StreamReader reader = new StreamReader(path)) {
foreach (string line in reader.ReadToEnd()
.Split(new[] {"\n"}, StringSplitOptions.RemoveEmptyEntries)) {
string[] keyPair = line.Split(',');
Processes.Add(int.Parse(keyPair[0]), keyPair[1]);
}
}
}
//Read the file on startup.
public void SaveFile(string path) {
using (StreamWriter writer = new StreamWriter(path, false)) {
foreach (KeyValuePair<int, string> process in Processes) {
writer.WriteLine("{0},{1}",
process.Key, process.Value);
}
}
}
}
https://stackoverflow.com/questions/18791784
复制相似问题