powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Programs and Features
7 сообщений из 7, страница 1 из 1
Programs and Features
    #39735611
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно вытянуть данные из "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
Programs and Features
    #39735825
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Programs and Features
    #39736074
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Programs and Features
    #39736080
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Riska,

Вовсе незачем вызывать внешние программы для этого.
Используйте ф-ю RegistryKeys() чтобы получить список дочерних ключей ветки Uninstall
И в цикле найдите нужную программу.
...
Рейтинг: 0 / 0
Programs and Features
    #39736223
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Programs and Features
    #39736287
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Riska,

Кажется внутренний цикл лишний, т.к. ls_valuearray по которому он идет никак в его теле не используется ))
...
Рейтинг: 0 / 0
Programs and Features
    #39736331
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
7 сообщений из 7, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Programs and Features
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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