Скрипты Inno Setup. Помощь и советы [часть 9]

Ответить
 • Просмотры: 6
Аватара пользователя
El Sanchez

Re: Скрипты Inno Setup. Помощь и советы [часть 9]

Сообщение El Sanchez »

proffbik, Для этого нужно задействовать секцию [Icons].
Аватара пользователя
OldGamer

Re: Скрипты Inno Setup. Помощь и советы [часть 9]

Сообщение OldGamer »

Цитата Dodakaedr:



proffbik, Для этого нужно задействовать секцию [Icons].
Скрипты Inno Setup. Помощь и советы [часть 9]




Благодарю. Могу ли услышать подробнее для более четкого понимания? Если есть пример кода, то был бы очень признателен





Код:

Код: Выделить всё

[Icons]
Name: "{group}\{#MyAppNameIcon}"; Filename: "{app}\{#MyAppExeName}"; WorkingDir: "{app}"; IconFilename: "{app}\game.ico"
Name: "{commondesktop}\{#MyAppNameIcon}"; Filename: "{app}\{#MyAppExeName}"; WorkingDir: "{app}"; IconFilename: "{app}\game.ico"; Tasks: desktopicon
Name: "{commonappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon
Аватара пользователя
OldGamer

Re: Скрипты Inno Setup. Помощь и советы [часть 9]

Сообщение OldGamer »

Цитата proffbik:



При создании скрипта через wizard, отмечаю "Разрешить пользователю отключить создание папки в меню пуск". В итоге этот выбор не предоставляется пользователю при установке. Помогите люди добрые)
Скрипты Inno Setup. Помощь и советы [часть 9]




Проверь наличие и значение в сценарии директивы
AllowNoIcons
.

Должно быть AllowNoIcons=yes
Аватара пользователя
proffbik

Re: Скрипты Inno Setup. Помощь и советы [часть 9]

Сообщение proffbik »

Цитата Flix:



Проверь наличие и значение в сценарии директивы AllowNoIcons.

Должно быть AllowNoIcons=yes
Скрипты Inno Setup. Помощь и советы [часть 9]




Благодарю. Решил проблему тем, что скачал версию 5.5.9 unicode и в ней как раз таки высветилась эта строчка AllowNoIcons=yes. А в более новых версиях она почему то не прикрепляется визардом)
Аватара пользователя
Dodakaedr

Re: Скрипты Inno Setup. Помощь и советы [часть 9]

Сообщение Dodakaedr »

proffbik, Для этого нужно задействовать секцию [Icons].
Аватара пользователя
proffbik

Re: Скрипты Inno Setup. Помощь и советы [часть 9]

Сообщение proffbik »

Цитата proffbik:



Ничего из этого не работает. Есть варианты сделать это?



Примеры от El Sanchez все рабочие. Фуфло никто выкладывать не будет!.
Аватара пользователя
Flix

Re: Скрипты Inno Setup. Помощь и советы [часть 9]

Сообщение Flix »

Ребята, всем привет. Такая проблема



создал батник, который запускаю вручную -- реестр успешно считывается

если запускаю этот же батник через [run] секцию уже в созданном Inno Setup приложении, то исполняется весь код успешно, кроме чтения реестра



Батник делает простое

Смотрит в реестре путь к игре и если есть потом пишет его в файл.

Писать в файл он может всё что угодно через Inno Setup (это проверено и работает)



Короче вот 2 варианта кода чтения ресстра (которые, повторюсь, рабочие и работают если их запускать вручную, но не хотят если запускать из Inno Setup в любом виде)



Код:

Код: Выделить всё

rem Получаем путь к установке Brawlhalla из реестра
for /f "tokens=2*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 291550" /v "InstallLocation"') do (
    set "registry=%%b"
)



Код:

Код: Выделить всё

powershell -Command "& { $registryPath = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 291550'; $valueName = 'InstallLocation'; $installLocation = Get-ItemProperty -Path $registryPath -Name $valueName | Select-Object -ExpandProperty $valueName; $iconPath = Join-Path -Path $installLocation -ChildPath 'Brawlhalla.exe'; $appDataPath = [System.Environment]::GetFolderPath('ApplicationData'); $hubFilePath = 'Brawlhalla\hub.omx'; if (Test-Path $hubFilePath) { [xml]$xmlContent = Get-Content -Path $hubFilePath; $iconNode = $xmlContent.SelectSingleNode('//icon'); $iconNode.InnerText = $iconPath; $xmlContent.Save($hubFilePath); } }"



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



Пробовал запускать с правами админа, но в чём смысл если сам Inno Setup может читать, а батник нет, мне не подходит вариант даже если это заработает.

Также знаю что в 64 версиях внутри Inno Setup нужно писать HKEY_LOCAL_MACHINE_64

я это пробовал и в батнике (думал вдруг связь есть)

но нет, не помогает

Кто справится с первого раза получит 1000₽ по номеру телефона. Кто не с первого 700₽ (под разом подразумевается выдача готового решения)

