A modern desktop task scheduling application built with Avalonia UI and Quartz.NET, providing a cross-platform graphical interface for managing scheduled tasks.
- Task Management — Create, edit, delete, and view scheduled tasks with a rich UI
- Flexible Scheduling — Support for Cron expressions and simple interval-based triggers
- Command Execution — Run commands via Cmd, PowerShell, Python, Shell (bash), or Node.js
- Execution Logging — Detailed execution history with status, duration, output, and error tracking
- Dashboard — At-a-glance overview with statistics (total, running, paused, failed) and upcoming tasks
- Task Import/Export — Share tasks via JSON (clipboard or file) with versioned format
- Tool Configuration — Manage interpreter versions and defaults for each tool type
- System Tray — Minimize to tray with quick-access menu
- Cross-platform Startup — Auto-start on boot for Windows (Registry), macOS (LaunchAgent), and Linux (XDG autostart)
- Theme Support — Light, Dark, and System theme modes with Chinese-locale Semi theme
The solution follows Clean Architecture with three projects:
TaskScheduler.slnx
├── TaskScheduler.App/ # Avalonia UI desktop application (WinExe)
│ ├── ViewModels/ # MVVM ViewModels (CommunityToolkit.Mvvm)
│ ├── Views/ # Avalonia XAML views
│ ├── Dialogs/ # Task creation/edit dialogs
│ ├── Controls/ # Custom controls (StatCard, StatusBadge, etc.)
│ ├── Services/ # Navigation, CommandExecutor, TrayIcon, StartupHelper
│ └── Jobs/ # Quartz.NET job implementation
│
├── TaskScheduler.Core/ # Business logic & Quartz.NET integration
│ ├── Models/ # Domain models (TaskInfo, TriggerInfo, etc.)
│ └── Services/ # TaskSchedulerService, ExecutionLogService, etc.
│
└── TaskScheduler.Infra/ # Infrastructure utilities
└── Helpers/ # PathHelper, DirectoryHelper, AssemblyHelper
| Category | Libraries |
|---|---|
| UI Framework | Avalonia 12.0, Semi.Avalonia (theme), Ursa (dialogs), Material.Icons |
| MVVM | CommunityToolkit.Mvvm 8.4 (source generators) |
| Scheduling | Quartz.NET 3.18 (SQLite ADO JobStore) |
| Database | Microsoft.Data.Sqlite 10.0 |
| DI | Microsoft.Extensions.DependencyInjection |
| Logging | Serilog (console + rolling file) |
| Configuration | Microsoft.Extensions.Configuration (JSON + env vars) |
# Build the entire solution
dotnet build TaskScheduler.slnx
# Run the application
dotnet run --project TaskScheduler.App| Item | Location |
|---|---|
| SQLite Database | %LOCALAPPDATA%\TaskSchedulerApp\TaskScheduler.db (Windows) |
~/.local/share/TaskSchedulerApp/ (Linux/macOS) |
|
| Log Files | ./Logs/log-{yyyyMMdd}.txt (rolling daily, 365-day retention) |
TaskScheduler.App/appsettings.json:
{
"Instance": "TaskSchedulerApp",
"Database": {
"connectionString": "Data Source=TaskScheduler.db"
},
"Serilog": {
"MinimumLevel": { "Default": "Debug" }
}
}