実行時にWindowsのexe/dllに保存されているバージョン情報を取得するにはどうすればよいですか?この情報は、リソースファイルを使用して手動で設定されます。ここでWindows EXEまたはDLLのバージョン番号を取得する方法を教えてください。
5
A
答えて
6
は、標準のWindows API関数を使用して、それを行うのC++の方法です:
try
{
TCHAR szFileName[ MAX_PATH ];
if(!::GetModuleFileName(0, szFileName, MAX_PATH))
throw __LINE__;
DWORD nParam;
DWORD nVersionSize = ::GetFileVersionInfoSize(szFileName, &nParam);
if(!nVersionSize)
throw __LINE__;
HANDLE hMem = ::GetProcessHeap();
if(!hMem)
throw __LINE__;
LPVOID lpVersionData = ::HeapAlloc(hMem, 0, nVersionSize);
if(!lpVersionData)
throw __LINE__;
if(!::GetFileVersionInfo(szFileName, 0, nVersionSize, lpVersionData))
throw __LINE__;
LPVOID pVersionInfo;
UINT nSize;
if(!::VerQueryValue(lpVersionData, _T("\\"), &pVersionInfo, &nSize))
throw __LINE__;
VS_FIXEDFILEINFO *pVSInfo = (VS_FIXEDFILEINFO *)pVersionInfo;
CString strVersion;
strVersion.Format(_T(" version %i.%i.%i.%i"),
pVSInfo->dwProductVersionMS >> 16,
pVSInfo->dwProductVersionMS & 0xFFFF,
pVSInfo->dwProductVersionLS >> 16,
pVSInfo->dwProductVersionLS & 0xFFFF
);
GetDlgItem(IDC_ABOUT_VERSION)->SetWindowText(strAppName + strVersion);
if(!HeapFree(hMem, 0, lpVersionData))
throw __LINE__;
}
catch(int err)
{
ASSERT(!err); // always break on debug builds to inspect error codes and such
DWORD dwErr = ::GetLastError();
// handle memory cleanup...
}
注キャッチ部分は純粋に教育的であること - あなたが希望実際の状況に適切にクリーンアップメモリ割り当ての後実際にはエラーコードを使用してください!
2
バレンタインの答えは正しいですが、メモリリークの可能性についてのコメント投稿者の台座の警告です。
なぜこの日と年齢で:: HeapAllocを使用するのかわかりません。
ここでは、IMHOがより安全でクリーンな方法で同じことをするために新しいとboost :: shared_arrayを使用するスニペットを示します。ここで
#include <boost/shared_array.hpp>
//.....
DWORD dwHandle;
DWORD dwFileVersionInfoSize = GetFileVersionInfoSize((LPTSTR)lpszFileName, &dwHandle);
if (!dwFileVersionInfoSize)
return FALSE;
// ensure our data will be deleted
boost::shared_array<BYTE> data(new BYTE[dwFileVersionInfoSize]);
LPVOID const lpData = data.get();
//party on with lpData....
2
は、Delphi 7バージョンです:.NETアセンブリを確認するには
uses Windows, SysUtils;
function GetEXEVersion(exename: string; const Fmt : string = '%d.%d.%d.%d'): string;
{
credit to [email protected]
(http://martinstoeckli.ch/delphi/delphi.html#AppVersion)
}
var
iBufferSize, iDummy : dword;
pBuffer, pFileInfo : Pointer;
iVer : array[1..4] of word;
begin
Result := '';
iBufferSize := GetFileVersionInfoSize(PChar(exename), iDummy);
if iBufferSize > 0 then begin
GetMem(pBuffer, iBufferSize);
try
GetFileVersionInfo(PChar(exename), 0, iBufferSize, pBuffer);
VerQueryValue(pBuffer, '\', pFileInfo, iDummy);
iVer[1] := HiWord(PVSFixedFileInfo(pFileInfo)^.dwFileVersionMS);
iVer[2] := LoWord(PVSFixedFileInfo(pFileInfo)^.dwFileVersionMS);
iVer[3] := HiWord(PVSFixedFileInfo(pFileInfo)^.dwFileVersionLS);
iVer[4] := LoWord(PVSFixedFileInfo(pFileInfo)^.dwFileVersionLS);
finally FreeMem(pBuffer);
end;
Result := Format(Fmt, [iVer[1],iVer[2],iVer[3],iVer[4]]);
end;
end;
1
、C#で:
System.Reflection.Assembly.LoadFile(@ "C:\ WindowsはMicrosoftを\します。 NET \ Framework \ v2.0.50727 \ system.data.dll ")。GetName()。Version.ToString();
関連する問題
- 1. sbtのpublishM2タスクでバージョン番号を追加する方法を教えてください。
- 2. Artifactoryでバージョンを作る方法を教えてください
- 3. アクセス方法別のクラスで番号を教えてください。
- 4. ダッシュのバージョン番号を教える方法は?
- 5. NSISで以前のバージョンをアンインストールする方法を教えてください
- 6. office.js Excel Addinの行番号と列番号を使用して、完全なExcel範囲アドレスを取得する方法を教えてください。
- 7. クリックした特定のJbuttonの取得方法を教えてください。
- 8. コントローラのIDを取得する方法を教えてください
- 9. RxJSのバージョン番号を教える方法
- 10. URLを絶対パスで取得する方法を教えてください。
- 11. ロケールで言語名を取得する方法を教えてください。
- 12. ファイルを取得する方法DLLまたはEXEの説明
- 13. イノセットアップのexeまたはdllのバージョンを取得
- 14. インストールしたモノトゥッチのバージョンを教えてください。
- 15. 「ポート番号が「y」で終わった」というURLエラーのトラブルシューティング方法を教えてください。
- 16. お客様の所有するバージョン番号を数えてください
- 17. SQL Serverのカスタム番号からプライマリキーを自動インクリメントする方法を教えてください。
- 18. カスタムWindowsドライバを「インストールする」方法を教えてください。
- 19. Parse:ユーザーに電話番号を登録させる方法を教えてください。
- 20. 特定の行の中で最小の番号を見つける方法を教えてください。
- 21. スワイプドビューをrecyclerviewリストに順番に戻す方法を教えてください。
- 22. ドロップゾーン内のドロップされた要素の位置を取得する方法を教えてください。
- 23. Advantage Database Serverのバージョン番号を取得する方法は?
- 24. JavaFXのバージョン番号を取得する方法は?
- 25. macOSバージョン番号とメジャーバージョン番号とマイナーバージョン番号だけを一致させてください
- 26. ポイントから消える方法を教えてください。
- 27. Windows CEでコンソールを閉じる方法を教えてください。
- 28. クライアント側のCustomMessageInspectorは、このコードをexeファイル内で動作させる方法を教えてください。
- 29. .net:DLLとEXEのバージョン番号?
- 30. SignTool.exe for VS 2017のインストール方法を教えてください。
:: HeapAllocの呼び出し後にスローがあると、メモリがリークします。 – plinth