1

Тема: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

Уважаемые профи, доброго времени суток!

Прошу помочь в решении такой задачи:

1. При появлении файлов в директории, копируем файлы в новую директорию.
2. Сделать запись в реестре на VBS Script, видимую в окне "Установка и удалении программ", откуда эту запись можно было бы удалить. При выполнении операции удаления должна быть удалена и директория-получатель файлов.


С п.1 более-менее понятно, а вот с п.2 не очень.

ОС Windows XP Proffesional SP2

Помогите плиз!
Заранее спасибо!

2

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

mihmih1978
В п. 2 какая-то каша. Что за запись в окне, зачем её писать в реестр, а потом удалять вместе с каким-то получателем, ничего не понятно.

3 (изменено: mihmih1978, 2015-12-24 22:50:10)

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

Flasher

Вот такая задача))

2. Сделать запись в реестре на VBS Script, видимую в окне "Установка и удалении программ" (см. вложение), откуда эту запись можно было бы удалить. При выполнении операции удаления должна быть удалена и директория, в которую был скопирован файл.

Post's attachments

Безымянный.JPG 65.02 kb, 15 downloads since 2015-12-24 

You don't have the permssions to download the attachments of this post.

4 (изменено: mozers, 2015-12-25 22:39:21)

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

mihmih1978
Вот скриптик создающий пустую папку и запись в "Установка и удалении программ" для ее удаления

install_dir = "C:\MyFolder"

Set WshShell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")

'Создаем uninstall.vbs в папке install_dir
FSO.CreateFolder install_dir
Set File = FSO.OpenTextFile(install_dir + "\uninstall.vbs", 2, True)
uninstall_text = "Set WshShell = CreateObject(""WScript.Shell"")" & vbNewLine & _ 
"Set FSO = CreateObject(""Scripting.FileSystemObject"")" & vbNewLine & _ 
"FSO.DeleteFolder """ & install_dir & """, True" & vbNewLine & _ 
"WshShell.RegDelete ""HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MySuperProg\"""
File.Write uninstall_text
File.Close

'Делаем запись в "Установка и удаление программ для запуска uninstall.vbs"
WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MySuperProg\DisplayName", "Моя Супер Прога"
WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MySuperProg\UninstallString", WScript.FullName & " """ & install_dir & "\uninstall.vbs"""

5

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

mozers

Спасибо большое! Очень полезный скрипт!!!

6 (изменено: mihmih1978, 2015-12-25 12:42:40)

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

mozers

Уважаемый, mozers)....еще раз спасибо

В окне "Установка и удалении программ" запись отображается, скрипт uninstall.vbs сам по себе работает верно.

НО при попытке удаления записи через "Установка и удалении программ" возникает след. диагностика (см. скриншот), запись из "Установка и удалении программ"  и реестра удаляется, но скрипт uninstall.vbs  не срабатывает.

Подскажите плиз как это можно побороть?? Спасибо.

Option Explicit

Dim fso, fl, ret, WshShell, new_folder, old_folder, File, uninstall_text 

Set fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject( "Wscript.Shell")

If not fso.FolderExists("c:\vre") then 
 fso.CreateFolder("c:\vre")
end if	

If not fso.FolderExists("c:\vre1") then 
 fso.CreateFolder("c:\vre1")
end if
 
Set old_folder= fso.GetFolder("c:\vre")
Set new_folder= fso.GetFolder("c:\vre1")


