Commit 27a24851 by 刘帅

适配linux环境,验证更新机制正常,守护适配TODO

parent 5b0d2f6f
......@@ -29,7 +29,11 @@ int main(int argc, char *argv[])
qDebug() << "\r\n\r\n\r\n";
QString appDir = QCoreApplication::applicationDirPath();
#ifdef WIN32
QString fmscupdPath = QString("%1/fmscupd.exe").arg(appDir);
#else
QString fmscupdPath = QString("%1/fmscupd").arg(appDir);
#endif
QFile dInfoFile(QString("%1/download/dfilesInfo.txt").arg(appDir));
QFile resultFile(QString("%1/download/updateresult.txt").arg(appDir));
QStringList dFilesInfo, bUpdFiles;
......@@ -37,7 +41,7 @@ int main(int argc, char *argv[])
bool updateReault = true;
// 关闭服务
QProcess::execute(fmscupdPath, QStringList("-t"));
//QProcess::execute(fmscupdPath, QStringList("-t"));
// 开始替换文件
if(dInfoFile.open(QIODevice::ReadOnly))
......@@ -85,6 +89,12 @@ int main(int argc, char *argv[])
if(QFile().copy(downloadFile, oldFile))
{
#ifdef WIN32
#else
char szCmd[256];
sprintf(szCmd, "chmod a+x %s", oldFile.toStdString().c_str());
system(szCmd); //添加文件执行权限
#endif
qDebug() << "copy file successful";
}else
{
......@@ -119,6 +129,6 @@ end:
resultFile.close();
}
// 启动服务
QProcess::startDetached(fmscupdPath, QStringList(fmscupdPath));
//QProcess::startDetached(fmscupdPath, QStringList(fmscupdPath));
return 0;
}
#ifndef FM_DUMP_H
#define FM_DUMP_H
#ifdef WIN32
#include <windows.h>
#include <DbgHelp.h>
#include <schannel.h>
......@@ -52,5 +54,6 @@ long __stdcall FMExcpHandler(PEXCEPTION_POINTERS excp)
return EXCEPTION_EXECUTE_HANDLER;
}
#endif
#endif // DUMP
......@@ -11,9 +11,11 @@
#include <QCryptographicHash>
#include <QFile>
#include <QDir>
#ifdef WIN32
#include <windows.h>
#include <tlhelp32.h>
#include <Userenv.h>
#endif
#include <QProcess>
#include "JlCompress.h"
......@@ -65,6 +67,7 @@ void FmControl::onKeepProcess()
bool FmControl::_GetDiedProcess(const QStringList &exeList, QStringList &diedProcList, QString &error)
{
#ifdef WIN32
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
......@@ -92,11 +95,13 @@ bool FmControl::_GetDiedProcess(const QStringList &exeList, QStringList &diedPro
}
}
::CloseHandle(hProcessSnap);
#endif
return true;
}
bool FmControl::_LaunchProcess(const QString &exePath, QString& error)
{
#ifdef WIN32
// 在XP下用户环境可能没有wtsapi32.dll,XP下可直接调用程序
typedef BOOL (WINAPI *_pfnWTSQueryUserToken)( ULONG SessionId, PHANDLE phToken );
_pfnWTSQueryUserToken pfnWTSQueryUserToken = NULL;
......@@ -162,6 +167,8 @@ bool FmControl::_LaunchProcess(const QString &exePath, QString& error)
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return true;
#else
#endif
}
void FmControl::onCheckUpdate()
......@@ -294,10 +301,15 @@ void FmControl::onCheckUpdate()
file.close();
// 调用文件替换程序
#ifdef WIN32
QString porterPath = QString("%1/fmporter.exe").arg(m_appDir);
#else
QString porterPath = QString("%1/fmporter").arg(m_appDir);
#endif
QLOG_INFO() << QString("process be killed launch [%1]").arg(porterPath);
if(QProcess::startDetached(porterPath, QStringList(porterPath)))
{
QTimer::singleShot(30000, this, &FmControl::onCheckUpdate);
return;
}else
{
......@@ -449,6 +461,7 @@ bool FmControl::_UnzipFile(const QString &zipFile)
bool FmControl::_KillProcess(const QStringList &exeList, QString &error)
{
#ifdef WIN32
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
......@@ -482,5 +495,8 @@ bool FmControl::_KillProcess(const QStringList &exeList, QString &error)
}
::CloseHandle(hProcessSnap);
return true;
#else
return true;
#endif
}
include("QsLog/QsLog.pri")
include("QtService/src/qtservice.pri")
include("Quazip/quazip.pri")
include("qslog/QsLog.pri")
include("qtservice/src/qtservice.pri")
include("quazip/quazip.pri")
QT += core network sql xml
QT -= gui
......@@ -45,15 +45,19 @@ OTHER_FILES += \
INCLUDEPATH += $$PWD/../include/zlib
LIBS += -lUserenv -ldbghelp
CONFIG(debug,debug|release) {
win32{
LIBS += -lUserenv -ldbghelp
CONFIG(debug,debug|release) {
LIBS += -L$$PWD/../lib -lzlibstaticd
}
else {
}
else {
LIBS += -L$$PWD/../lib -lzlibstatic
QMAKE_LFLAGS += /DEBUG
}
}
else{
LIBS += -lz
}
#LIBS += -lz
win32 {
......
......@@ -19,7 +19,9 @@ public:
setServiceDescription(QString::fromLocal8Bit(SERVICE_DESC));
setStartupType(QtServiceController::AutoStartup);
#ifdef WIN32
SetUnhandledExceptionFilter(FMExcpHandler);
#endif
}
protected:
......
......@@ -18,6 +18,7 @@ FmTools &FmTools::GetInstance()
FmTools::FmTools()
{
QString iniPath = QString("%1/%2").arg(QCoreApplication::applicationDirPath(), INIFILE_NAME);
m_updateIniPath = QString("%1/%2").arg(QCoreApplication::applicationDirPath(), INIFILE_NAME);
m_config = new QSettings(iniPath, QSettings::IniFormat);
#ifdef BALIBEITIAN
......@@ -192,37 +193,58 @@ FmTools::~FmTools()
QStringList FmTools::GetKeepExes()
{
return m_config->value(INIPATH_EXELIST).toStringList();
QSettings* updateSettings = new QSettings(m_updateIniPath, QSettings::IniFormat);
QStringList damonList = updateSettings->value(INIPATH_EXELIST).toStringList();
delete updateSettings;
return damonList;
}
QString FmTools::GetVersion()
{
return m_config->value(INIPATH_VERSION).toString();
QSettings* updateSettings = new QSettings(m_updateIniPath, QSettings::IniFormat);
QString version = updateSettings->value(INIPATH_VERSION).toString();
delete updateSettings;
return version;
}
QString FmTools::GetPartnerId()
{
return m_config->value(INIPATH_PARTNERID).toString();
QSettings* updateSettings = new QSettings(m_updateIniPath, QSettings::IniFormat);
QString partnerId = updateSettings->value(INIPATH_PARTNERID).toString();
delete updateSettings;
return partnerId;
}
int FmTools::GetDownloadTimeout()
{
return m_config->value(INIPATH_TIMEOUT0, 300).toInt()*1000;
QSettings* updateSettings = new QSettings(m_updateIniPath, QSettings::IniFormat);
int downloadTimeout = updateSettings->value(INIPATH_TIMEOUT0, 300).toInt()*1000;
delete updateSettings;
return downloadTimeout;
}
int FmTools::GetRequestTimeout()
{
return m_config->value(INIPATH_TIMEOUT1, 20).toInt()*1000;
QSettings* updateSettings = new QSettings(m_updateIniPath, QSettings::IniFormat);
int requestTimeout = updateSettings->value(INIPATH_TIMEOUT1, 20).toInt()*1000;
delete updateSettings;
return requestTimeout;
}
QString FmTools::GetUpdateUrl()
{
return m_config->value(INIPATH_UPDATE_URL).toString();
QSettings* updateSettings = new QSettings(m_updateIniPath, QSettings::IniFormat);
QString updateUrl = updateSettings->value(INIPATH_UPDATE_URL).toString();
delete updateSettings;
return updateUrl;
}
QString FmTools::GetReportUrl()
{
return m_config->value(INIPATH_REPORT_URL).toString();
QSettings* updateSettings = new QSettings(m_updateIniPath, QSettings::IniFormat);
QString reportUrl = updateSettings->value(INIPATH_REPORT_URL).toString();
delete updateSettings;
return reportUrl;
}
QByteArray FmTools::GetUpdateData()
......
......@@ -65,6 +65,7 @@ private:
private:
QSettings *m_config;
QString m_updateIniPath;
QString m_partnerId; // 商户编号
QString m_siIniPath; // 门店信息配置文件路径
......
......@@ -5,13 +5,24 @@
int main(int argc, char *argv[])
{
FmService service(argc, argv);
service.exec();
// FmService service(argc, argv);
// service.exec();
// QCoreApplication a(argc, argv);
// FmControl m_control;
// m_control.Start();
// return a.exec();
// FmTools::GetInstance();
QCoreApplication a(argc, argv);
// 初始化日志
QString logDir = QString("%1/log").arg(QCoreApplication::applicationDirPath());
QDir().mkdir(logDir);
Logger& logger = Logger::instance();
logger.setLoggingLevel(TraceLevel);
QString logPath = QString("%1/%2").arg(logDir, "log.txt");
DestinationPtr fileDst(DestinationFactory::MakeFileDestination(
logPath, EnableLogRotation, MaxSizeBytes(2*1024*1024), MaxOldLogCount(50)));
logger.addDestination(fileDst);
FmControl m_control;
m_control.Start();
return a.exec();
// FmTools::GetInstance();
}
File added
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment