Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 9]
Только в portable её не должно быть вообще.
Так как там не нужны ярлыки.
А она пытается и в portable ярлык повесить...
Так там их и не будет, потому что у вас в секции [Icons] все ярлыки в меню пуск будут установлены через проверочную функцию InstallerCheck, а это просто показывается страница. Эта страница или показывается или нет.
InnoSetup разработан под одну программу, а не под несколько. Запихать в InnoSetup несколько программ (стационарную и портативную) это уже умельцы придумали (переупаковщики программ)
PS: Вам как нужно, в обязательном порядке, при выборе стационарной версии показывать компоненты программной группы, или же не принципиально.
PS: Вам как нужно, в обязательном порядке, при выборе стационарной версии показывать компоненты программной группы, или же не принципиально. »
Не принципиально.
serg5,
Если страницу выбора папки в меню пуск совсем не хотите показывать, тогда в секции [Setup] пропишите DisableProgramGroupPage=yes
Если при выборе стационарной версии страницу выбора папки в меню пуск показывать, а при выборе портативной версии нет,
тогда в секции [Setup] уберите или закомментируйте DisableProgramGroupPage=yes, а в скрипте вставь
function ShouldSkipPage(PageID: Integer): Boolean;
begin
case PageID of
wpSelectProgramGroup: Result := Portable.Checked <> False;
end;
end;
Если страницу выбора папки в меню пуск совсем не хотите показывать, тогда в секции [Setup] пропишите DisableProgramGroupPage=yes
Если при выборе стационарной версии страницу выбора папки в меню пуск показывать, а при выборе портативной версии нет,
тогда в секции [Setup] уберите или закомментируйте DisableProgramGroupPage=yes, а в скрипте вставь
Код:
function ShouldSkipPage(PageID: Integer): Boolean;
begin
case PageID of
wpSelectProgramGroup: Result := Portable.Checked <> False;
end;
end; »
Всё Ok.спс.:bow:
tigerheart001
20-09-2022, 14:38
Добрейшего дня, уважаемые форумчане !
Прошу помощи со скриптом.
Ситуация такая.
1. Есть некоторая программа, которая устанавливается без проблем, как положено.
2. Есть дополнения (плагины) к этой программе, которые должны устанавливаться точно в ту же, папку, что и основная программа.
Но проблема в том, что не все пользователи понимают, какую папку нужно выбрать при установке дополнений, и потом жалуются, что, мол, «программа - херня, ничего не работает».
Решение:
Было бы хорошо, если бы установщик основной программы прописывал путь установки в системном реестре, а установщики дополнений потом его оттуда считывали бы.
С первой половиной задачи я справился без труда, добавив в скрипт установки :
[Registry]
Root: HKLM; Subkey: "SOFTWARE\{#MyAppName}"; ValueType: string; ValueName: "Path"; ValueData: "{app}"
Но вот вторую половину решить никак не получается.
Вот так ничего не работает :
[Setup]
...
DefaultDirName={reg:HKLM\SOFTWARE\{#MyAppName},Path|{sd}\{#MyAppName}}
( Переменной #MyAppName значение присвоено. )
El Sanchez
20-09-2022, 19:12
Вот так ничего не работает : »
tigerheart001, написано правильно, должно работать. Разве что программа пишет путь в 64-разрядный раздел реестра, а установщик дополнений читает из 32-разрядного.
tigerheart001
21-09-2022, 10:58
tigerheart001, написано правильно, должно работать. »
Значит вариант «кривые руки» исключаем.
Ок, пошёл тогда копать дальше.
Спасибо за наводку...
Vanadiy777, В продолжение темы http://forum.oszone.net/post-2993783-643.html
Можно ли добавить проверку, что если выбран определенный компонент из [Components], то тогда закрывать Ситм, иначе нет?
P.S. Вопрос снят, решение найдено.
Vanadiy777
08-10-2022, 20:27
EdMSL,
procedure CurStepChanged(CurStep: TSetupStep);
var
i: integer;
begin
if CurStep = ssInstall then
begin
// Компоненты пишем свои, если их несколько, то перечисляем, в зависимости от условий - "or" или "and"
// Здесь задается условие: если выбран компонент "Steam" и найден запущенный процесс "Steam" - то процесс будет "прибит"
if IsComponentSelected('Steam') and IsProcessRunning('Steam.exe') then
Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM Steam.exe', '', SW_HIDE, ewWaitUntilTerminated, i);
end;
end;
P.S. Опоздал маненько, пока писал ... :)
P.S. Опоздал маненько, пока писал »
Может кому еще пригодится, мало ли. В любом случае спасибо за ответы.
Теперь встал вопрос, как закрывать Стим перед удалением, если ставилась версия именно для Стим. В деинсталяторе не работает IsComponentSelected. Как еще проверить можно? Желательно без записей в реестр, если возможно.
Единственное, что приходит мне на ум, это проверять на наличие файла, специфичного только для Стим версии.
Vanadiy777
09-10-2022, 23:33
Теперь встал вопрос, как закрывать Стим перед удалением, если ставилась версия именно для Стим. »
EdMSL,
не совсем задача понятна...
Так не пойдет?
[_code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
i: integer;
begin
if CurUninstallStep = usUninstall then
begin
if IsProcessRunning('Steam.exe') then
Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM Steam.exe', '', SW_HIDE, ewWaitUntilTerminated, i);
end;
end;
Vanadiy777, Поясню. Этот код будет всегда закрывать Стим, когда моя сборка удаляется. Но сборка имеет две версии, стим и нестим. А определяется это на этапе установки сборки путем выбора компонента [Components]. В итоге хотелось бы, чтобы закрывался стим только тогда, когда пользователь установил именно стим версию сборки. Но, как я написал, IsComponentSelected недоступен при удалении, его я использую для определения, закрывать ли стим при установке. В общем, нужно что-то вроде
if IsComponentSelected('type\steam') and IsProcessRunning('Steam.exe') then
...
но для деинсталятора.
Vanadiy777
10-10-2022, 23:13
А определяется это на этапе установки сборки путем выбора компонента [Components]. »
EdMSL,
Возможно, предложу сейчас полную херь... :)
При установке программы с выбором компонентов в разделе Uninstall Вашей программы прописывается строковый параметр
Inno Setup: Selected Components, и там должны быть указаны установленные компоненты.
Можно попробовать через RegQueryStringValue считать значение и добавить его в условия при удалении.
Но, полный синтаксис не подскажу, не пользовался...
Буду тоже очень признателен, если коллеги подскажут.
Vanadiy777, да, можно попробовать этот способ. Правда, если пользователь установит сборку повторно, не удалив предыдущую (а это не запрещено, так как сборка автономная), то предыдущая информация затрется новой. Не так критично, но есть такой нюанс.
В общем, написал такое условие:
if
(CurUninstallStep = usUninstall)
and RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{ADF6076C-BDF7-4515-8D60-17F9DBAD5B41}_is1', 'Inno Setup: Selected Components', Value)
and (Pos('type\steam', Value) > 0)
and IsProcessRunning('Steam.exe') then
closeSteam()
Вроде работает.
Vanadiy777
11-10-2022, 17:06
если пользователь установит сборку повторно, не удалив предыдущую (а это не запрещено, так как сборка автономная), »
EdMSL,
а если запретить повторную установку, пока не удалена старая версия? Не пойдет так?
Что нибудь типа такого:
[_Code]
function InitializeSetup(): Boolean;
begin
Result:= True;
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MyProg_is1') then begin
MsgBox('Для продолжения необходимо удалить старую версию программы', mbError, MB_OK);
Result:= False;
end;
end;
Vanadiy777, В принципе, можно и запретить. Возможно это даже полезно будет. Подумаю. За код спасибо, пригодится.
Vanadiy777
11-10-2022, 20:19
Коллеги, всем доброго времени суток!
Помогите решить проблему...
При запуске и отработке программы на редакции Windows 7 Home Basic выскакивает стандартное окно перезагрузки,
т.е. FinishedPage, хотя это все отключено...
Это происходит только на редакции Windows 7 Home Basic, на остальных редакциях Windows 7-11, все отрабатывает нормально.
Возможно ли как-то принудительно "удавить" это окно на Windows 7 Home Basic?
Версия Inno Setup 6.0.5, но пробовал и на 5.6.1
Результат один и тот же...
Подскажите, пожалуйста, кто знает...
За ранее, спасибо.
UPD: Решение найдено, всем спасибо.
Как правильно прописать выбор нужной разрядности при инсталляции.
Может кто знает ?
Vanadiy777
14-10-2022, 18:20
Как правильно прописать выбор нужной разрядности при инсталляции. »
serg5,
разрядности чего?
Если файлов, то как то так:
[Files]
Source: "{app}\File,1.exe"; DestDir: "{app}"; DestName: "File.exe"; Check: "IsWin64"; Flags: ignoreversion
Source: "{app}\File,2.exe"; DestDir: "{app}"; DestName: "File.exe"; Check: "not IsWin64"; Flags: ignoreversion
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.