Sage.WindowsProcess
1.0.0.4
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package Sage.WindowsProcess --version 1.0.0.4
NuGet\Install-Package Sage.WindowsProcess -Version 1.0.0.4
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Sage.WindowsProcess" Version="1.0.0.4" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Sage.WindowsProcess" Version="1.0.0.4" />
<PackageReference Include="Sage.WindowsProcess" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Sage.WindowsProcess --version 1.0.0.4
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Sage.WindowsProcess, 1.0.0.4"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Sage.WindowsProcess@1.0.0.4
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Sage.WindowsProcess&version=1.0.0.4
#tool nuget:?package=Sage.WindowsProcess&version=1.0.0.4
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
Sage.WindowsProcess
简介
Sage.WindowsProcess 是一个功能强大的 Windows 进程管理库,提供了全面的进程生命周期管理、监控和控制功能。该库专为 .NET 应用程序设计,完全兼容 AOT 编译,可用于各种需要管理外部进程的场景,如服务管理、应用程序自动化和系统工具开发。
主要特性
进程管理
- 完整生命周期控制:启动、停止、重启和监控进程
- 超时控制:所有异步操作支持超时参数
- 标准输入/输出:重定向和处理进程的标准输入、输出和错误流
- 进程状态监控:实时获取进程状态信息(运行状态、CPU和内存使用率等)
- 自动重启:可配置的进程崩溃自动恢复机制
- 批量操作:支持同时管理多个进程
系统集成
- 开机自启动:支持将指定应用程序配置为Windows开机启动
- 父进程信息:获取调用进程的父进程信息(如命令行shell、cmd启动等)
- 进程优先级:动态调整已配置进程的系统优先级
高级功能
- 事件通知:丰富的事件系统,用于监听进程状态变化
- 动态配置:运行时添加或移除进程配置
- 异步API:全面的异步支持,包括取消令牌
- AOT兼容:完全支持提前编译(Ahead-of-Time),适用于高性能场景
安装
dotnet add package Sage.WindowsProcess
使用示例
基本配置与初始化
using Sage.WindowsProcess.Services;
using Sage.WindowsProcess.Configuration;
using Sage.WindowsProcess.Events;
using Sage.WindowsProcess.Models;
// 创建进程配置
var config = new ProcessConfig
{
Key = "notepad", // 进程唯一标识符
ExecutablePath = "notepad.exe", // 可执行文件路径
Arguments = "example.txt", // 命令行参数
WorkingDirectory = Environment.CurrentDirectory, // 工作目录
AutoRestart = true, // 进程崩溃时自动重启
MaxRestartAttempts = 3, // 最大重启尝试次数
RedirectOutput = true, // 重定向标准输出和错误流
CreateNoWindow = true, // 不创建新窗口
EnableMonitoring = true, // 启用资源监控
MonitoringIntervalMs = 5000, // 监控间隔(毫秒)
ProcessPriority = System.Diagnostics.ProcessPriorityClass.Normal // 进程优先级
};
// 创建进程管理服务
var processManager = new ProcessManagerService(new[] { config });
事件处理
// 进程启动事件
processManager.ProcessStarted += (sender, e) =>
{
Console.WriteLine($"进程已启动:{e.ProcessKey}, PID: {e.ProcessId}");
};
// 进程停止事件
processManager.ProcessExited += (sender, e) =>
{
Console.WriteLine($"进程已停止:{e.ProcessKey}, 退出代码: {e.ExitCode}");
};
// 进程标准输出事件
processManager.ProcessOutput += (sender, e) =>
{
Console.WriteLine($"[{e.ProcessKey}] 输出: {e.Data}");
};
// 进程错误输出事件
processManager.ProcessError += (sender, e) =>
{
Console.WriteLine($"[{e.ProcessKey}] 错误: {e.Data}");
};
// 进程状态更新事件
processManager.ProcessStatusUpdated += (sender, e) =>
{
Console.WriteLine($"[{e.ProcessKey}] CPU: {e.Status.CpuUsage}%, 内存: {e.Status.MemoryUsageMB}MB");
};
// 服务错误事件
processManager.ProcessServiceError += (sender, e) =>
{
Console.WriteLine($"服务错误: {e.Message}, 进程: {e.ProcessKey}");
};
进程生命周期管理
// 启动进程(带超时参数)
await processManager.StartAsync("notepad", timeout: 60000); // 等待60秒超时
// 启动所有已配置的进程
await processManager.StartAllAsync(timeout: 30000); // 等待30秒超时
// 向进程标准输入写入数据
await processManager.WriteToStandardInputAsync("notepad", "Hello World");
// 等待进程退出(带超时参数)
await processManager.WaitForExitAsync("notepad", timeout: 5000); // 等待5秒超时
// 停止进程(带超时参数)
await processManager.StopAsync("notepad", timeout: 3000); // 等待3秒超时
// 停止所有进程
await processManager.StopAllAsync(timeout: 5000); // 等待5秒超时
// 重启进程(带启动和停止超时参数)
await processManager.RestartAsync("notepad", startTimeout: 30000, stopTimeout: 5000);
进程状态与控制
// 检查进程是否正在运行
bool isRunning = processManager.IsRunning("notepad");
// 获取进程状态信息
var status = processManager.GetStatus("notepad");
if (status != null)
{
Console.WriteLine($"进程状态:{status.State}");
Console.WriteLine($"CPU使用率:{status.CpuUsage}%");
Console.WriteLine($"内存使用:{status.MemoryUsageMB}MB");
Console.WriteLine($"运行时间:{status.RunningTimeSpan}");
}
// 动态修改进程优先级
processManager.SetProcessPriority("notepad", System.Diagnostics.ProcessPriorityClass.High);
动态管理进程配置
// 动态添加新进程
var newConfig = new ProcessConfig
{
Key = "calculator",
ExecutablePath = "calc.exe",
AutoRestart = false,
ProcessPriority = System.Diagnostics.ProcessPriorityClass.Normal
};
// 添加单个进程配置
processManager.AddProcess(newConfig);
// 添加多个进程配置
var configs = new List<ProcessConfig>
{
new ProcessConfig
{
Key = "cmd",
ExecutablePath = "cmd.exe",
Arguments = "/c dir",
RedirectOutput = true
},
new ProcessConfig
{
Key = "powershell",
ExecutablePath = "powershell.exe",
Arguments = "-Command \"Get-Process\"",
RedirectOutput = true
}
};
processManager.AddProcesses(configs);
// 启动新添加的进程
await processManager.StartAsync("calculator", timeout: 30000);
// 动态移除进程(可选择是否先停止进程)
await processManager.RemoveProcessAsync("calculator", stopRunning: true);
获取父进程信息
using Sage.WindowsProcess.Parent;
// 获取父进程完整信息
var parentInfo = ParentProcessUtility.GetParentProcessInfo();
// 检查信息是否有效
if (parentInfo.IsValid())
{
Console.WriteLine($"父进程ID: {parentInfo.Id}");
Console.WriteLine($"父进程名称: {parentInfo.Name}");
Console.WriteLine($"父进程路径: {parentInfo.Path}");
Console.WriteLine($"命令行: {parentInfo.CommandLine}");
}
else
{
Console.WriteLine("无法获取有效的父进程信息");
}
资源释放
// 同步释放资源
processManager.Dispose();
// 异步释放资源
await processManager.DisposeAsync();
高级用法
自定义进程监控
// 创建带有自定义监控设置的进程配置
var monitoredConfig = new ProcessConfig
{
Key = "monitored-app",
ExecutablePath = "path/to/your/app.exe",
EnableMonitoring = true, // 启用监控
MonitoringIntervalMs = 2000, // 每2秒监控一次
AutoRestart = true, // 进程崩溃时自动重启
RestartDelayMs = 1000, // 重启前等待1秒
MaxRestartAttempts = 5 // 最多尝试重启5次
};
// 注册状态更新事件以实现自定义监控逻辑
processManager.ProcessStatusUpdated += (sender, e) =>
{
// 示例:当CPU使用率超过80%时记录警告
if (e.Status.CpuUsage > 80)
{
Console.WriteLine($"警告: 进程 {e.ProcessKey} CPU使用率过高: {e.Status.CpuUsage}%");
}
// 示例:当内存使用超过500MB时记录警告
if (e.Status.MemoryUsageMB > 500)
{
Console.WriteLine($"警告: 进程 {e.ProcessKey} 内存使用过高: {e.Status.MemoryUsageMB}MB");
}
};
取消令牌支持
// 创建取消令牌源
using var cts = new CancellationTokenSource();
// 启动进程并支持取消
var startTask = processManager.StartAsync("long-running-process", timeout: 30000);
// 在另一个任务中,如果需要取消操作
cts.CancelAfter(TimeSpan.FromSeconds(10)); // 10秒后取消
try
{
// 等待进程写入标准输入,支持取消
await processManager.WriteToStandardInputAsync("long-running-process", "some input", cts.Token);
// 等待进程退出,支持取消
await processManager.WaitForExitAsync("long-running-process", timeout: 10000, cts.Token);
}
catch (OperationCanceledException)
{
Console.WriteLine("操作已取消");
}
许可证
版权所有 © 2025 甲壳虫科技 团队。
贡献
欢迎提交问题和功能请求。 QQ Group: 1054304346
作者
甲壳虫科技
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net9.0
- System.Diagnostics.PerformanceCounter (>= 9.0.7)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
新增AddConfig(支持1个重载)
新增RemoveConfigAsync
标记弃用 AddProcess、AddProcesss、RemoveProcessAsync