Phase 2-3: UI layout, theme switching, CRUD tools, process execution
- Phase 2: MainWindow 3-section layout (sidebar/content/log bar), Dark/Light theme with ThemeHelper, MainViewModel with ObservableProperty/RelayCommand, tool card filtering by search + category - Phase 3: ToolEditWindow for add/edit tools, ProcessExecutionService (Process.Start + error handling), double-click + right-click context menu (run/edit), path browse dialog - Bugfix: ContextMenu commands now use PlacementTarget.Tag binding (ContextMenu in separate visual tree) - Bugfix: StaticResource converters moved to XAML before DataTemplate to fix XamlParseException on tool card render - Bugfix: Pure filenames (no path separators) treated as PATH commands, not marked invalid - Bugfix: RefreshData preserves SelectedCategory; Load() catches all exceptions; Save() wrapped in try-catch; auto-scroll log to newest entry - Tests: xUnit project with 55 tests covering models, services, converters, and view models
This commit is contained in:
49
PersonalToolBox/Services/ProcessExecutionService.cs
Normal file
49
PersonalToolBox/Services/ProcessExecutionService.cs
Normal file
@@ -0,0 +1,49 @@
|
||||
using System.Diagnostics;
|
||||
using PersonalToolBox.Models;
|
||||
|
||||
namespace PersonalToolBox.Services;
|
||||
|
||||
/// <summary>
|
||||
/// 进程执行服务,负责启动外部工具进程并处理异常
|
||||
/// </summary>
|
||||
public class ProcessExecutionService : IProcessExecutionService
|
||||
{
|
||||
private readonly ILogService _logService;
|
||||
|
||||
public ProcessExecutionService(ILogService logService)
|
||||
{
|
||||
_logService = logService;
|
||||
}
|
||||
|
||||
public void Execute(ToolItem tool)
|
||||
{
|
||||
if (tool == null)
|
||||
{
|
||||
_logService.Error("尝试执行空工具项");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!tool.IsValid)
|
||||
{
|
||||
_logService.Warning($"无法运行工具 \"{tool.Name}\",路径失效: {tool.ExecutablePath}");
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var startInfo = new ProcessStartInfo
|
||||
{
|
||||
FileName = tool.ExecutablePath,
|
||||
Arguments = tool.Arguments ?? string.Empty,
|
||||
UseShellExecute = true
|
||||
};
|
||||
|
||||
Process.Start(startInfo);
|
||||
_logService.Info($"成功启动: {tool.Name}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logService.Error($"启动工具 \"{tool.Name}\" 失败: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user