1、先去下载绿色版的Mysql(https://cdn.mysql.com//archives/mysql-5.7/mysql-5.7.20-winx64.zip)
2、解压缩到任意目录(如D:Mysql),并保证此目录是根目录,即访问bin目录的访问路径是(D:Mysqlin)
3、在D:Mysql下建立一个文本文件(编码格式为ANSI,不要Utf8格式,否则会乱码)
4、写入以下批处理代码
echo off del my.ini echo [mysqld]>>my.ini echo port=3306>>my.ini echo character-set-server=utf8mb4>>my.ini echo default-storage-engine=INNODB>>my.ini set CURRENT_DIR=%CD% set CURRENT_DIR=%CURRENT_DIR:=\% echo basedir="%CURRENT_DIR%\">>my.ini echo datadir="%CURRENT_DIR%\data\">>my.ini echo "set basedir parameter coplete" cd %CURRENT_DIR%in mysqld --install mysql --defaults-file="%CURRENT_DIR%\my.ini"
5、重命名新建的文本文件为批处理文件名格式,如 1.txt重命名为 1.bat
6、双击运行1.bat,如果没有报错,则运行成功,可以通过数据库管理客户端连接。
7、使用C#代码在程序中自动注册(运行上面的bat批处理)Mysql服务和启动Mysql服务(WPF环境下,如其它环境,则去掉Wpf下的关键字即可使用,前提是有权限调用cmd和有权限安装服务)
try
{
//安装服务
var proc = new Process();
var info = new ProcessStartInfo("cmd.exe")
{
WorkingDirectory = $@"{AppDomain.CurrentDomain.BaseDirectory}MySQL",
FileName = $@"{AppDomain.CurrentDomain.BaseDirectory}MySQL
unmysql.bat",
UseShellExecute = true,
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = true
};
proc.StartInfo = info;
proc.Start();
//var output = proc.StandardOutput.ReadToEnd();//读取进程的输出
//Console.WriteLine(output);
proc.WaitForExit();
Dispatcher?.Invoke(() =>
{
lb_info.Text += @"【成功】" + Environment.NewLine;
});
}
catch (Exception ex)
{
App.Log4Helper.Error("服务安装失败:" + ex.Message);
App.Log4Helper.Error(ex.Message);
Dispatcher?.Invoke(() =>
{
lb_info.Text += @"【失败】" + Environment.NewLine;
});
}
//启动服务
var serviceController = new ServiceController("mysql");
if (serviceController.Status != ServiceControllerStatus.Running)
{
Dispatcher?.Invoke(() =>
{
lb_info.Text += @"数据库启动...";
});
try
{
serviceController.Start();
serviceController.WaitForStatus(ServiceControllerStatus.Running, new TimeSpan(0, 0, 0, 15));
if (serviceController.Status != ServiceControllerStatus.Running)
{
MessageBox.Show(@"数据库服务启动失败,请检查数据库服务配置文件。", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
Environment.Exit(0);
return;
}
Dispatcher?.Invoke(() =>
{
lb_info.Text += @"【成功】" + Environment.NewLine;
});
}
catch (Exception ex)
{
App.Log4Helper.Error("数据库启动失败:" + ex.Message);
App.Log4Helper.Error(ex.Message);
Dispatcher?.Invoke(() =>
{
lb_info.Text += @"【失败】" + Environment.NewLine;
});
}
}
PS: set CURRENT_DIR=%CURRENT_DIR:=\% 这句的意思是把目录里面所有转换成\,防止遇到类似于 in这种目录路径的时候把给转义了,下面的\都是这个用途,防止转义。