修改文件版本号方法

您所在的位置:网站首页 属性里的修订号 修改文件版本号方法

修改文件版本号方法

2024-07-13 03:56| 来源: 网络整理| 查看: 265

  鼠标右键选择文件属性可以显示详细信息, 里面可以显示版本号 : 

  修改这个版本号也简单, 可以直接用 VS 的打开文件的方式打开它(只有这样打开才是查看详细信息的) : 

  然后双击版本信息就能编辑了, 编辑后保存就能修改了 : 

  手动的也挺方便的, 不过如果要使用代码来修改, 就有点麻烦了, 我找到一份C++的代码, 修改了可以正常使用 : 

-- 使用的是 dll 导出工程, 它提供了很多库的自动引用和宏

// pch.h: 预编译标头 #ifndef PCH_H #define PCH_H #include "framework.h" #include #define LIBEXPORT_API extern "C" __declspec(dllexport) LIBEXPORT_API BOOL SetFileVersion(LPCTSTR filePath, int major, int minor, int build, int revision = 0); #endif //PCH_H // pch.cpp: 与预编译标头对应的源文件 #include "pch.h" #include #include #include #include #pragma region Write File Version Info #pragma comment(lib, "version.lib") #pragma comment(lib, "shlwapi") struct { WORD wLanguage; WORD wCodePage; } *lpTranslate; BOOL SetFileVersion(LPCTSTR filePath, int major, int minor, int build, int revision) { if (NULL == filePath || !PathFileExists(filePath)) return FALSE; BOOL bRet = FALSE; DWORD dwHandle = 0; DWORD dwSize = 0; dwSize = GetFileVersionInfoSize(filePath, &dwHandle); if (0 >= dwSize) return bRet; LPBYTE lpBuffer = new BYTE[dwSize]; memset(lpBuffer, 0, dwSize); if (GetFileVersionInfo(filePath, dwHandle, dwSize, lpBuffer) != FALSE) { HANDLE hResource = BeginUpdateResource(filePath, FALSE); if (NULL != hResource) { UINT uTemp; DWORD dwVer[4] = { 0 }; if (VerQueryValue(lpBuffer, TEXT("\\VarFileInfo\\Translation"), (LPVOID*)&lpTranslate, &uTemp) != FALSE) { LPVOID lpFixedBuf = NULL; DWORD dwFixedLen = 0; if (FALSE != VerQueryValue(lpBuffer, TEXT("\\"), &lpFixedBuf, (PUINT)&dwFixedLen)) { VS_FIXEDFILEINFO* pFixedInfo = (VS_FIXEDFILEINFO*)lpFixedBuf; long MS = (((long)major) dwFileVersionLS = LS; dwVer[0] = HIWORD(pFixedInfo->dwFileVersionMS); dwVer[1] = LOWORD(pFixedInfo->dwFileVersionMS); dwVer[2] = HIWORD(pFixedInfo->dwFileVersionLS); dwVer[3] = LOWORD(pFixedInfo->dwFileVersionLS); } // 修改版本的文本信息 LPVOID lpStringBuf = NULL; DWORD dwStringLen = 0; TCHAR szTemp[MAX_PATH] = { 0 }; TCHAR szVersion[MAX_PATH] = { 0 }; _stprintf_s(szTemp, MAX_PATH - 1, TEXT("\\StringFileInfo\\%04x%04x\\FileVersion"), lpTranslate->wLanguage, lpTranslate->wCodePage); _stprintf_s(szVersion, MAX_PATH - 1, TEXT("%d.%d.%d.%d"), dwVer[0], dwVer[1], dwVer[2], dwVer[3]); if (FALSE != VerQueryValue(lpBuffer, szTemp, &lpStringBuf, (PUINT)&dwStringLen)) memcpy(lpStringBuf, szVersion, (_tcslen(szVersion) + 1) * sizeof(TCHAR)); memset(szTemp, 0, sizeof(szTemp)); _stprintf_s(szTemp, MAX_PATH - 1, TEXT("\\StringFileInfo\\%04x%04x\\ProductVersion"), lpTranslate->wLanguage, lpTranslate->wCodePage); if (FALSE != VerQueryValue(lpBuffer, szTemp, &lpStringBuf, (PUINT)&dwStringLen)) memcpy(lpStringBuf, szVersion, (_tcslen(szVersion) + 1) * sizeof(TCHAR)); // 更新 if (UpdateResource(hResource, RT_VERSION, MAKEINTRESOURCE(VS_VERSION_INFO), lpTranslate->wLanguage, lpBuffer, dwSize) != FALSE) { if (EndUpdateResource(hResource, FALSE) != FALSE) bRet = TRUE; } } } } if (lpBuffer) delete[] lpBuffer; return bRet; } #pragma endregion Write File Version Info

  这样导出个 dll 就能用了 : 

[System.Runtime.InteropServices.DllImport("XXXX.dll")] public static extern bool SetFileVersion([MarshalAsAttribute(UnmanagedType.LPWStr)] string filePath, int major, int minor, int build, int revision = 0);

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3