'Создаем uninstall.vbs в папке old_folder
' FSO.CreateFolder install_dir
Set File = FSO.OpenTextFile(old_folder + "\uninstall.vbs", 2, True)
uninstall_text = "Set WshShell = CreateObject(""WScript.Shell"")" & vbNewLine & _ 
"Set FSO = CreateObject(""Scripting.FileSystemObject"")" & vbNewLine & _ 
"FSO.DeleteFolder """ & new_folder & """, True" & vbNewLine & _ 
"WshShell.RegDelete ""HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MySuperProg\"""
File.Write uninstall_text
File.Close


              
	For Each fl In fso.GetFolder(old_folder.Path).Files		
        	ret = ret & "В каталог " & Chr(34) & old_folder.Path & Chr(34) & " пришел файл " & Chr(34) & fl.Name & Chr(34) & vbCrLf
                If ret <> vbNullString Then MsgBox ret 
                      
		 
        	' копируем файл в новую папку
		fso.CopyFile old_folder.Path&"\"& fl.Name, new_folder.Path &"\"& fl.Name, true

                WScript.Echo "Процесс копирования завершен"
                        
        	' запись в реестр
                ' WshShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\!1\DisplayName", new_folder.Path &"\"& fl.Name 

                  WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MySuperProg\DisplayName", "Моя Супер Прога"
                  WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MySuperProg\UninstallString", """" & new_folder & "\uninstall.vbs"""
 
		WScript.Echo "Запись в реестре сделана"	

	Next
Post's attachments

Безымянный.JPG 176.68 kb, 15 downloads since 2015-12-25 

You don't have the permssions to download the attachments of this post.

7

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

mihmih1978
Пару основных ошибок я вижу. Но тут есть смысл и другое обсудить.
Вполне можно обходиться и без копирования (Тут логично было бы перемещение - в одном томе оно происходит мгновенно. Да и зачем постоянно удалять папку?).
Записи уже есть в реестре, поэтому достаточно сопоставлять их с одной директорией.
Нет смысла создавать один и тот же скрипт с одним именем. Да и с разными тоже. Имена из списка программ в реестре можно задавать для единственного скрипта параметрически.
И выводить по 2 сообщения для каждой проги - это бессмыслица.

8 (изменено: mihmih1978, 2015-12-25 14:18:15)

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

это все понятно...спасибо , но основная проблема в том, что при попытке удаления записи через "Установка и удалении программ" возникает след. диагностика (см. скриншот), запись из "Установка и удалении программ"  и реестра удаляется, но скрипт uninstall.vbs  не срабатывает.

еще раз код

Dim fso, fl, ret, WshShell, new_folder, old_folder, File, uninstall_text 

Set fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject( "Wscript.Shell")

If not fso.FolderExists("c:\vre") then 
 fso.CreateFolder("c:\vre")
end if	

If not fso.FolderExists("c:\vre1") then 
 fso.CreateFolder("c:\vre1")
end if
 
Set old_folder= fso.GetFolder("c:\vre")
Set new_folder= fso.GetFolder("c:\vre1")


'Создаем uninstall.vbs в папке old_folder
Set File = FSO.OpenTextFile(old_folder + "\uninstall.vbs", 2, True)
uninstall_text = "Set WshShell = CreateObject(""WScript.Shell"")" & vbNewLine & _ 
"Set FSO = CreateObject(""Scripting.FileSystemObject"")" & vbNewLine & _ 
"FSO.DeleteFolder """ & new_folder & """, True" & vbNewLine & _ 
"WshShell.RegDelete ""HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MySuperProg\"""
File.Write uninstall_text
File.Close


              
For Each fl In fso.GetFolder(old_folder.Path).Files		
    	ret = ret & "В каталог " & Chr(34) & old_folder.Path & Chr(34) & " пришел файл " & Chr(34) & fl.Name & Chr(34) & vbCrLf
        If ret <> vbNullString Then MsgBox ret 
                      
		 
      	' копируем файл в новую папку
	fso.CopyFile old_folder.Path&"\"& fl.Name, new_folder.Path &"\"& fl.Name, true

        WScript.Echo "Процесс копирования завершен"
                        
      	' запись в реестр
          WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MySuperProg\DisplayName", "Моя Супер Прога"
        
	' WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MySuperProg\UninstallString", """" & old_folder & "\uninstall.vbs"""
          WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MySuperProg\UninstallString", old_folder & "\uninstall.vbs"

          WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MySuperProg\NoModify", "01", "REG_DWORD"
          WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MySuperProg\NoRepair", "01", "REG_DWORD"


	  WScript.Echo "Запись в реестре сделана"	

Next
 

9

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

Я же написал, что вижу ошибки (не говоря уже об избыточности) в коде.
Сами файлы в папке - это exe? Они не установочные, то бишь портабельные? Типа PortableAppz? Если нет, то для чего их куда-то ещё копировать?

Зачем ещё раз код? )))

10

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

Flasher

Код пока в стадии разработки, поэтому есть избыточность. Почему такая задача стоит, это другой вопрос.

Основная проблема   в том, что при попытке удаления записи через "Установка и удалении программ" возникает след. диагностика (см. скриншот), запись из "Установка и удалении программ"  и реестра удаляется, но скрипт uninstall.vbs  не срабатывает.

Post's attachments

Безымянный.JPG 176.68 kb, 15 downloads since 2015-12-25 

You don't have the permssions to download the attachments of this post.

11

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

mihmih1978 пишет:

Почему такая задача стоит, это другой вопрос.

Это вопрос, от которого зависит осмысленность тех или иных предложений.

12

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

И все-таки подскажите плиз, какие дополнительные записи в реестре нужно сделать, чтобы при нажатии кнопки "Удалить" в окне"Установка и удалении программ" выполнялся и скрипт uninstall.vbs, путь к которому прописан в параметре реестра UninstallString

13

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

Чесноговоря я тоже не врубаюсь в смысл действий этого скрипта. И зачем писать в реестр при каждом новом файле? А ошибка (та, что на скриншоте) возникает когда запись в реестре не удалилась, несмотря на то, что ты утверждаешь обратное. Мой то вариант отрабатывает без ошибок?

14

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

mozers

После выполонения Вашего скрипта запись в реестре формируется, запись в окне"Установка и удалении программ" видна, но при нажатии кнопки "Удалить" возникает та же диагностика. Нажимаю "Да", раздел из реестра удаляется, а скрипт uninstall.vbs не отрабатывает и соответственно папка MyFolder не удаляется.

Может быть какие-то дополнительные записи в реестре нужно сделать?

Post's attachments

Безымянный1.JPG 213.17 kb, 15 downloads since 2015-12-25 

You don't have the permssions to download the attachments of this post.

15

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

mozers пишет:

Мой то вариант отрабатывает без ошибок?

Вряд ли без. Нужен Dim WshShell в 2-х местах. Это первое, что бросилось.
А по остальному там нужно половину переписывать.
Поэтому и вопрос про дополнительные записи тут не в месту.

16

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

mihmih1978 пишет:

раздел из реестра удаляется, а скрипт uninstall.vbs не отрабатывает

То бишь и в скрипте удалять его не требуется, раз апплет сам это делает.

17

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

Да, Вы правы. Но как все-таки сделать так, чтобы скрипт uninstall.vbs срабатывал и удалял папку с файлам, как это делается при удалении других "нормальных" программ?

18 (изменено: mozers, 2015-12-25 15:58:30)

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

Ребят, прежде чем что то утверждать ("Вряд ли без"), надо сначала попробовать. Мой вариант отрабатывает как часы (я вообще не проверенный в работе код не публикую). Если не работает у вас скажите в какой строке ошибка - тогда я подскажу в чем может быть дело.
mihmih1978, твой вариант не работает потому что в параметре UninstallString ты указываешь неверный путь к файлу uninstall.vbs

19

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

mozers пишет:

Чесноговоря я тоже не врубаюсь в смысл действий этого скрипта. И зачем писать в реестр при каждом новом файле? А ошибка (та, что на скриншоте) возникает когда запись в реестре не удалилась, несмотря на то, что ты утверждаешь обратное. Мой то вариант отрабатывает без ошибок?

На скриншоте пишеьтся, что "...Возможно, удаление уже было произведено".
Мне кажется, это говорит о том, что в реестре не хватет каких-то записей и винде кажется, я что приложение удалено.

Подскажите плиз, что можно еще сделать или в каком направлении копать?

20

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

Так с учётом отмеченного запись ограничивается:

'Создаем uninstall.vbs в папке old_folder
With FSO.OpenTextFile(old_folder + "\uninstall.vbs", 2, True)
  .Write "Set FSO = CreateObject(""Scripting.FileSystemObject"").DeleteFolder """ & new_folder & """, True"
  .Close
End With

21 (изменено: mihmih1978, 2015-12-25 16:07:10)

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

mozers пишет:

Ребят, прежде чем что то утверждать, надо сначала попробовать. Мой вариант отрабатывает как часы (я вообще не проверенный в работе код не публикую). Если не работает у вас скажите в какой строке ошибка - тогда я подскажу в чем может быть дело.
mihmih1978, твой вариант не работает потому что в параметре UninstallString ты указываешь неверный путь к файлу uninstall.vbs

Почему неверный? Директория существует, скрипт в ней тоже. Сам по себе скрипт отрабатывает без ошибок.

Вы имеете ввиду, что путь должен быть в кавычках? Наличие или отсутствие кавычек не влияет на результат. Скрипт все равно не выполняется при удалении записи в окне "Установка и удаление программ". Я проверял.

22 (изменено: Flasher, 2015-12-25 16:04:19)

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

mozers пишет:

Ребят, прежде чем что то утверждать ("Вряд ли без"), надо сначала попробовать.

Я не проверяю, потому что знаю, что у меня без Dim WSH (если есть др. объект) будет ругань. Это сто лет в обед так происходит. Причём не только на моей машине. Без понятия, почему так.

mihmih1978, не нужно оверквотить, есть выделение перед кликом.

23

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

mihmih1978, ты про свою переделку или про мой вариант говоришь?
Извини, очень сложно помогать когда вопрошающий не читает ответы и вместо ответа на твой уточняющий вопрос базарит о чем то своем... Извини, я так не могу.

24 (изменено: mihmih1978, 2015-12-25 16:09:48)

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

mozers

Вроде я писал выше так

После выполонения Вашего скрипта запись в реестре формируется, запись в окне"Установка и удалении программ" видна, но при нажатии кнопки "Удалить" возникает та же диагностика. Нажимаю "Да", раздел из реестра удаляется, а скрипт uninstall.vbs не отрабатывает и соответственно папка MyFolder не удаляется.

25

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

Flasher пишет:

Я не проверяю, потому что знаю, что у меня без Dim WSH (если есть др. объект) будет ругань

Очень интересный глюк. Ты не хочешь подискуссировать на эту тему - заведи новый тред?

26

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

mihmih1978, запусти мой скрипт и выложи сюда экспорт ключа HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MySuperProg

27

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

mihmih1978
Чего ходить вокруг да около? Предложенная замена не сработала?

mozers
Подумаю, может, позже.

28

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

Flasher

Ваша замена работает, но при удалении строки из "Установка и удаление программ" скрипт не вызывается.

29

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

Flasher

Post's attachments

MySuperProg.reg 430 b, 3 downloads since 2015-12-25 

You don't have the permssions to download the attachments of this post.

30

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

mihmih1978
Попробовал на другом компе - получил твою ошибку. Заменил uninstall.vbs на uninstall.cmd - все отработало как надо.

install_dir = "C:\MyFolder"

Set WshShell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")

'Создаем uninstall.cmd в папке install_dir
FSO.CreateFolder install_dir
Set File = FSO.OpenTextFile(install_dir + "\uninstall.cmd", 2, True)
uninstall_text = "reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MySuperProg /f" & vbNewLine & _ 
"rmdir /s /q """ & install_dir & """"
File.Write uninstall_text
File.Close

'Делаем запись в "Установка и удаление программ для запуска uninstall.vbs"
WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MySuperProg\DisplayName", "Моя Супер Прога"
WshShell.RegWrite "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MySuperProg\UninstallString", """" & install_dir & "\uninstall.cmd"""

31

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

mihmih1978 пишет:

Ваша замена работает, но при удалении строки из "Установка и удаление программ" скрипт не вызывается.

Как он может вызываться, если строка уже удалена?
Я бы уже давно накидал весь скрипт с циклом, если бы получил ответы на свои вопросы.

32

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

mozers

Да работает, спасибо.

Но у меня задача на VB Script сделать((...

Интересно, а почему на скрипт на VBS не срабатывает, при вызове его через реестр?

33

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

mihmih1978 пишет:

Но у меня задача на VB Script сделать((...

Вот так и знал, что к этому сведётся, хотя уже готово решение без консоли и лишнего vbs. В общем, не хотите отвечать, оставайтесь со своими проблемами наедине.

34 (изменено: mozers, 2015-12-25 22:43:37)

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

Все, разобрался почему unistall.vbs не работал.
Я, дурак, испытывал удаление с помощью плагина Total Commander, полагая что для запуска программы деинсталляции плагин использует тот же механизм что и апплет "Установка и удаление программ". Оказалось, что нет. Плагин без проблем запускает любую указанную программу или скрипт. А виндусёвый апплет - ТОЛЬКО EXE, CMD и MSI. Необходимо явное указание движка, включая полный путь к нему c:\WINDOWS\SYSTEM32\wscript.exe uninstall.vbs. Ну тупой апплет made in microsoft и все.
В общем, свой первый вариант поправил. Так что теперь можно пользоваться обоими решениями.

35

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

mozers

Еще раз спасибо за науку)

36

Re: VBS Сделать запись в реестр, видимую в "Установке и удалении программ"

Опять поспешил ответить. wscript.exe uninstall.vbs действительно не работает. %WINDIR%\SYSTEM32\wscript.exe uninstall.vbs - тоже нет. cmd /c uninstall.vbs работает, но при удалении мигает консольное окошко. А вот так c:\WINDOWS\SYSTEM32\wscript.exe uninstall.vbs срабатывает без всякой консоли
Исправил свой последний пост и первый скрипт.