Войти

Показать полную графическую версию : [решено] Не отображается ссылка на программу в меню "Все программы"


asds1
24-06-2017, 14:07
У меня своя программа(написана мною)
Записываю в реестр пути деинсталяции. Деинсталятор тоже самописный и срабатывает все отлично
Решил прописать ссылку на деинсталятор в меню Все программы.
Создаю ссылку и помещаю(программно) её в C:\ProgramData\Microsoft\Windows\Start Menu\Programs
Вот все работает, только этот ярлык не отображается в меню Все программы.
В ярлыке указано все как обычно - объект, рабочая директория и так далее.
Программа работает от имени администратора
Пишу на AutoIT
Система win 10. Работает хорошо. проблем с установкой софта нет.

Iska
24-06-2017, 14:34
Решил прописать ссылку на деинсталятор в меню Все программы.
Создаю ссылку и помещаю(программно) её в C:\ProgramData\Microsoft\Windows\Start Menu\Programs
Вот все работает, только этот ярлык не отображается в меню Все программы.
В ярлыке указано все как обычно - объект, рабочая директория и так далее. »
asds1, без исходного кода — разговор ни о чём.

asds1
24-06-2017, 15:39
Iska, ))))
$gtprname - произвольное имя, которое вводит пользователь
$unico - иконка, которая будет отображаться в меню. Берется или из файла деинсталятора или непосредственно из файла *.ico, который выбрал пользователь
$unmod = @ProgramFilesDir & '\' & $gtprname
DirCreate($unmod)
FileCopy($wkdir & '\unmod.exe', $unmod & '\unmod.exe')
DirCreate(@ProgramsCommonDir & '\' & $gtprname)
FileCreateShortcut($unmod & '\unmod.exe', @ProgramsCommonDir & '\' & $gtprname & '\unmod.lnk', $unmod, '', '', $unico)
остальная тысяча строк не имеет отношения к созданию ярлыка

Iska
24-06-2017, 15:57
только этот ярлык не отображается в меню Все программы. »
А после завершения сеанса и повторного входа (или после перезагрузки)?

asds1
24-06-2017, 16:08
и после перезагрузки то же самое
делаю установку, появляется в меню Все программы ссылка Имя программы(папка)->ссылка на файл.
кликаешь, папка раскрывается, вижу ссылку на файл и через пару секунд происходит обновление списка и все это исчезает. все остальные программы в списке присутствует.
с оптимизацией системы не балуюсь.

asds1
02-07-2017, 13:15
так и не нашел в чем проблема. ограничился созданием ярлыка без папки

Petya V4sechkin
02-07-2017, 13:30
asds1, такой вариант (http://windowssecrets.com/forums/showthread.php/179666-Windows-10-Duplicate-Short-Cuts-and-All-Apps) бывает.

asds1
03-07-2017, 12:04
возможно, но не думаю. естественно, я определяю пути к файлу запуска и рабочей директории в ярлыке.
даже файлов таких больше нет(по имени). я говорю за тесты в своей системе.
понимаю, что были бы баги у пользователей. скидывал для теста знакомому, тот тоже описал эту же проблема.
в чем суть то. ярлык без папки создается и все работает, а вот папку создаю а в ней ярлык - проявляется проблема. Не подходящее имя папки? Пробовал и ru и en разницы нет
можно без папки(что и сделал), но как-то не камильфо
хочу постепенно свой проект (http://soft.oszone.net/program/17432/JMPACK/) перевести в универсальный инсталятор, а тут такой косячок на пути )))

Iska
03-07-2017, 12:30
asds1, не думали использовать не самописный инсталлятор, а какой-нибудь WiX, InnoSetup или NSIS?

Petya V4sechkin
03-07-2017, 12:44
asds1, сделайте лог Process Monitor (https://technet.microsoft.com/ru-ru/sysinternals/processmonitor) следующим образом:
запустите Process Monitor;
откройте меню Пуск -> Все программы;
сохраните лог: меню File -> Save -> PML-формат;
заархивируйте и выложите на любой файлообменник, например dropmefiles.com;
сообщите, какой ярлык не виден в списке.

asds1
03-07-2017, 13:21
asds1, не думали использовать не самописный инсталлятор, а какой-нибудь WiX, InnoSetup или NSIS? »
так в том то и суть, что мой проект это и есть альтернатива тому же IS, только с узкой специализацией. Желающих собрать свой модпак достаточно, но изучать кодирование есть далеко не у всех. вот я и предоставил такой инструмент. в предыдущих версиях не было опции "деинсталяция", добавил по просьбе.

сделайте лог Process Monitor с »

сделаю

Iska
03-07-2017, 13:42
Не вижу, в чём тут альтернатива, кроме возникшей проблемы.

asds1, Вы можете оставить свою оболочку ровно такой же, но делать готовую инсталляцию, например, под тот же InnoSetup, благо сборка им вполне может делаться программно: Inno Setup Help - Command Line Compiler Execution (http://www.jrsoftware.org/ishelp/index.php?topic=compilercmdline). И никому изучать кодирование (кроме Вас) не понадобится.

asds1
03-07-2017, 16:54
Iska, не важно на чем кодировать, проблем все равно не избежать. Даже благоприятная среда кодирования не сделает код за тебя )
В AutoIT я вижу достаточно инструментов, чтобы делать свой проект
Установка деинсталятора это мелочь, просто не люблю оставлять не решенных задач

Теперь о самой проблеме. Запустил "трудный" код создания папки+ярлыка деинсталятора - сейчас все работает норм. никуда не исчезает ничего. перегружал систему, в меню Все приложения ярлык есть
сделал, правда, незначительное дополнение, но на суть оно не должно было повлиять
далее конкретная часть регистрации деинсталяции в системе
$unmod = @ProgramFilesDir & '\' & $gtprname
DirCreate($unmod)
FileCopy($wkdir & '\unmod.exe', $unmod & '\unmod.exe')
$unico = $unmod & '\uninst.ico' или $unico = $unmod & '\unmod.exe'
RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' & $gtprname, 'DisplayIcon', 'REG_SZ', $unico)
RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' & $gtprname, 'DisplayName', 'REG_SZ', $gtprname)
RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' & $gtprname, 'UninstallString', 'REG_SZ', $unmod & '\unmod.exe')
RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' & $gtprname, 'UninstallDirectory', 'REG_SZ', $unmod)
RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' & $gtprname, 'InstallLocation', 'REG_SZ', $unmod)
RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' & $gtprname, 'Publisher', 'REG_SZ', $gtprname)
DirCreate(@ProgramsCommonDir & '\' & $gtprname)
FileCreateShortcut($unmod & '\unmod.exe', @ProgramsCommonDir & '\' & $gtprname & '\Удалить ' & $gtprname & '.lnk', $unmod, '', '', $unico)

если возникнет опять ситуация с пропажей ярлыка, тогда сделаю лог от PM
Спасибо всем за помощь советами

Iska
03-07-2017, 17:18
Iska, не важно на чем кодировать, »
Не могу с Вами согласиться, коллега.

Даже благоприятная среда кодирования не сделает код за тебя ) »
Разумеется. Но к пользователю Вашего проекта это не будет иметь никакого отношения.

В AutoIT я вижу достаточно инструментов, чтобы делать свой проект »
Дык, кто ж запретит. Там вон и готовый проект инсталлятора где-то на официальном форуме лежит.

Установка деинсталятора это мелочь, просто не люблю оставлять не решенных задач »
Не мелочь. Это необходимость.

asds1
04-07-2017, 14:13
история повторилась. сделал лог из PM
ссылка (https://www.dropbox.com/s/ku4ly0rwtd9ua6e/Logfile.7z?dl=1)
не виден ярлык - Удалить ModPack World of Tanks ver.0.9.19.0.2.lnk
расположение ярлыка - C:\ProgramData\Microsoft\Windows\Start Menu\Programs\ModPack World of Tanks ver.0.9.19.0.2\Удалить ModPack World of Tanks ver.0.9.19.0.2.lnk

Petya V4sechkin
04-07-2017, 16:16
asds1, в этом логе нет обращений к Start Menu.

asds1
04-07-2017, 17:26
сделал еще раз
скачать (https://www.dropbox.com/s/5se0yvn7dimkg4f/Logfile.zip?dl=1)

asds1
11-07-2017, 11:00
примерно так выходит.
если создание папки в Start Menu идет после записи деинсталяции в реестр, то наблюдаю описанную проблему с исчезновением ярлыка
если сначала создаю ярлык в собственной папке по адресу C:\ProgramData\Microsoft\Windows\Start Menu\Programs, а потом уже пишу в реестр, то ярлык не исчезает.
не могу уловить взаимосвязи очередности создания папки и записи в реестр. конечно же, указанная очередность работает, но вот почему так, не могу понять.




© OSzone.net 2001-2012