Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 8]
:D
секция files вроде бы работает на чек корректно, но секция registry работает на один раз, либо запишет и потом не удаляет либо наоборот
я пытался сам найти решение, даже написал две функции для Check для разных слкчаев))
что-то тут с логикой...
Может я непонятно задачу объяснил, мне надо чтобы инсталятор то записыва строку, то удалял при каждой новой установке.
Смысл в том чтобы ставить два разных обновленич, то новое, то старое
R.i.m.s.k.y.
22-01-2017, 22:22
semiono, покажи уже скрипт
[Setup]
AppName=!
AppVerName=! 0.0.0.0
DefaultDirName={pf}\!
OutputDir=.
OutputBaseFilename=!
[Co.de]
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
Всё работает верно, первый инстал реагирует первая строка, второй инстал вторая строка, а потом уже только вторая...
Не получается, чтобы инстал изменял будущее условие в СИСТЕМЕ
function x(): Boolean;
begin
if RegValueExists(HKCU, 'Software\a', 'b') then
begin
RegDeleteValue(HKCU, 'Software\a', 'b')
end
else
begin
Result := false
end
end;
function y(): Boolean;
begin
if RegValueExists(HKCU, 'Software\a', 'b') then
begin
RegWriteStringValue(HKCU, 'Software\a', 'b', '0')
end
else
begin
Result := true
end
end;
[Registry]
Root: HKCU; Subkey: "Software\a"; ValueType: string; ValueName: "b"; Flags: deletevalue noerror; Permissions: everyone-full; Check: not y
Root: HKCU; Subkey: "Software\a"; ValueType: string; ValueName: "b"; ValueData: "0"; Flags: noerror; Permissions: everyone-full; Check: not x
[Files]
Source: "1.TXT"; DestDir: "{sd}"; Check: x
Source: "2.TXT"; DestDir: "{sd}"; Check: y :laugh: :(
R.i.m.s.k.y.
23-01-2017, 12:56
semiono, УМВР все работает в первом варианте
Там, кстати, ошибка Software\aaaa и в коде Software\a
R.i.m.s.k.y.
23-01-2017, 13:10
semiono, я поправил конечно, еще MSGBox понатыкал для дебага - работает
http://photouploads.com/images/5df2de.png
1. В реестре ничего нет. Каждый инстал один и тот же результат.
http://photouploads.com/images/80cb56.png
2. В реестре b REG_SZ записанный вручную
Но! При повторном инстале будет возврат к первому скриншёту и далее постоянно один результат.
Кстати, было бы хорошо перед else выполнить EXIT или GO TO, но как это сделать в паскале непонятно.
El Sanchez
24-01-2017, 15:03
1. В реестре ничего нет. Каждый инстал один и тот же результат. »
semiono,
[Registry]
Root: HKCU; Subkey: "Software\aaaa"; ValueType: string; ValueName: "bbbb"; ValueData: "cccc"; Permissions: everyone-full; Check: NeedValue('bbbb')
[Code]
/////////////////////////////////////////////////
function NeedValue(const Value: string): Boolean;
begin
Result := not RegValueExists(HKCU, 'Software\aaaa', Value);
if not Result then
RegDeleteValue(HKCU, 'Software\aaaa', Value);
end;
Понадобилось написать dll библиотеку на Delphi, что бы прикрутить ее к Inno Setup.
Столкнулся с проблемой.
Получаю Access Violation...
Как правильно передать строку из функции в приложение Inno Setup? »
Alloc, изучить (http://www.gunsmoker.ru/2009/01/blog-post.html), понять, написать заново.
vadjliss
24-01-2017, 20:45
ребята как убрать вот это
http://s61.radikal.ru/i174/1701/07/97e77e9f7a86.jpg
vadjliss,
[Setup]
VersionInfoDescription=Tor Browser Bundle
Скажите пожалуйста, здесь код оптимальный или я чего-то лишнего нагородил? Работает правильно!
[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
[.ode]
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
R.i.m.s.k.y.
31-01-2017, 09:32
semiono, ну тебе же камрад El Sanchez выше дал изящный работающий пример
R.i.m.s.k.y., так я этот пример и допиливаю, реальный же инсталл сложнее, но вприципе всё готово, просто думаю может оптимизировать возможно.
Меня, кстати, смущает пустой ввод Check: x(''), хотя там можно что угодно написать, но работает правильно :)
Просто по поводу кода если я лишнего наворотил, поэтому спрашиваю
nikolas2418
01-02-2017, 01:01
Люди, такой вопрос. Создал инсталлятор, всё скомпилировалось без перебоев, затем попробовал поставить прогу, всё отлично встало, НО при повторном запуске инсталлятора, пункт выбора пути установки просто пропускается и он по дефолту ставит в ту папку, куда была установлена прога в первый раз. Помогите, пожалуйста.
НО при повторном запуске инсталлятора, пункт выбора пути установки просто пропускается и он по дефолту ставит в ту папку, куда была установлена прога в первый раз. »Ничего не понял.
Если в секции [Setup] присутствует параметр DisableDirPage, то удалите его вместе со значением.
Если не желаете использовать каталог предыдущей установки, то в секцию [Setup] добавьте следующий параметр со значением:
UsePreviousAppDir=FalseЕсли в секции [Setup] присутствует параметр DisableProgramGroupPage, то удалите его вместе со значением.
Если не желаете использовать каталог в меню Пуск предыдущей установки, то в секцию [Setup] добавьте следующий параметр со значением:
UsePreviousGroup=False
P.S По вопросам связанные со скриптами, обращайтесь в тему: Скрипты Inno Setup. Помощь и советы (http://forum.oszone.net/thread-294838.html)
Всем привет! С inno setup познакомился недавно, поэтому ответ на мой вопрос может быть очевидным. Так что заранее извиняюсь за вероятно нубский вопрос. Нужно сделать инсталлятор, который устанавливает скрипт в определенные папки в зависимости от версии программы, для которой сделан скрипт, т.е. в моем случе есть несколько ключей реестра с путями установки. Нужно вывести для каждого чекбокс и возможность указать путь вручную и произвести в каждый отмеченный путь установку. Ключи из реестра у меня получилось собрать, а вот вывести чекбоксы и обработать их не получается. Кто-нибудь сталкивался с такой задачей?
nikolas2418
01-02-2017, 20:55
Спасибо большое
Просьба помочь советом - что нужно добавить в скрипт установки, что бы программа в зависимости от версии Windows - XP или 2000 копировала в апку xxl файл x1 или x2 соответственно?
что бы программа в зависимости от версии Windows - XP или 2000 копировала в папку xxl файл x1 или x2 соответственно? »
[Files]
Source: x1.exe; DestDir: {app}\xxl; MinVersion: 0,5.1; OnlyBelowVersion: 0,5.2
Source: x2.exe; DestDir: {app}\xxl; MinVersion: 0,5.0; OnlyBelowVersion: 0,5.1
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.