115 lines
3.7 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <QCoreApplication>
#include <QTextStream>
#include <QDate>
#include <QString>
#include "AuthManager.h"
#include "AuthConfig.h"
#pragma execution_character_set("utf-8")
// 打印使用说明
void printUsage(const QString& programName)
{
QTextStream out(stdout);
out << QString::fromUtf8("授权码生成工具 - 自动获取本机机器码并保存授权") << "\n";
out << QString::fromUtf8("用法: ") << programName << " [过期日期]\n";
out << "\n";
out << QString::fromUtf8("参数说明:\n");
out << QString::fromUtf8(" 过期日期 - 可选,格式为 yyyyMMdd如 20251231\n");
out << QString::fromUtf8(" 不指定则为永久授权\n");
out << "\n";
out << QString::fromUtf8("示例:\n");
out << QString::fromUtf8(" %1\n").arg(programName);
out << QString::fromUtf8(" 生成永久授权码并保存\n");
out << QString::fromUtf8(" %1 20251231\n").arg(programName);
out << QString::fromUtf8(" 生成截止到 2025年12月31日 的授权码并保存\n");
out.flush();
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QTextStream out(stdout);
QTextStream err(stderr);
// 检查是否请求帮助
if (argc >= 2) {
QString arg1 = QString::fromLocal8Bit(argv[1]);
if (arg1 == "-h" || arg1 == "--help" || arg1 == "/?") {
printUsage(argv[0]);
return 0;
}
}
// 自动获取本机机器码
std::string machineCodeStd = AuthManager::GetMachineCode();
QString machineCode = QString::fromStdString(machineCodeStd);
if (machineCode.isEmpty()) {
err << QString::fromUtf8("错误: 无法获取本机机器码\n");
err.flush();
return 1;
}
QString expireDate;
// 解析过期日期参数
if (argc >= 2) {
expireDate = QString::fromLocal8Bit(argv[1]);
// 验证日期格式
if (expireDate.length() != 8) {
err << QString::fromUtf8("错误: 过期日期格式错误,应为 yyyyMMdd如 20251231\n");
err.flush();
return 1;
}
// 验证日期是否有效
QDate date = QDate::fromString(expireDate, "yyyyMMdd");
if (!date.isValid()) {
err << QString::fromUtf8("错误: 无效的日期: ") << expireDate << "\n";
err.flush();
return 1;
}
// 检查日期是否已过期
if (date < QDate::currentDate()) {
err << QString::fromUtf8("警告: 指定的日期已过期: ") << expireDate << "\n";
err.flush();
}
} else {
// 永久授权
expireDate = PERMANENT_LICENSE_DATE;
}
// 生成授权码
std::string licenseKey = AuthManager::GenerateLicenseKey(
machineCodeStd,
expireDate.toStdString()
);
// 保存授权信息
bool saveResult = AuthManager::SaveLicenseInfo(licenseKey, expireDate.toStdString());
// 输出结果
out << QString::fromUtf8("机器码: ") << machineCode << "\n";
if (expireDate == PERMANENT_LICENSE_DATE) {
out << QString::fromUtf8("授权类型: 永久授权\n");
} else {
QDate date = QDate::fromString(expireDate, "yyyyMMdd");
out << QString::fromUtf8("过期日期: ") << date.toString("yyyy-MM-dd") << "\n";
}
out << QString::fromUtf8("授权码: ") << QString::fromStdString(licenseKey) << "\n";
if (saveResult) {
out << QString::fromUtf8("状态: 授权信息已保存成功\n");
} else {
err << QString::fromUtf8("错误: 授权信息保存失败\n");
err.flush();
return 1;
}
out.flush();
return 0;
}