Как я могу получить версию моего приложения?Как получить версию исполняемого исполняемого файла?
я использую GetFileVersionInfo(ParamStr(0), ...)
:
filename := PChar(ExtractShortPathName(ParamStr(0)));
//Get the number of bytes he have to allocate for the file information structure
dwInfoLength := GetFileVersionInfoSize(lptstrFilename, {var}dwHandle);
//Get version info
GetMem(pInfoData, dwInfoLength);
GetFileVersionInfo(lptstrFilename, dwHandle, dwInfoLength, pInfoData);
//Set what information we want to extract from pInfoData
lpSubBlock := PChar(Chr(92)+Chr(0));
//Extract the desired data from pInfoData into the FileInformation structure
VerQueryValue(pInfoData, lpSubBlock, PFileInformation, LengthOfReturned);
Проблема этого метода заключается в том, что она требует загрузчик Windows, в load the image before the resources can be read. Я создаю свои приложения с флагом изображения IMAGE_FILE_NET_RUN_FROM_SWAP
(in order to avoid in-page exceptions on a fiddly network).
Это вызывает загрузчик Windows, чтобы загрузить весь файл по сети снова, а не просто смотреть на «меня». Поскольку я проверяю и сохраняю свою собственную версию при запуске, запуск в течение 6 секунд запускается в 10-секундный запуск приложения.
Как я могу прочитать версию me, my работает приложение?
я бы предположить, Windows, не имеет API, чтобы прочитать версию запущенного процесса, только файл, который я загружен из (и, если файл больше не существует, то она не может прочитать любую информацию о версии).
Но я также предполагаю, что можно было бы узнать ресурсы версии из моих собственных процессов (не будучи членом группы «Администраторы» или «Отладчики»).
Могу ли я прочитать версию мой процесс?
Попутный Bonus Вопрос: Как я могу загрузить PE Image
ресурсы меня, а не по сети?
Действительно, это то же самое, что я думал: поиск ресурса 'VERSIONINFO' (' RT_VERSION'), а затем его загрузка API 'VerQueryValue'. И вам повезло, что это уже фрагмент кода Delphi, а не C++ на MSDN. –
Значит, это не делает ваш вопрос точным дубликатом? –
@WarrenP Ответы одинаковы; даже когда вопросы разные.Этот вопрос касается «моего собственного» процесса, который не обязательно означает, что кому-то захочется версия приложения Delphi. И кто знает, Microsoft может добавить API, чтобы получить версию «я». –