Windows 下修改DLL(Exe)的版本號資訊

2021-10-02 02:10:49 字數 2484 閱讀 1184

軟體需要更新,需要修改dll或者exe 的版本號,很多時候依賴vs2008 這樣的ide中去修改,然後編譯生成。

下面說的方法是通過寫**區修改二進位制檔案來達到修改版本號的目的。

主要步驟如下:

1. 獲取檔案頭資訊大小

2.獲取檔案頭資訊內容

3.根據獲取的資訊內容,通過verqueryvalue函式去獲取語言資訊

4..根據獲取的資訊內容,通過verqueryvalue函式獲取其他資訊,如檔案版本資訊,產品版本資訊等

5.根據獲取的版本資訊,修改記憶體內容

6. 通過beginupdateresource,updateresource,endupdateresource 完成資源更新

下面是主要**:

其中cversion 類是為了將輸入的字串資訊分割成4位的數字而已,**中的version.getversion(1) 就是獲取版本的第2位.

#include "stdafx.h"

#include #include "version.h"

typedef struct _taglanguage

taglanguage, * lplanguage;

int _tmain(int argc, _tchar* ar**)

tchar* filename = ar**[1];

tchar* version = ar**[2];

//cversion 類,將字串「1234,456,789,1110」的版本資訊轉換成數字,可以自行編寫**

cversion version(version);

dword dwverhnd = 0;

//先獲取整個檔案版本資訊的大小

dword dwverinfosize = getfileversioninfosize(filename, &dwverhnd);

//根據大小來申請記憶體

tchar *verinfo = new tchar[dwverinfosize];

//獲取檔案版本資訊,這些資訊存在剛剛申請的記憶體中,修改版本資訊通過直接修改記憶體後一次性將版本資訊更新

bool res = getfileversioninfo(filename,0,dwverinfosize,verinfo);

if (!res)

//首先在獲取的版本資訊中讀取語言資訊,因為修改版本資訊需要用到

lplanguage language = null;

uint size = 0;

verqueryvalue(verinfo,_t("\\varfileinfo\\translation"),(lpvoid*)&language,&size);

//讀取檔案版本資訊

vs_fixedfileinfo* fixedfileinfo=null;

verqueryvalue(verinfo,_t("\\"),(lpvoid*)&fixedfileinfo,&size);

tchar tempbuf[max_path]=;

if (fixedfileinfo)

//讀取stringfileinfo中的資訊資訊

tchar *productver = null;

tchar *filever = null;

_stprintf_s(tempbuf,_t("\\stringfileinfo\\%04x%04x\\fileversion"),language->wlanguage,language->wcodepage);

verqueryvalue(verinfo,tempbuf,(lpvoid*)&filever,&size);

_stprintf_s(tempbuf,_t("\\stringfileinfo\\%04x%04x\\productversion"),language->wlanguage,language->wcodepage);

verqueryvalue(verinfo,tempbuf,(lpvoid*)&productver,&size);

size_t productlength = _tcslen(productver);

size_t filelength = _tcslen(filever);

if (_tcslen(version)>productlength)

if (_tcslen(version)>filelength)

//修改記憶體

_tcscpy_s(productver,productlength+1,version);

_tcscpy_s(filever,filelength+1,version);

//上面都是讀取與修改,這裡才是更新資源

handle hresource = beginupdateresource(filename, false);

if (null != hresource)

endupdateresource(hresource, false);

} return 0;

}

windows下修改mysql root賬戶密碼

1.關閉正在執行的mysql。2.開啟dos視窗,轉到mysql bin目錄。3.輸入 mysqld nt skip grant tables 回車。如果沒有出現提示資訊,那就對了。4.再開乙個dos視窗 因為剛才那個dos視窗已經不能動了 轉到mysql bin目錄。5.輸入mysql回車,如果成...

Windows下修改mysql時區

首先是檢視mysql的時區 mysql show variables like time zone 發現時區如下 variable name value system time zone time zone system 網上很多教程用如下的命令修改只是暫時的,過後還會恢復原來的 至少我電腦是這樣的...

Windows下MySQL修改Data存放路徑

1.正常安裝並配置mysql 2.新建想修改的資料庫安裝目錄如d mysql data 3.拷貝c programdata mysql mysql server 5.6 data下所有檔案到d mysql data 4.找到mysql軟體的安裝目錄預設為c programdata mysql mys...