Files
2025-08-26 08:37:44 +08:00

93 lines
3.4 KiB
C#

using Microsoft.Win32.TaskScheduler;
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using Ursa.Controls;
using .Base;
namespace .ViewModel._04破解及系统相关
{
public class MySQL定时备份ViewModel : ViewModelBase
{
public string FilePath { get; set; } = "";
public string UserName { get; set; } = "root";
public string Password { get; set; } = "root";
public string DatabaseName { get; set; } = "test";
public TimeSpan SelectedTime { get; set; } = TimeSpan.Zero;
public string BackPath { get; set; } = "d:/test.sql";
public DelegateCommand FindPathCmd { get; set; }
public DelegateCommand CreateBackPlanCmd { get; set; }
public MySQL定时备份ViewModel()
{
FindPathCmd = new DelegateCommand(FindPathCmdFunc);
CreateBackPlanCmd = new DelegateCommand(CreateBackPlanCmdFunc);
}
private void FindPathCmdFunc(object obj)
{
try
{
Process process = Process.GetProcesses().Where(it => it.ProcessName.ToLower().Contains("mysql")).FirstOrDefault();
if (process == null)
{
MessageBox.ShowAsync("找不到MySQL安装路径");
return;
}
string path = process.MainModule.FileName;
path = Directory.GetParent(path).FullName;
FilePath = path;
}
catch
{
MessageBox.ShowAsync("找不到MySQL安装路径");
}
}
private void CreateBackPlanCmdFunc(object obj)
{
string binPath = FilePath.Replace("\\", "/");
if (string.IsNullOrEmpty(binPath))
{
MessageBox.ShowAsync("请输入mysqldump所在目录");
return;
}
if (!binPath.EndsWith("/"))
{
binPath = binPath + "/";
}
if (!Directory.Exists(binPath))
{
MessageBox.ShowAsync("mysqldump所在目录不存在");
return;
}
string userName = UserName;
string password = Password;
string dbName = DatabaseName;
string backupFile = BackPath;
string cmd = $"mysqldump -u {userName} -p{password} {dbName} > {backupFile}";
string batPath = $"{dbName}_back.bat";
File.WriteAllText(binPath + batPath, cmd);
using (TaskService ts = new TaskService())
{
// 创建新的任务定义并指定任务的名称
TaskDefinition td = ts.NewTask();
td.RegistrationInfo.Description = "MySQL定时备份";
// 创建触发器,设置为每天的特定时间
DailyTrigger dailyTrigger = new DailyTrigger();
dailyTrigger.StartBoundary = DateTime.Today.Add(SelectedTime); //指定时间
td.Triggers.Add(dailyTrigger);
// 创建操作 - 运行一个程序
td.Actions.Add(new ExecAction(batPath, "", binPath));
// 注册任务到根文件夹下
ts.RootFolder.RegisterTaskDefinition("MySQLBackup", td);
}
GlobalValues.Success("已创建备份计划");
}
}
}