Гость
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Programs and Features / 7 сообщений из 7, страница 1 из 1
20.11.2018, 13:42
    #39735611
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Programs and Features
Нужно вытянуть данные из "Programs and Features".
Точнее получить версию установленной программы.

Пытался сделать это через Registry
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall

Проблема в том, что конечное имя {3204DE95-97D2-4261-A286-98A262E171D4} (это на моем компе) не известно.
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{3204DE95-97D2-4261-A286-98A262E171D4}

Как решить проблему?
Подходит любой вариант (не только через Registry).
...
Рейтинг: 0 / 0
20.11.2018, 20:17
    #39735825
AIS
AIS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Programs and Features
...
Рейтинг: 0 / 0
21.11.2018, 13:12
    #39736074
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Programs and Features
AIS,
Большое спасибо.
Помогло!

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
OleObject ole_shell
integer  li_return
string		ls_reg, ls_shell, ls_select, ls_file_out

ole_shell = CREATE OleObject
li_return = ole_shell.ConnectToNewObject( "WScript.Shell" )

ls_shell = 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe'
ls_reg = 'HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*'
ls_select = "Select-Object InstallDate, DisplayVersion, DisplayName | where {($_.DisplayName -like 'Sybase*')}  | Format-Table –AutoSize  > "
ls_file_out = 'C:\111.txt'

ole_shell.Run(ls_shell + " Get-ItemProperty " + ls_reg + " | " + ls_select + ls_file_out , 0, TRUE)

IF IsValid(ole_shell) THEN DESTROY ole_shell


Потом парсить C:\111.txt.
Кстати, есть ли возможность сохранять ответ из Run не в файл, а в переменную?
...
Рейтинг: 0 / 0
21.11.2018, 13:19
    #39736080
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Programs and Features
Riska,

Вовсе незачем вызывать внешние программы для этого.
Используйте ф-ю RegistryKeys() чтобы получить список дочерних ключей ветки Uninstall
И в цикле найдите нужную программу.
...
Рейтинг: 0 / 0
21.11.2018, 16:01
    #39736223
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Programs and Features
Anatoly Moskovsky,
Это именно то, что доктор прописал!
Спасибо!!!

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
string 	ls_subkeylist[], ls_valuearray[], ls_name
integer 	li_rtn
long		ll_count_uninstall, ll_countvalue
long		ll_i, ll_v
string		ls_uninstall = 'HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\'
boolean	lb_found = FALSE
string		ls_version, ls_date_install


li_rtn = RegistryKeys(ls_uninstall, ls_subkeylist)

ll_count_uninstall = UpperBound(ls_subkeylist)
FOR ll_i = 1 TO ll_count_uninstall
	IF lb_found THEN EXIT
	RegistryValues(ls_uninstall + ls_subkeylist[ll_i], ls_valuearray)
	
	ll_countvalue = UpperBound(ls_valuearray)
	FOR ll_v = 1 TO ll_countvalue
		RegistryGet(ls_uninstall + ls_subkeylist[ll_i], "DisplayName", RegString!, ls_name)
		IF Pos(ls_name, 'MY_PROGRAMKA') > 0 THEN
			RegistryGet(ls_uninstall + ls_subkeylist[ll_i], "DisplayVersion", RegString!, ls_version) 
			RegistryGet(ls_uninstall + ls_subkeylist[ll_i], "InstallDate", RegString!, ls_date_install) 
			MessageBox(ls_version, ls_date_install)
			lb_found = TRUE
			EXIT
		END IF
	NEXT
NEXT
...
Рейтинг: 0 / 0
21.11.2018, 17:32
    #39736287
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Programs and Features
Riska,

Кажется внутренний цикл лишний, т.к. ls_valuearray по которому он идет никак в его теле не используется ))
...
Рейтинг: 0 / 0
21.11.2018, 18:04
    #39736331
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Programs and Features
Anatoly Moskovsky,

Точно.
Если нет еще вложенных уровней, то все работает.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
string 	ls_subkeylist[], ls_name
long		ll_i, ll_count_uninstall	
string		ls_uninstall = 'HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\'
string		ls_version, ls_date_install

RegistryKeys(ls_uninstall, ls_subkeylist)

ll_count_uninstall = UpperBound(ls_subkeylist)
FOR ll_i = 1 TO ll_count_uninstall
	RegistryGet(ls_uninstall + ls_subkeylist[ll_i], "DisplayName", RegString!, ls_name)
	IF Pos(ls_name, 'MY_PROGRAMKA') > 0 THEN
		RegistryGet(ls_uninstall + ls_subkeylist[ll_i], "DisplayVersion", RegString!, ls_version) 
		RegistryGet(ls_uninstall + ls_subkeylist[ll_i], "InstallDate", RegString!, ls_date_install) 
		EXIT
	END IF
NEXT
MessageBox(ls_version, ls_date_install)
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Programs and Features / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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