此文章为<Windows服务静态部署>的Nginx篇,MySQL可参考
Windows服务静态部署之MySQL篇(一)-CSDN博客
一、下载Nginx静态包
下载地址:
下载稳定版本
解压nginx-1.26.3.zip,更名为nginx,复制到安装包根目录
二、界面设计
- 启动时加载配置,修改配置,然后使用Save按键保存配置
- Start按键启动/停止Nginx服务
三、代码设计
#ifndef NGINXTABWIDGET_H
#define NGINXTABWIDGET_H
#include "ui_widget.h"
#include "com.h"
class NginxTabWidget
{
public:
NginxTabWidget();
void Init(Ui::Widget *ui);
void Deinit();
public:
void Config();
void StartOrStop();
protected:
void ReFresh();
private:
Com _com;
Ui::Widget *_ui;
};
#endif // NGINXTABWIDGET_H
#include "nginx.h"
#include <QDir>
#include <QDebug>
NginxTabWidget::NginxTabWidget()
{
}
void NginxTabWidget::Init(Ui::Widget *ui){
_ui=ui;
ReFresh();
}
void NginxTabWidget::Deinit(){
if(_com.TaskList("nginx.exe")){
QStringList args;
args.append("/f");
args.append("/im");
args.append("nginx.exe");
QString result;
_com.Execute("taskkill.exe",args,result);
qDebug()<<result;
result="";
}
}
void NginxTabWidget::Config(){
QString nginxConfigPath = QDir::toNativeSeparators(QCoreApplication::applicationDirPath()+"\\nginx\\conf\\nginx.conf");
_com.WriteFile(nginxConfigPath,_ui->NginxConfigTextBrowser->toPlainText());
}
void NginxTabWidget::StartOrStop(){
QString nginxExe = QDir::toNativeSeparators(QCoreApplication::applicationDirPath()+"\\nginx\\nginx.exe");
QString nginxConfig = QDir::toNativeSeparators(QCoreApplication::applicationDirPath()+"\\nginx\\conf\\nginx.conf");
QString result;
if(_ui->NginxStartBtn->text()=="Start"){
QString currentDir = QDir::toNativeSeparators(QCoreApplication::applicationDirPath());
QString targetDir = QDir::toNativeSeparators(QCoreApplication::applicationDirPath()+"\\nginx");
if (QDir::setCurrent(targetDir)) {
qDebug() << "Working directory set to:" << QDir::currentPath();
} else {
qDebug() << "Failed to set working directory to:" << currentDir+"\\nginx";
}
QStringList args;
args.append("-c");
args.append(nginxConfig);
_com.Execute(nginxExe,args,result);
if (QDir::setCurrent(currentDir)) {
qDebug() << "Working directory set to:" << QDir::currentPath();
} else {
qDebug() << "Failed to set working directory to:" << currentDir+"\\nginx";
}
qDebug()<<result;
result="";
}else{
QStringList args;
args.append("/f");
args.append("/im");
args.append("nginx.exe");
_com.Execute("taskkill.exe",args,result);
qDebug()<<result;
result="";
}
ReFresh();
}
void NginxTabWidget::ReFresh(){
if(_com.TaskList("nginx.exe")){
_ui->NginxStartBtn->setText("Stop");
}else{
_ui->NginxStartBtn->setText("Start");
}
QString nginxConfigPath = QDir::toNativeSeparators(QCoreApplication::applicationDirPath()+"\\nginx\\conf\\nginx.conf");
_ui->NginxConfigTextBrowser->setText(_com.ReadFile(nginxConfigPath));
_ui->NginxConfigTextBrowser->setEnabled(true);
_ui->NginxConfigTextBrowser->setReadOnly(false);
}
四、测试
注意事项,每次运行Nginx时将当前路径切换到nginx目录中,否则会运行失败,该问题调试时间比较长,未找到更好的实现方式。