Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.191.212.95] |
|
Сообщ.
#1
,
|
|
|
[Setup] AppName=FL AppVerName=FL 12.4.1.0 DefaultDirName={code:GetDirName} DisableDirPage=yes DisableFinishedPage=no DisableReadyPage=no DisableWelcomePage=no [Code] procedure ExitProcess(exitCode:integer); external 'ExitProcess@kernel32.dll stdcall'; function GetDirName(Value: string): string; var InstallPath: string; begin if RegQueryStringValue(HKCU, 'Software\Image-Line\Shared\Paths', 'Shared DLLs', InstallPath) then Result := InstallPath else begin MsgBox('FL not exist', mbCriticalError, mb_Ok) ExitProcess(0) end end; Нужен какой-нибудь способ замены файла, напримрер: elastique_x64.dll, например на более старую версию. Либо просто замена после проверки, например: (If) если запись в реестре существует, то копируется один файл, если записи не существует, (then)то копируется другой файл... Запись в реестре нужно заодно удалять в одном из условий. Пусть ориентиром будет EEKbLabelWhites: Root: HKCU; Subkey: "Software\Image-Line\FL Studio 12\General\FruityLoopsMainForm"; ValueName: "EEKbLabelWhites"; Flags: deletevalue noerror; Permissions: everyone-full Выше часть моего инсталятора, чтобы не подгонять потом под код, ато я плохо в паскале ориентируюсь. И я не знаю как в секции [Files] устанавливать выборочно нужные группы файлов. Установка без диалогов. Смысл в универсальности установки: обновления/отката в одном инсталяторе. Просто как грамотно написать. |
Сообщ.
#3
,
|
|
|
[Setup] AppName=! AppVerName=! 0.0.0.0 DefaultDirName={pf}\! OutputDir=. OutputBaseFilename=! [Code] function FruityLoopsMainForm(): Boolean; begin if RegDeleteValue(HKEY_CURRENT_USER, 'Software\Image-Line\FL Studio 12\General\FruityLoopsMainForm', 'EEKbLabelWhites1') then Result := true end; [Files] Source: "1.TXT"; DestDir: "{sd}"; Check: FruityLoopsMainForm Source: "2.TXT"; DestDir: "{sd}"; Check: not FruityLoopsMainForm Что-то не получается Похоже моя функция ничего не возвращает, а как это сделать? |
Сообщ.
#4
,
|
|
|
[Code] function FruityLoopsMainForm(): Boolean; begin if RegValueExists(HKCU, 'Software\Image-Line\FL Studio 12\General\FruityLoopsMainForm', 'EEKbLabelWhites') then begin Result := true end else begin Result := false end end; [Registry] ; FruityLoopsMainForm Root: HKCU; Subkey: "Software\Image-Line\FL Studio 12\General\FruityLoopsMainForm"; ValueName: "EEKbLabelWhites"; Flags: deletevalue noerror; Permissions: everyone-full; Check: FruityLoopsMainForm ; not FruityLoopsMainForm Root: HKCU; Subkey: "Software\Image-Line\FL Studio 12\General\FruityLoopsMainForm"; ValueType: string; ValueName: "EEKbLabelWhites"; ValueData: "0"; Flags: noerror; Permissions: everyone-full; Check: not FruityLoopsMainForm Секция Registry срабатывает раньше и Code не работает. Нужно сделать, чтобы каждый раз удалалось/записывалось value в реестре согласно условию |
Сообщ.
#5
,
|
|
|
[Code] function x(): Boolean; begin if RegValueExists(HKCU, 'Software\aaaa', 'bbbb') then begin Result := RegDeleteValue(HKCU, 'Software\aaaa', 'bbbb') end else begin Result := RegWriteStringValue(HKCU, 'Software\aaaa', 'bbbb' ,'0') end end; Не пойму что не так? |
Сообщ.
#6
,
|
|
|
Цитата semiono @ Не пойму что не так? X всегда возвращает True. Может дело в этом? |
Сообщ.
#7
,
|
|
|
[Setup] AppName=! AppVerName=! 0.0.0.0 DefaultDirName={pf}\! OutputDir=. OutputBaseFilename=! [Code] function x(): Boolean; begin if RegValueExists(HKCU, 'Software\a', 'b') then begin Result := true end else begin Result := false end end; [Registry] ; x Root: HKCU; Subkey: "Software\aaaa"; ValueType: none; ValueName: "b"; Flags: deletevalue noerror; Permissions: everyone-full; Check: x ; not x Root: HKCU; Subkey: "Software\aaaa"; ValueType: string; ValueName: "b"; ValueData: "0"; Flags: noerror; Permissions: everyone-full; Check: x [Files] Source: "1.TXT"; DestDir: "{sd}"; Check: x Source: "2.TXT"; DestDir: "{sd}"; Check: not x Вроде бы реагирует, но как сделать чтобы результат всегда был противоположным? Сейчас установка реагирует на запись в реестре, но за вторым разом всегда выполняет одно и то же действие. Мне нужно чтобы инсталятор сам изменял будущее условие. |
Сообщ.
#8
,
|
|
|
Все-таки не до конца понятно что именно нужно.
|
Сообщ.
#9
,
|
|
|
[Setup] AppName=! AppVerName=! 0.0.0.0 AllowUNCPath=no DefaultDirName={code:GetDirName} DirExistsWarning=no DisableDirPage=yes DisableFinishedPage=no DisableProgramGroupPage=yes DisableReadyMemo=yes DisableReadyPage=no DisableWelcomePage=no ArchitecturesAllowed=x64 ArchitecturesInstallIn64BitMode=x64 MinVersion=0,6.0 Compression=lzma/ultra64 SolidCompression=yes OutputDir=. OutputBaseFilename=zzzz TouchDate=2001-01-01 TouchTime=00:00:00 Uninstallable=no UsePreviousAppDir=no [Code] procedure ExitProcess(exitCode:integer); external 'ExitProcess@kernel32.dll stdcall'; function GetDirName(Value: string): string; var InstallPath: string; begin if RegQueryStringValue(HKCU, 'Software\$', 'Path', InstallPath) then Result := InstallPath else begin MsgBox('$ not exist', mbCriticalError, mb_Ok) ExitProcess(0) end end; function x(const a: string): Boolean; begin Result := not RegValueExists(HKCU, 'Software\$', 'EEKbLabelWhites') if not Result then RegDeleteValue(HKCU, 'Software\$', 'EEKbLabelWhites') end; function y(const a: string): Boolean; begin Result := not RegValueExists(HKCU, 'Software\$', 'EEKbViewStyle') if not Result then RegDeleteValue(HKCU, 'Software\$', 'EEKbViewStyle') end; function z(): Boolean; begin Result := not RegValueExists(HKCU, 'Software\$', 'EEKbViewStyle') end; [Registry] Root: HKCU; Subkey: "Software\$"; ValueType: string; ValueName: "EEKbLabelWhites"; ValueData: "0"; Permissions: everyone-full; Check: x('') Root: HKCU; Subkey: "Software\$"; ValueType: string; ValueName: "EEKbViewStyle"; ValueData: "4"; Permissions: everyone-full; Check: y('') [Files] Source: "New File.txt"; DestDir: "{code:GetDirName}"; Flags: ignoreversion; Permissions: everyone-full; Check: z Source: "New File (2).txt"; DestDir: "{code:GetDirName}"; Flags: ignoreversion; Permissions: everyone-full; Check: not z Всё работает правильно! Скажите пожалуйста, здесь можно улучшить код или всё итак оптимально? |