PDA

Показать полную графическую версию : Авторам аддонов


Страниц : 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 29 30 31 32 33 34

Righter
16-03-2008, 16:18
DyadyaGenya, не свосем понял о чем вы. Мне нужно в пуск добавить ярлык, который будет ссылаться на "Установка и удаление программ". Вот и всё.

Сейчас он ссылается на объект "%SYSTEMROOT%\system32\appwiz.cpl" и ярлык берет там же. Работает правильно, но если создавать ярлык из панели управления, то в качестве объекта так и пишется "Установка и удаление программ". Вот я думаю может я могу так же сделать.

greg_b
16-03-2008, 18:58
Irekson,
1 - конечный пользователь юзает готовый дистриб, а вы получается где-то посерединке, но работать и вкладывать силы в разработку не хотите.
2 - научитель пользоваться поиском и отбором по форуму - очень полезно, т.к. вопросы вашего рода очень большая редкость.

gora
17-03-2008, 14:28
Разбираясь с возможными причинами некорректной работы некоторых аддонов использующих ключи HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx обнаружил следующее:
1 Отсутствует "стандартизация" для аддонописателей на номера/буквы ключей используемых в этих аддонах. Это может привести к тому, что два и более аддона будут создавать одноименные ключи и соответственно правильно сработает только последний из них, т.к. затрет предыдущие. Узнать об использовании аддоном данного ключа(ей) без "разборки" аддона не представляется возможным, а это по силам далеко не каждому пользователю.
2 Некоторым из аддонов может потребоваться перезагрузка после завершения установки и тогда каждый такой аддон будет ее производить, хотя, возможно, хватило бы и одной после установки всех.

Предложение:
1 Информация об использовании аддоном ключа HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx с конкретным номером(и) должна быть доступна пользователю и где то написана, например, в addon.nfo.
2 Сделать некий "стандартный" аддон (вроде 3rdParty) производящий перезагрузку после отработки всех аддонов использующих данный ключ. В остальных аддонах, так же использующих данный ключ и требующих перезагрузки указывать на необходимость использовать этот "стандартный" аддон.

Если Вам известны другие способы выхода из данной ситуации, поделитесь ими.

PS Прикрепил вариант такого аддона.

DyadyaGenya
19-03-2008, 21:00
all у меня вопрос, разбираясь с деинсталяцией приложений установленных через sysoc аддон появилась мысль, (хотя это может опять же из-за моей невнимательности, мог не увидеть что эта тема уже обсждалась), а почему когда добавляют запись в панель управления/установка и удаление программ, для деинсталяции, да и вообще в инф-файле для анинстала используют такую сложную систему с удалением файлов, директорий и записей реестра? не проще ли добавть ссылку на саму деинсталяцию проги, которая есть почти во всех устанавливаемых прогах? я добавил, все удалилось прекрасно. Вот пример добавления ветки реестра в управление/установка и удаление программ для winamp

HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%PROG_NAME%","UninstallString",0x0,"""%16422%\Winamp\UninstWA.exe"""
получилось проще и без всяких секций типа [PROG.DelReg], [PROG.Uninstall], [DelFiles]

DyadyaGenya
19-03-2008, 21:19
Righter, я вас действительно не правильно понял потому что думал, что вопрос который вы задали, относиться к написанию аддонов, а если вам просто надо сделать ярлык в меню пуск, так это решаеться твиком при установке винды, только надо определиться куда именно ставить, в пуск, или пуск/программы, будут отличаться. Подробней в ветке по твикам,здесь, чтоб сильно не заморачиваться воспоминаниями могу привести пример вставки в контектное меню

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\4]
@="Панель управления"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\4\command]
@="rundll32.exe shell32.dll,Control_RunDLL"

но повторюсь, похоже вам надо в другую ветку :-)

ya158
19-03-2008, 21:21
не проще ли добавть ссылку на саму деинсталяцию проги »

А если этого файла нет? Файл деинсталяции появляется, если для инсталяции используется установщик типа Inno. При использовании sysoc используются только файлы самой программы, а служебные типа UninstWA.exe не нужны. Дополнительный плюс sysoc - можно при установки программы дополнительно скопировать/установить некоторые файлы (плагины, дополнения и т. п.), а так же добавить запись в "Установку компонентов Windows", что в свою очередь даёт возможность многократно устанавливать.деинсталировать программу из "Установки компонентов Windows". Кстати программы частенько создают записи в реестре и новые файлы при работе, которые штатный деинсталятор не удаляет, а через inf файл их можно удалить.

DyadyaGenya
20-03-2008, 11:19
ya158, да я как бы не против, просто я скомбинировал и тот и тот способ в одном инф файле, получилось меньше строк в инф-файле, типа упростилась задача, появился выбор чего удалять, чего оставлять, ну а таких программ у которых нет родного деинсталятора не так уж много и не часто они создают дополнительные записи в реестр да и дополнительных плагинов у них не много. И я конечно не такой большой специалист, но помоему и инсталяторы типа msi создают подобные служебные приложения, да и если вдруг прога добавила запись в установку и удаление програм и имеет там функцию анинтстала то эту запись легко вычислить в реестре и добавить. Да и часто конечному пользователю, особенно начинающему, много дополнительных плагинов не нужно, а достаточно стандартной поставки

gora
20-03-2008, 12:59
DyadyaGenya, к сказанному ya158 можно добавить и то, что некоторые установщики создают файл деинсталляции соизмеримый по размерам с самой программой, особенно когда сама программа небольшая!!! Включение такого деинсталлятора приведет к увеличению размера аддона, а оно нам надо!? :dont-know

DyadyaGenya
20-03-2008, 16:17
gora, вообще то я имел ввиду те случаи когда часто конечному пользователю, особенно начинающему, много дополнительных плагинов не нужно, а достаточно стандартной поставки »
и когда файл деинсталяции небольшой как в винампе :-) потому его в качестве примера и приводил, я не имел ввиду что так нужно делать обязательно, просто показалось что в некоторых случаях достаточно сделать ссылку на файлик деинсталяции, вот и поднял вопрос. Тут ведь часто говорят про то что аддоны индивидуальны, хоть и стараються стандартизировать, но всем не угодишь :-) поэтому повторюсь, имеет ли смысл в некоторых случаях для простоты написания (чтоб не запутаться в синтаксисе, не пропустить список файлов для удаления и проч.) и уменьшения размера использовать ссылку на файлик деинсталяции или все таки в любом случае не рекомендуеться?

gora
20-03-2008, 16:32
поэтому повторюсь, имеет ли смысл в некоторых случаях для простоты написания ... использовать ссылку на файлик деинсталяции »Коротко - Да. Ключевое слово здесь "в некоторых случаях". для ... уменьшения размера »А вот это очень сомнительно! Мне не встречались деинсталляторы которые были бы меньше чем запись в inf файле относящаяся к удалению программы. ;)

ya158
20-03-2008, 19:25
DyadyaGenya,
Ко всему сказанному выше можно добавить, что зачастую штатный деинсталятор не удаляет всего, что наинсталировала прога. Например, разделы реестра и папки в пользовательском профиле, котрые создаются при первом запуске программы. Хотя, конечно, что бы удалить их через inf надо точно знать что и где создаётся. Ещё один плюс inf'a - это, то что всё четко и прозрачно видно, что устанавливается и что удаляется.

vserd
21-03-2008, 10:38
проще ли добавть ссылку на саму деинсталяцию проги, которая есть почти во всех устанавливаемых прогах »
Если устанавливать через инсталятор, то проще. Если без инсталятора, то нет. Кроме этой программы деинсталяции есть еще и настроечный файл в котором собственно и прописывается что нужно снести. Все что добавлено позже не удалится, нужно подчищать ручками.

DyadyaGenya
22-03-2008, 12:15
ya158, и vserd, спасибо за отзывы, и чтоб закрыть дисскусию, повторюсь, преимущества инф файла я вобщем знаю, и как подметил gora, использование родного деинсталятора имеет смысл в некоторых случаях, именно в тех, в которых я и спрашивал :-) все равно, конечный пользователь, (если вы ставите систему не себе, и в день по нескольку раз и разным юзерам), если вдруг надумает добавить плагины и какие нибудь настройки в конкретныую прогу, ни файл деинсталяции, ни инф-файл не смогут подчистить сразу все, и придеться подчищать в ручную, в конце концов, не будет же он ради правильной деинсталяции одной проги переустанавливать винду с новой версией аддона :-)

gora
25-03-2008, 09:50
2 ALL
Аддон x-Reset10, о котором я писал здесь (http://forum.oszone.net/post-762164-403.html), "поселен" в эту ветку (http://forum.oszone.net/thread-103588.html).

DyadyaGenya
27-03-2008, 12:53
такой вопрос, разбирался с разными вариантами деинсталяции приложений в аддонах sysoc, собирал их с помощью утилиты от XXXler кажется jameszero писал к ней инструкцию. Данная утилитка создает секцию [AdvInfCall] которая якобы может запустить секцию удаления файлов, вот такой листинг:
[Winamp.AdvInfCall]
Commandline="""%11%\rundll32.exe"" advpack,LaunchINFSection ""%17%\Winamp.inf"",Winamp.Uninstal.DelDirs,4"
TickCount=500
но, если не добавлять в секцию [Winamp.Uninstall] строки DelDirs=Winamp.DelDirs то [Winamp.AdvInfCall] не срабатывает, если поставить точку с запятой перед Run=Winamp.AdvInfCall или вообще её убрать, что одно и тоже, то строка DelDirs=Winamp.DelDirs отрабатывает на ура, а эту строку я вношу руками, так вот, хотелось бы знать где причина не срабатывания Run=Winamp.AdvInfCall которая создаеться утилиткой?

ya158
27-03-2008, 19:41
DyadyaGenya,
Данная секция всего лишь запускает секцию Winamp.Uninstal.DelDirs. Логика такая:

1. Run=Winamp.AdvInfCall говорит, что в секции Winamp.AdvInfCall при помощи параметра Commandline запускается интерпретатор AdvancedINF, который в свою очередь запускает секцию Winamp.Uninstal.DelDirs в файле Winamp.inf.
2. Теперь надо создать секцию Winamp.Uninstal.DelDirs, в которой будет инструкция на удаление необходимых директорий. Это можно сделать тремя способами -
см. инструкцию (http://oszone.net/3827#cpf5)

Обрати внимание, что секция, которая запускается при помощи
Commandline="""%11%\rundll32.exe"" advpack,LaunchINFSection ""%17%\Winamp.inf"",Winamp.Uninstal.DelDirs,4"
должна называться Winamp.Uninstal.DelDirs

DyadyaGenya
28-03-2008, 20:00
ya158, да в том то и дело, что она есть, и вроде даже прописываю, странно, когда использую промт и в нем прописываю
[Dir.Delete]
rundll32.exe advpack.dll,DelNodeRunDLL32 %16422%\%PROG_DIR%

то все красиво срабатывает, понимаю, что может пример не коректный, просто тоже с использованием rundll32.exe advpack.dll
а в предыдущем примере указанная секция есть, вот она:
[Winamp.Uninstal.DelDirs]
DelDirs=Winamp.DelDirs
по идее должна была удалить

volk1234
28-03-2008, 22:34
DyadyaGenya,
я кода пример аддона netlook писал для руководства столкнулся с похожей проблемой,
мне здесь помогли:
volk1234
Поскольку удаление папок осуществляется через advpack, то вместо инструкции Run нужно использовать RunPostSetupCommands
Run обрабатывается только через setupapi http://forum.oszone.net/post-757725-446.html

и в руководстве по созданию аддонов в примере создания аддона Netlook http://forum.oszone.net/post-762548-474.html
посмотрите про деинсталяцию, я также споткнулся на удалении папок, хотел удалять как по инструкции, а потом использовать более продвинутые методы.
Если вкратце для удаления папок пользуйтесь RunPostSetupCommands вместо Run и Удаляйте структуру папок снизу предварительно удалив файлы.


Имеем структуру папок:
Folder
-subfolder1
--subsubfolder1
-subfolder2

Условным кодом удаляем:

Del subsubfolder1
Del subfolder1
Del subfolder2
Del Folder

ya158
30-03-2008, 11:06
ya158, да в том то и дело, что она есть, и вроде даже прописываю, странно, когда использую промт и в нем прописываю
[Dir.Delete]
rundll32.exe advpack.dll,DelNodeRunDLL32 %16422%\%PROG_DIR%
то все красиво срабатывает, понимаю, что может пример не коректный, просто тоже с использованием rundll32.exe advpack.dll
а в предыдущем примере указанная секция есть, вот она:
[Winamp.Uninstal.DelDirs]
DelDirs=Winamp.DelDirs
по идее должна была удалить »

В первом примере можно удалять НЕПУСТЫЕ директории, а во втором примере каталог Winamp.DelDirs перед удалением должен быть ПУСТЫМ. Попробуй перед
DelDirs=Winamp.DelDirs
вставить строку
Cleanup=1
Для удаления с помощью rundll32.exe синтаксис должен быть следующим:

[Winamp.AdvInfCall]
Commandline="""%11%\rundll32.exe"" advpack,LaunchINFSection ""%17%\Winamp.inf"",Winamp.Uninstal.DelDirs,4"
TickCount=500

[Winamp.Uninstal.DelDirs]
RunPreSetap=Winamp.Uninstal.Del:1

[Winamp.Uninstal.Del]
rundll32.exe advpack.dll,DelNodeRunDLL32 "%16422%\%PROG_DIR%"

DyadyaGenya
30-03-2008, 23:00
ya158, про Cleanup=1 » я читал в статье и пробовал сам, в том числе и DelFiles=files все равно не удаляет, потому и возник вопрос, а про
RunPreSetap не написал только потому что использовал в нем rundll32.exe advpack.dll,DelNodeRunDLL32 %16422%\%PROG_DIR% точнее использовал с промтом и как RunPostSetupCommands » поэтому и возник вопрос, почему не удаляеться строчкой из заготовки, судя по словам Поскольку удаление папок осуществляется через advpack, то вместо инструкции Run нужно использовать RunPostSetupCommands
Run обрабатывается только через setupapi »
необходимо использовать как я и делал другие способы, но ведь почему то в приложении эта строка создаеться, выходит либо приложение не право, либо я чего-то не понимаю

и ещё, Код:
[Winamp.AdvInfCall] Commandline="""%11%\rundll32.exe"" advpack,LaunchINFSection ""%17%\Winamp.inf"",Winamp.Uninstal.DelDirs,4" TickCount=500
[Winamp.Uninstal.DelDirs]
RunPreSetap=Winamp.Uninstal.Del:1
[Winamp.Uninstal.Del]
rundll32.exe advpack.dll,DelNodeRunDLL32 "%16422%\%PROG_DIR%" »
зачем дважды делать телодвижения, если можно сразу вызвать
[Winamp.Uninstal.DelDirs]
RunPreSetap=Winamp.Uninstal.Del:1




© OSzone.net 2001-2012