実行時に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. ダッシュのバージョン番号を教える方法は?
- 2. NSISで以前のバージョンをアンインストールする方法を教えてください
- 3. クリックした特定のJbuttonの取得方法を教えてください。
- 4. URLを絶対パスで取得する方法を教えてください。
- 5. インストールしたモノトゥッチのバージョンを教えてください。
- 6. ファイルを取得する方法DLLまたはEXEの説明
- 7. イノセットアップのexeまたはdllのバージョンを取得
- 8. カスタムWindowsドライバを「インストールする」方法を教えてください。
- 9. Advantage Database Serverのバージョン番号を取得する方法は?
- 10. JavaFXのバージョン番号を取得する方法は?
- 11. ポイントから消える方法を教えてください。
- 12. .net:DLLとEXEのバージョン番号?
- 13. アドレス帳から取得した連絡先に電話番号がないかどうかを確認する方法を教えてください。
- 14. IEに適したカスタマイズ方法を教えてください。
- 15. クライアント側のCustomMessageInspectorは、このコードをexeファイル内で動作させる方法を教えてください。
- 16. $ .ajax()から取得した要素にCSSプロパティを与える方法を教えてください。
- 17. Windows CEでコンソールを閉じる方法を教えてください。
- 18. Eclipseプラグインをアンパックする方法を教えてください。
- 19. タブローを定義する方法を教えてください
- 20. Android - アイコンをタッチする方法を教えてください。
- 21. ImageView Androidをトリミングする方法を教えてください。
- 22. ストリームフィルタをエコーする方法を教えてください。
- 23. ジェンキンズを「ピップインストール」する方法を教えてください。
- 24. gemのバージョン番号を確認してください
- 25. Googleの設定スクリプトを取り除く方法を教えてください。
- 26. Tix.Balloonウィジェットの矢印を取り除く方法を教えてください。
- 27. MySQL/PHPでの番号の間隔の保存および検索方法を教えてください。
- 28. Maven:タイムスタンプの付いたバージョンのスナップショットをクラスパスで使用する方法を教えてください。
- 29. 私の許可なくビルド中にDLLのコピーを止めさせる方法を教えてください。
- 30. WiFiまたは3Gの指定方法を教えてください。
:: HeapAllocの呼び出し後にスローがあると、メモリがリークします。 – plinth