优化安装包脚本版本信息为文件版本

This commit is contained in:
2026-05-20 09:22:48 +08:00
parent da6587502c
commit 4c51a7f8d5
3 changed files with 24 additions and 29 deletions

View File

@@ -33,11 +33,6 @@ extern TCHAR g_szFolderName[MAX_PATH] = { 0 };
const UINT DEFAULT_MAJOR_WHEN_NO_TAG = 1; const UINT DEFAULT_MAJOR_WHEN_NO_TAG = 1;
const UINT DEFAULT_MINOR_WHEN_NO_TAG = 0; const UINT DEFAULT_MINOR_WHEN_NO_TAG = 0;
#ifdef DEBUG
#define RC_DIR _T("F:\\Code\\HS\\SHWS_dev\\SHWS\\")
#define RC_NAME _T("SHWS")
#endif
int HandleSetVerCommand(int argc, TCHAR* argv[]); int HandleSetVerCommand(int argc, TCHAR* argv[]);
/// <summary> /// <summary>
@@ -555,10 +550,6 @@ void GetDirInfo()
_stprintf_s(g_szFolderName, _T("%s"), strVal.GetString()); _stprintf_s(g_szFolderName, _T("%s"), strVal.GetString());
} }
#ifdef _DEBUG
_stprintf_s(g_szFolderName, RC_NAME);
_stprintf_s(g_szCurModuleDir, RC_DIR);
#endif
SetCurrentDirectory(g_szCurModuleDir); SetCurrentDirectory(g_szCurModuleDir);
} }
@@ -639,7 +630,7 @@ int HandleSetVerCommand(int argc, TCHAR* argv[])
if (nSetupType >= 0) if (nSetupType >= 0)
{ {
// -setup=N 存在:不回写版本信息到项目文件,只修改安装脚本并编译 // -setup=N 存在:不回写版本信息到项目文件,只修改安装脚本并编译
if (!ExecuteSetupBuild(nSetupType, strProductVersion)) if (!ExecuteSetupBuild(nSetupType, strProductVersion, strFileVersion))
{ {
return 38; return 38;
} }
@@ -777,11 +768,7 @@ int HandleRewriteCommand(int argc, TCHAR* argv[])
_tprintf(_T("项目类型: %s\n"), GetProjectCodeTypeName(nCodeType)); _tprintf(_T("项目类型: %s\n"), GetProjectCodeTypeName(nCodeType));
#ifdef _DEBUG
CString strValue = StartProcess(NULL, _T("cmd /c git rev-parse --short HEAD"), RC_DIR);
#else
CString strValue = StartProcess(NULL, _T("cmd /c git rev-parse --short HEAD"), NULL); CString strValue = StartProcess(NULL, _T("cmd /c git rev-parse --short HEAD"), NULL);
#endif
strValue.Replace(_T("\n"), _T("")); strValue.Replace(_T("\n"), _T(""));
strValue.Replace(_T("\r"), _T("")); strValue.Replace(_T("\r"), _T(""));
strValue.Trim(); strValue.Trim();

View File

@@ -106,7 +106,7 @@ static BOOL FindSetupScript(int nSetupType, CString& strScriptPath)
/// <summary> /// <summary>
/// 修改 .iss 脚本中的 AppVersion= 行。 /// 修改 .iss 脚本中的 AppVersion= 行。
/// </summary> /// </summary>
static BOOL ModifyIssScript(const CString& strScriptPath, const CString& strProductVersion) static BOOL ModifyIssScript(const CString& strScriptPath, const CString& strFileVersion)
{ {
std::string strContent; std::string strContent;
std::string strBomPrefix; std::string strBomPrefix;
@@ -116,17 +116,17 @@ static BOOL ModifyIssScript(const CString& strScriptPath, const CString& strProd
return FALSE; return FALSE;
} }
const std::string strToken = "AppVersion="; const std::string strToken = "#define MyAppVersion ";
if (strContent.find(strToken) == std::string::npos) if (strContent.find(strToken) == std::string::npos)
{ {
_tprintf(_T("错误: .iss 文件中未找到 AppVersion= 行: %s\n"), strScriptPath.GetString()); _tprintf(_T("错误: .iss 文件中未找到 #define MyAppVersion 行: %s\n"), strScriptPath.GetString());
return FALSE; return FALSE;
} }
std::string strNewLine = "AppVersion=" + ToAnsiString(strProductVersion.GetString()); std::string strNewLine = "#define MyAppVersion \"" + ToAnsiString(strFileVersion.GetString()) + "\"";
if (!ReplaceLineByToken(strContent, strToken, strNewLine)) if (!ReplaceLineByToken(strContent, strToken, strNewLine))
{ {
_tprintf(_T("错误: 替换 .iss AppVersion= 行失败。\n")); _tprintf(_T("错误: 替换 .iss #define MyAppVersion 行失败。\n"));
return FALSE; return FALSE;
} }
@@ -136,7 +136,7 @@ static BOOL ModifyIssScript(const CString& strScriptPath, const CString& strProd
return FALSE; return FALSE;
} }
_tprintf(_T("成功: 已更新 .iss AppVersion=%s\n"), strProductVersion.GetString()); _tprintf(_T("成功: 已更新 .iss #define MyAppVersion \"%s\"\n"), strFileVersion.GetString());
return TRUE; return TRUE;
} }
@@ -147,7 +147,7 @@ static BOOL ModifyIssScript(const CString& strScriptPath, const CString& strProd
/// <summary> /// <summary>
/// 修改 .nsh 脚本中的 !define PRODUCT_VERSION 行。 /// 修改 .nsh 脚本中的 !define PRODUCT_VERSION 行。
/// </summary> /// </summary>
static BOOL ModifyNshScript(const CString& strScriptPath, const CString& strProductVersion) static BOOL ModifyNshScript(const CString& strScriptPath, const CString& strFileVersion)
{ {
std::string strContent; std::string strContent;
std::string strBomPrefix; std::string strBomPrefix;
@@ -164,7 +164,7 @@ static BOOL ModifyNshScript(const CString& strScriptPath, const CString& strProd
return FALSE; return FALSE;
} }
std::string strNewLine = "!define PRODUCT_VERSION \"" + ToAnsiString(strProductVersion.GetString()) + "\""; std::string strNewLine = "!define PRODUCT_VERSION \"" + ToAnsiString(strFileVersion.GetString()) + "\"";
if (!ReplaceLineByToken(strContent, strToken, strNewLine)) if (!ReplaceLineByToken(strContent, strToken, strNewLine))
{ {
_tprintf(_T("错误: 替换 .nsh PRODUCT_VERSION 行失败。\n")); _tprintf(_T("错误: 替换 .nsh PRODUCT_VERSION 行失败。\n"));
@@ -177,7 +177,7 @@ static BOOL ModifyNshScript(const CString& strScriptPath, const CString& strProd
return FALSE; return FALSE;
} }
_tprintf(_T("成功: 已更新 .nsh PRODUCT_VERSION=%s\n"), strProductVersion.GetString()); _tprintf(_T("成功: 已更新 .nsh PRODUCT_VERSION=%s\n"), strFileVersion.GetString());
return TRUE; return TRUE;
} }
@@ -250,8 +250,11 @@ static CString FindNsisCompiler()
// 不回写版本信息到项目文件,只修改安装脚本并调用编译器打包。 // 不回写版本信息到项目文件,只修改安装脚本并调用编译器打包。
// ───────────────────────────────────────────── // ─────────────────────────────────────────────
BOOL ExecuteSetupBuild(int nSetupType, const CString& strProductVersion) BOOL ExecuteSetupBuild(int nSetupType, const CString& strProductVersion, const CString& strFileVersion)
{ {
#ifdef _DEBUG
Sleep(1500);
#endif
// 查找安装脚本 // 查找安装脚本
CString strScriptPath; CString strScriptPath;
if (!FindSetupScript(nSetupType, strScriptPath)) if (!FindSetupScript(nSetupType, strScriptPath))
@@ -264,8 +267,8 @@ BOOL ExecuteSetupBuild(int nSetupType, const CString& strProductVersion)
// 修改脚本中的版本号(不写回 .rc / AssemblyInfo.cs // 修改脚本中的版本号(不写回 .rc / AssemblyInfo.cs
BOOL bModifyOk = (nSetupType == 0) BOOL bModifyOk = (nSetupType == 0)
? ModifyIssScript(strScriptPath, strProductVersion) ? ModifyIssScript(strScriptPath, strFileVersion)
: ModifyNshScript(strScriptPath, strProductVersion); : ModifyNshScript(strScriptPath, strFileVersion);
if (!bModifyOk) if (!bModifyOk)
{ {
@@ -320,6 +323,9 @@ BOOL ExecuteSetupBuild(int nSetupType, const CString& strProductVersion)
int HandleSetupCommand(int argc, TCHAR* argv[]) int HandleSetupCommand(int argc, TCHAR* argv[])
{ {
#ifdef _DEBUG
Sleep(15000);
#endif
// 解析 -setup=n 中的 n // 解析 -setup=n 中的 n
CString strSetupArg = argv[1]; CString strSetupArg = argv[1];
CString strN = strSetupArg.Mid(7); // 跳过 "-setup=" CString strN = strSetupArg.Mid(7); // 跳过 "-setup="
@@ -355,8 +361,8 @@ int HandleSetupCommand(int argc, TCHAR* argv[])
return nRepoArgRet; return nRepoArgRet;
} }
CString strProductVersion;
CString strFileVersion; CString strFileVersion;
CString strProductVersion;
VersionBuildErrorCodes errorCodes = { 5, 6, 9 }; VersionBuildErrorCodes errorCodes = { 5, 6, 9 };
int nVersionRet = BuildVersionsFromRepo( int nVersionRet = BuildVersionsFromRepo(
lpRepoPath, lpRepoPath,
@@ -366,6 +372,7 @@ int HandleSetupCommand(int argc, TCHAR* argv[])
strFileVersion, strFileVersion,
DEFAULT_MAJOR_WHEN_NO_TAG_FOR_SETUP, DEFAULT_MAJOR_WHEN_NO_TAG_FOR_SETUP,
DEFAULT_MINOR_WHEN_NO_TAG_FOR_SETUP); DEFAULT_MINOR_WHEN_NO_TAG_FOR_SETUP);
if (nVersionRet != 0) if (nVersionRet != 0)
{ {
return nVersionRet; return nVersionRet;
@@ -382,10 +389,11 @@ int HandleSetupCommand(int argc, TCHAR* argv[])
_tprintf(_T("[测试版本] 已将 major/minor 置零: ProductVersion=%s\n"), strProductVersion.GetString()); _tprintf(_T("[测试版本] 已将 major/minor 置零: ProductVersion=%s\n"), strProductVersion.GetString());
} }
_tprintf(_T("FileVersion=%s\n"), strFileVersion.GetString());
_tprintf(_T("ProductVersion=%s\n"), strProductVersion.GetString()); _tprintf(_T("ProductVersion=%s\n"), strProductVersion.GetString());
// 不回写版本信息到项目文件,直接修改安装脚本并编译打包 // 不回写版本信息到项目文件,直接修改安装脚本并编译打包
if (!ExecuteSetupBuild((int)nSetupType, strProductVersion)) if (!ExecuteSetupBuild((int)nSetupType, strProductVersion, strFileVersion))
{ {
return 38; return 38;
} }

View File

@@ -6,7 +6,7 @@
/// 不写回项目版本文件(.rc / AssemblyInfo.cs /// 不写回项目版本文件(.rc / AssemblyInfo.cs
/// </summary> /// </summary>
/// <returns>TRUE 成功FALSE 失败(错误已打印)。</returns> /// <returns>TRUE 成功FALSE 失败(错误已打印)。</returns>
BOOL ExecuteSetupBuild(int nSetupType, const CString& strProductVersion); BOOL ExecuteSetupBuild(int nSetupType, const CString& strProductVersion, const CString& strFileVersion);
/// <summary> /// <summary>
/// 处理独立的 -setup=n 命令行入口。 /// 处理独立的 -setup=n 命令行入口。