powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / номер версии файла
12 сообщений из 12, страница 1 из 1
номер версии файла
    #36327568
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для того чтоб определить номер версии файла пользуюсь взятым откудато отсюда куском кода
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
function ulong GetFileVersionInfoSize(ref string as_Dll, ref ulong zero)  alias for "GetFileVersionInfoSizeA" Library "version.dll"
function boolean GetFileVersionInfo(ref string as_Dll, ref ulong ignore, ulong ai_len, ref string as_buf)  alias for "GetFileVersionInfoA" Library "version.dll"
function boolean VerQueryValue(ref string as_buf, ref string as_valuename, ref ulong ai_valueaddr, ref ulong ai_len)  alias for "VerQueryValueA" Library "version.dll"

String ls_buf, ls_dll, ls_valname, ls_value
ls_dll = as_dll 
ulong li_bufsize, li_zero, li_addr, li_len 
li_bufsize = GetFileVersionInfoSize(ls_dll, li_zero)
If li_bufsize =  0  Then
	Return "!"
End IF
ls_buf = space(li_bufsize)

ls_valname = "\StringFileInfo\040904E4\FileVersion"
If Not GetFileVersionInfo(ls_dll, li_zero, li_bufsize, ls_buf) Then
	Return "!"
End IF

If Not VerQueryValue(ls_buf, ls_valname, li_addr, li_len) Then
	Return "!"
End IF
ls_value = String(li_addr, "address")
Return ls_value
но данный скрипт не работает на РВ11, юникод.
конечно в определении функций дописал ";Ansi".
Но не отрабатывает когда доходит до VerQueryValue! :(
Пробовал переменные ls_buf, ls_valname в Анси конвертнуть... бестолку.
при ковертации в Анси было обрезалась переменная ls_buf, так как в ней оказывался символ конца строки, вроде победил, а конечного результата все-равно нет.

Кто как определяет номер версии файла? может есть другие варианты?
...
Рейтинг: 0 / 0
номер версии файла
    #36327712
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Откуда, откуда...
У меня выдрал
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
номер версии файла
    #36327717
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
ls_key = "\StringFileInfo\040904e4\ProductVersion"
IF NOT VerQueryValueA( ls_buff, ls_key, ll_pointer, lui_length ) OR &  
lui_length <=  0  THEN  
ls_versioninfo = "?"
ELSE   
	ls_versioninfo = Space( lui_length )  
	CopyMemory( ls_versioninfo, ll_pointer, lui_length )
END IF
ver_app = ls_versioninfo
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
номер версии файла
    #36327722
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для английской версии - ключ другой, не 040904e4
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
номер версии файла
    #36327734
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тынц
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
номер версии файла
    #36327784
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего выделяется неправильный размер буфера
Тынц
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
номер версии файла
    #36328341
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spas2001Откуда, откуда...
У меня выдрал
взял тут

столько ответов, а ничего по теме... проблема была в юникоде
решилась вот так
в определении функций поменял A на W и все заработало
Код: plaintext
1.
2.
function ulong GetFileVersionInfoSize(ref string as_Dll, ref ulong zero)  alias for "GetFileVersionInfoSizeW" Library "version.dll"
function boolean GetFileVersionInfo(ref string as_Dll, ref ulong ignore, ulong ai_len, ref string as_buf)  alias for "GetFileVersionInfoW" Library "version.dll"
function boolean VerQueryValue(ref string as_buf, ref string as_valuename, ref ulong ai_valueaddr, ref ulong ai_len) alias for "VerQueryValueW" Library "version.dll"
...
Рейтинг: 0 / 0
номер версии файла
    #36328477
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, я это уже говорил и повторяю еще раз: модификатор ansi в объявлениях внешних функций лучше не использовать, т.к. он реализован с багами в PB, и поэтому работает не всегда.
...
Рейтинг: 0 / 0
номер версии файла
    #36328500
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyВообще, я это уже говорил и повторяю еще раз: модификатор ansi в объявлениях внешних функций лучше не использовать, т.к. он реализован с багами в PB, и поэтому работает не всегда.
прикол в еще том, что при миграции например с РВ9 на РВ11, РВ сам подставляет ";Ansi" :)
...
Рейтинг: 0 / 0
номер версии файла
    #36328542
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашел тут путевый объект, выдает кучу инфы, в том числе инфу по файлу
немного подкрутил его, выдавал неверный wCharacterSet, при конвертации второй раз в Hex выдал нужную цифру.
...
Рейтинг: 0 / 0
номер версии файла
    #36329567
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VanoR ,
у меня РВ10.5 - тоже юникод, попробуй прикрепленный файл, не помню менял ли там что-то, но у меня работает и выдает не только № версии, а и всё остальное. Не забудь там про флаг - ЕХЕ-файл сделан в РВ (это важно).
...
Рейтинг: 0 / 0
номер версии файла
    #36330167
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / номер версии файла
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]