zoukankan      html  css  js  c++  java
  • C# NamedPipe

    代码监听端
    using System;
    using System.IO;
    using System.IO.Pipes;
    using System.Threading;
    using System.Diagnostics;
    using System.Collections.Generic;
    using System.Text;

    namespace Protector
    {
    public class Protector
    {
    private Thread serverThread;
    private Dictionary<string, Process> dict;
    private Timer timer;

    public Protector()
    {
    serverThread
    = new Thread(() =>
    {
    while (true)
    {
    using (NamedPipeServerStream pipeServer = new NamedPipeServerStream("ProtectorPipe", PipeDirection.In))
    using (BinaryReader reader = new BinaryReader(pipeServer))
    {
    pipeServer.WaitForConnection();
    string value = reader.ReadString();
    Console.WriteLine(value);
    RegisterProcess(value);
    pipeServer.Disconnect();
    }
    }
    });
    serverThread.IsBackground
    = true;
    serverThread.Start();
    }

    public void RegisterProcess(string filePath)
    {
    if (File.Exists(filePath))
    {
    if (dict == null)
    {
    dict
    = new Dictionary<string, Process>(1);
    timer
    = new Timer(CheckProcess, null, 200, 200);
    }
    if (!dict.ContainsKey(filePath))
    {
    dict.Add(filePath, GetProcess(filePath)
    ?? new Process());
    }
    }
    }
    private void CheckProcess(object obj)
    {
    foreach (KeyValuePair<string, Process> pair in dict)
    {
    string filePath = pair.Key;
    if (GetProcess(filePath) == null)
    {
    Process processObj
    = pair.Value;
    processObj.StartInfo.FileName
    = filePath;
    processObj.EnableRaisingEvents
    = true;
    processObj.Exited
    += new EventHandler(processObj_Exited);
    processObj.Start();
    Thread.Sleep(
    0x7d0);
    }
    }
    }
    private void processObj_Exited(object sender, EventArgs e)
    {
    Process processObj
    = (Process)sender;
    try
    {
    processObj.WaitForExit();
    }
    finally
    {
    string filePath = processObj.StartInfo.FileName;
    if (GetProcess(filePath) == null)
    {
    processObj.Refresh();
    processObj.StartInfo.FileName
    = filePath;
    processObj.EnableRaisingEvents
    = true;
    processObj.Exited
    += new EventHandler(processObj_Exited);
    processObj.Start();
    Thread.Sleep(
    0x7d0);
    }
    }
    }

    public Process GetProcess(string filePath)
    {
    Process[] p
    = Process.GetProcessesByName(Path.GetFileNameWithoutExtension(filePath));
    return p.Length > 0 ? p[0] : null;
    }
    }
    }

    调用方法
    public static bool TryProtectProcess(string filePath)
    {
    Guard
    <FileNotFoundException>(!File.Exists(filePath), "filePath");
    try
    {
    using (NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", "ProtectorPipe", PipeDirection.Out))
    using (BinaryWriter writer = new BinaryWriter(pipeClient))
    {
    pipeClient.Connect(
    1000);
    writer.Write(filePath);
    writer.Flush();
    }
    return true;
    }
    catch (TimeoutException)
    {
    return false;
    }
    catch
    {
    throw;
    }
    }

  • 相关阅读:
    XML和JSON优缺点
    JSON与XML优缺点对比分析
    json数据格式
    ajax 请求二进制流 图片
    常用网站
    Js setTimeout 用法
    js Indexof的用法
    02_虚拟机的安装和SecureCRT、FileZilla、Xmanage、UltraEdit工具的介绍
    01_Hadoop学习笔记内容说明
    sudoers文件设置sudo命令无密码(root密码)登录
  • 原文地址:https://www.cnblogs.com/Googler/p/1798075.html
Copyright © 2011-2022 走看看