首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C#中设置进程名

在C#中设置进程名
EN

Stack Overflow用户
提问于 2013-09-13 17:14:14
回答 5查看 29.9K关注 0票数 6

我编写了一个应用程序,它启动第三方程序,从我的节目的电视频道下载媒体流。我正在使用的程序是rtmpdump.exe。它们作为独立的进程运行,如下所示:

代码语言:javascript
复制
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“。类似这样的东西,以确定哪些已经启动,哪些正在运行。有可能吗?我想不出一个友好的名字。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-09-13 17:33:54

扩展Alexei的话-您可以创建一个Dictionary< int,string >来跟踪您创建的进程ID /描述性名称。也许您应该将它写到一个文件中,以防程序崩溃--但是您需要一些特殊的启动处理来处理退出的进程。

在启动时,您可能希望在文件中读取,并检查当前进程是否与您拥有的进程匹配,并删除任何不再存在的进程(进程id或exe名称错误)。您可能希望在每次创建新进程并写入文件时都这样做。

票数 3
EN

Stack Overflow用户

发布于 2013-09-13 17:24:27

您不能更改进程名称,但是可以:

票数 2
EN

Stack Overflow用户

发布于 2013-09-13 18:32:13

这是一些你可以使用的代码。

代码语言:javascript
复制
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);
            }
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18791784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档