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;
}
}
}
谨此纪念。