Вы должны войти, чтобы создавать сообщения и темы.

Вопрос по созданию портативных программ

◄Страница 2 из 7► 7

@deceus
Спасибо большое за советы. У меня к вам есть вопрос, если конечно, найдете времечко мне уделить. Можно поинтересоваться, как убираются следы в формате "HKEY_USERS\S-1-5-21-736489704-63571631-3151960771-1001" и подобные ей? Ведь, как я заметил, в каждой системе код ей присвается свой. То есть нет константы, а как унифицировать путь, чтобы ключи подчищались на любой системе? Если с именем пользователем понятно - используем "%Username%, то вот как с этим путем не ясно 🤷🏻‍♂️
И спасибо за мою исправленную работу. Можно поинтересоваться, что означает символ ";" (точка с запятой) перед началом пути в реестре?

Вы не внимательно читаете мои сообщения HKEY_USERS(все профили, пользователи windows) и HKEY_CURRENT_USER(это конкретно вы) это одно и тоже, удалив в HKCU следы, они удалятся и в HKU, забудьте про HKU и работайте с HKCU.

что означает символ ";" (точка с запятой) перед началом пути в реестре?

Закомментировано, не работающие строки.

Лайкнул Алик
Алик
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

Извините, Михаил, уже совсем путаница в голове, спасибо большое за ваши наставления) Если бы не вы, уже забросил бы эту идею, так как вчера настроение совсем попортилось после многочасовых безуспешных попыток слепить что-то более менее портативное )

Цитата: Mikhail от 09.02.2022, 16:11

HKEY_USERS(все профили, пользователи windows) и HKEY_CURRENT_USER(это конкретно вы) 

Приветствую.
Немного "разжую" данный момент. Новость, ветки HKEY_CURRENT_USER физически не существует 🙂 В HKEY_USERS хранятся ветки всех пользователей в системе и в зависимости от того, какой пользователь залогинился, его ветка и монтируется как HKEY_CURRENT_USER. Т.е. HKEY_CURRENT_USER это виртуальная ссылка на HKEY_USERS\<GUID текущего пользователя>\
Например, если вы откроете regedit от имени другого пользователя или от пользователя Система, то и HKEY_CURRENT_USER будет для каждого свой.

Лайкнули Mikhail, Dmitresso и Алик
MikhailDmitressoАлик

Спасибо, понял) А как быть с ключами, которые лаунчер не может зарезервировать? 
Мне вот подсказали:

Спойлер

Я сам не понял, что он имел в виду "Резервирует", есть ключ в TU, прописываем в лаунчере на удаление и все.
Просто есть ключи реестра одноразовые, как например регистрация программы в реестре, запустил, 1 раз появилось, больше ее не будет.
Те ключи, что он закомментировал можно так же прописать на удаление, хуже от этого не будет, а вдруг появятся.
Но брать их, то есть экспортировать в portable при закрытии не нужно, берем только настройки программы и все и то если нужно.

Лайкнул Алик
Алик
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

что-то все равно ключи остаются...

[Launch]
ProgramExecutable64="DR\Defraggler64.exe
ProgramExecutable="DR\Defraggler.exe"
DirectoryMoveOk=yes

[Activate]
Registry=true

[RegistryKeys]
Default="HKCU\Software\Piriform"
-="HKLM\Software\Microsoft\Windows\CurrentVersion\App Path\defraggler.exe"
-="HKLM\Software\Piriform"
-="HKLM\Software\Wow6432Node\Piriform"
-="HKCU\Software\Piriform\Defraggler"

 остаются эти ключи..

Спойлер

В TU удалите HKU и добавьте HKCU, чтоб нормально работать с реестром.
Чтоб удалялось в HKLM надо рядом с ini файлов в launcher создать текстовик Custom.nsh и прописать туда

это

${SegmentFile}
${Segment.OnInit}
    System::Call "kernel32::GetCurrentProcess()i.s"
    System::Call "kernel32::IsWow64Process(is,*i.r0)"
    StrCmp $0 0 +2
    SetRegView 64
!macroend

${SegmentPrePrimary}
    SetRegView 64
        SetRegView LastUsed
!macroend

${SegmentPostPrimary}
    SetRegView 64
    DeleteRegKey HKLM `SOFTWARE\Piriform`

        	Pop $0
        SetRegView LastUsed
!macroend


Второй ключ должен по идее забирать при закрытии, это настройки, я у себя проверил, все работает.

Лайкнул Алик
Алик
«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

Михаил, спасибо вам огромное! Можно поинтересоваться, почему чтобы удалялась в HKLM нужно добавлять новый ini файл - это во всех случаях делается, когда нужно что-то удалить из HKLM и универсальный ли это скрипт?

что-то не работает для меня, вроде бы сделал все, как вы мне сказали.. уже совсем неловко.. 
https://disk.yandex.ru/d/W5RULeswM1eVyQ

Возник вопрос что значит "-" вместо названия файла реестра? Пример:
Default="HKCU\Software\Piriform"
-="HKLM\Software\Microsoft\Windows\CurrentVersion\App Path\defraggler.exe"
Вот кстати сделал рабочий портбл без этих "-" тык
Правда он почему то не сохраняет все остальные ключи (или они не создавались вообще, забыл проверить), кроме одного, но зато и не оставляет этих других..

Лайкнул Алик
Алик

да, и правда не создает ключей, спасибо) 
а что на счет твоей программы для Fallout76 - разобрался?

Да, все заработало, это была неправильная кодировка, как Миша и сказал. Кстати, поделюсь опытом, у меня почему то, плохо работало сохранение папок или реестра, когда тут или тут были кавычки. И даже если есть пробелы в пути к папке или какому-нибудь ключу, то и без кавычек все работает прекрасно, однако если не ошибаюсь, то сталкивался с проблемами когда кавычек не было здесь.

да, кажется, были какие-то проблемы с кавычками 😅
Кстати, не подскажешь, что это за такие параметры реестра как "Children" и "Parents"? У меня программа от клавиатуры, которую я делал портативной, сохраняет туда какие-то данные:

Спойлер

Спойлер

◄Страница 2 из 7► 7