当前位置: 首页 > article >正文

c#实现重启Explorer.exe并且启动某个命令

由于经常需要重启Explorer.exe 然后接着又需要马上启动一个命令行,于是干脆写一个程序,实现了此功能。

可以直接在运行中,或者在资源管理器中新建任务。

注意,下方的设置为应用程序,可以避免启动时出现黑框。

直接上代码:

using System;
using System.Diagnostics;
using System.IO;
using System.Threading;

class Program
{
    [STAThread] // 确保使用单线程单元(STA)模型,这是大多数 Windows Forms 应用程序所需要的
    static void Main()
    {
        int nDelya = 800;
        // 杀死 explorer.exe 进程
        Process.Start(new ProcessStartInfo
        {
            FileName = "taskkill",
            Arguments = "/f /im explorer.exe",
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = true
        }).WaitForExit();

        // 等待一段时间,确保资源释放
        Thread.Sleep(nDelya); // 等待

        // 重新启动 explorer.exe
        Process.Start(new ProcessStartInfo
        {
            FileName = "explorer.exe",
            UseShellExecute = true
        });

        Thread.Sleep(nDelya); // 等待

        ExecuteExefileHelper(@"D:\Tools\xxx.exe", @"xxx");
    }

    public static bool ExecuteExefileHelper(string fileName, string sPara)
    {
        try
        {
            // 获取当前程序所在的目录
            string exeDir = AppDomain.CurrentDomain.BaseDirectory;
            // 拼接完整路径
            string exePath = Path.Combine(exeDir, fileName);

            // 检查文件是否存在
            if (!File.Exists(exePath))
            {
                return false;
            }

            // 创建一个新的进程启动信息
            ProcessStartInfo startInfo = new ProcessStartInfo
            {
                FileName = exePath,
                Arguments = sPara,
                RedirectStandardOutput = true,
                RedirectStandardError = true,
                UseShellExecute = false,
                CreateNoWindow = true // 不创建窗口
            };

            // 启动进程
            using (Process process = Process.Start(startInfo))
            {
                // 确保进程不是 null
                if (process == null)
                {
                    return false;
                }

                // 异步读取标准输出
                process.OutputDataReceived += (sender, e) =>
                {
                    if (!string.IsNullOrEmpty(e.Data))
                    {
                        // 可以在这里处理输出数据,例如记录日志
                    }
                };

                // 异步读取标准错误
                process.ErrorDataReceived += (sender, e) =>
                {
                    if (!string.IsNullOrEmpty(e.Data))
                    {
                        // 可以在这里处理错误数据,例如记录错误日志
                    }
                };

                // 开始异步读取
                process.BeginOutputReadLine();
                process.BeginErrorReadLine();

                // 等待进程退出
                process.WaitForExit();

                // 检查退出代码
                if (process.ExitCode == 0)
                {
                    // 成功执行
                    return true;
                }
                else
                {
                    // 执行失败
                    return false;
                }
            }
        }
        catch (Exception ex)
        {
            // 可以在这里记录异常日志
            return false;
        }
    }
}

谨此纪念。


http://www.kler.cn/a/517624.html

相关文章:

  • 【ComfyUI专栏】ComfyUI 部署Kolors
  • Coze插件开发之基于已有服务创建并上架到扣子商店
  • CAPL高级应用
  • 网络模型简介:OSI七层模型与TCP/IP模型
  • 【Linux】Linux编译器-g++、gcc、动静态库
  • MATLAB提供的颜色映射表colormap——伪彩色
  • CSS 提示工具:优化网页设计,提升用户体验
  • 关于BAR(PCIE BAR或AXI BAR)的解释
  • 广西螺蛳粉:舌尖上的美食传奇
  • 【豆包MarsCode 蛇年编程大作战】蛇形烟花
  • MATLAB遗传算法求解函数最大值
  • 简约的单用户看板待办事项应用Tellor
  • 无人机核心项目开发系列:从设计到实现的完整解析
  • Tailwind CSS v4.0 发布
  • 微服务学习-Nacos 注册中心实战
  • Kaggle入门
  • 开发环境搭建-1:配置 WSL (类 centos 的 oracle linux 官方镜像)
  • 通过OPC UA或MQTT协议,安全地将工业设备连接至物联网软件
  • VMware虚拟机安装openKylin
  • 基于Qt平台QuaZip方式压缩/解压缩
  • QT 通过ODBC连接数据库的好方法:
  • CLOUDFLARE代理请求重定向你太多次
  • 基于自然语言处理的垃圾短信识别系统
  • 【大模型】基于LLaMA-Factory的模型高效微调(2)
  • 【Qt】: QPointer详解
  • Elasticsearch 性能测试工具全解析