Спасибо
Аватара пользователя
proffbik

Re: Скрипты Inno Setup. Помощь и советы [часть 9]

Сообщение proffbik »

Цитата lmiol:



Батник делает простое

Смотрит в реестре путь к игре и если есть потом пишет его в файл.
Скрипты Inno Setup. Помощь и советы [часть 9]




lmiol, reg.exe он разных разрядностей бывает. В зависимости от окружения, 32- или 64-разрядного, из которого вызвали батник, будет вызван 32- или 64-разрядный reg.exe. Только вот 64-разрядный reg при таком запросе полезет искать в 64-разрядный раздел HKLM\SOFTWARE, 32-разрядный reg в 32-разрядный HKLM\SOFTWARE, который фактически является HKLM\SOFTWARE\WOW6432Node. Steam пишет в 64-разрядный раздел, понятно, что 32-разрядный reg или 32-разрядный Inno, вызывающий 32-разрядный reg, ничего не найдут в 32-разрядном разделе. Начитавшись инторнетов, умники в батниках или ещё где явно пишут WOW6432Node, не думая о разрядности вызывающего, потом в 32-разрядных системах в реестре появляется раздел WOW6432Node, которого быть там не должно, или на 64-разрядных системах в 32-разрядном разделе появляется лишний HKLM\SOFTWARE\WOW6432Node\WOW6432Node.

Чтобы такого не происходило, лучше в reg при запросе сразу указывать в какую ветку лезть параметрами /reg:32 или /reg:64, в таком случае разрядность reg не имеет значения.



Код:

Код: Выделить всё

function GetSteamAppInstallLocation(const AAppID: Integer): string;
var
  LSubkeyName: string;
begin
  Result := '';
  LSubkeyName := Format('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App %u', [AAppID]);
  if IsWin64() then
  begin
    if RegQueryStringValue(HKCU64, LSubkeyName, 'InstallLocation', Result) and
      (Result  '') then Exit;
    if RegQueryStringValue(HKLM64, LSubkeyName, 'InstallLocation', Result) and
      (Result  '') then Exit;
  end;
  if RegQueryStringValue(HKCU32, LSubkeyName, 'InstallLocation', Result) and
    (Result  '') then Exit;
  RegQueryStringValue(HKLM32, LSubkeyName, 'InstallLocation', Result);
end;
procedure InitializeWizard();
begin
  MsgBox(GetSteamAppInstallLocation(291550), mbInformation, MB_OK);
end;
Аватара пользователя
proffbik

Re: Скрипты Inno Setup. Помощь и советы [часть 9]

Сообщение proffbik »

Цитата El Sanchez:



lmiol, reg.exe он разных разрядностей бывает. В зависимости от окружения, 32- или 64-разрядного, из которого вызвали батник, будет вызван 32- или 64-разрядный reg.exe. Только вот 64-разрядный reg при таком запросе полезет искать в 64-разрядный раздел HKLM\SOFTWARE, 32-разрядный reg в 32-разрядный HKLM\SOFTWARE, который фактически является HKLM\SOFTWARE\WOW6432Node. Steam пишет в 64-разрядный раздел, понятно, что 32-разрядный reg или 32-разрядный Inno, вызывающий 32-разрядный reg, ничего не найдут в 32-разрядном разделе. Начитавшись инторнетов, умники в батниках или ещё где явно пишут WOW6432Node, не думая о разрядности вызывающего, потом в 32-разрядных системах в реестре появляется раздел WOW6432Node, которого быть там не должно, или на 64-разрядных системах в 32-разрядном разделе появляется лишний HKLM\SOFTWARE\WOW6432Node\WOW6432Node.

Чтобы такого не происходило, лучше в reg при запросе сразу указывать в какую ветку лезть параметрами /reg:32 или /reg:64, в таком случае разрядность reg не имеет значения.
Скрипты Inno Setup. Помощь и советы [часть 9]




Я же уже написал в сообщении что знаю как проверять реестр через inno setup. Мне это не нужно, у меня уже есть готовый код.

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



Я еще раз повторяю мой батник успешно читает что угодно (путь текущий например) и успешно всё это пишет в нужный мне файл (когда запускается через inno setup), вот только считать данные с реестра он не может (зато может когда я запускаю его вручную из под винды). Код считывания с реестра батником я приложил

Я ничего не пишу в реестр мне только надо считать с него и всё





PS я проверю твое предположение про WOW6432Node и прочее

если поможет -- отпишусь
Аватара пользователя
lmiol

Re: Скрипты Inno Setup. Помощь и советы [часть 9]

Сообщение lmiol »

Цитата proffbik:



Ничего из этого не работает. Есть варианты сделать это?



Примеры от El Sanchez все рабочие. Фуфло никто выкладывать не будет!.
Вложения
Pin El Sanchez.rar
(2.07 КБ) 0 скачиваний
Pin El Sanchez.rar
(2.07 КБ) 0 скачиваний
Ответить

Вернуться в «Автоматическая установка приложений»