Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 8]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 [91] 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126

R.i.m.s.k.y.
15-01-2017, 09:14
Я хочу оставить возможность выбора установки компонента, но не таскать его в установочном файле, а подгрузить из сети. Есть примеры на этот счёт? »
были где-то в сборнике примеров, но как получивший в деццтве моральную психологическую травму от V34 и V92 я лично против онлайна и искать не буду
Всё свое нужно носить с собой

Если работает, то всё сделал правильно. »
ты написал С HKCU всё получилось »
поэотму я предположил что ты сделал таки неправильно неправильно, HKCU пишет в реестр current user а не original
поясняю на примере: куст HKCU\Software original user можно получить доступ как HKU\{code:GetOriginalSid}\Software
загляни глазами в HKU и сам всё поймешь

jdcorg
15-01-2017, 12:14
Всё свое нужно носить с собой »
Загрузка из сети также хороший пример, чтобы делать апдэйты проги: проверил наличие, загрузил, обновил.
ты написал »
В inno я первый раз, так что скомпилировал из того, что в сети нашел. Вот и ты помог.
https://forum.kaztorka.org/index.php?showtopic=19878
На этом сайте, по inno, много толкового материала, но в виде винегрета.
загляни глазами в HKU и сам всё поймешь »
хорошо, исследую это дело.

R.i.m.s.k.y.
16-01-2017, 10:17
скажите, пожалуйста, можно ли в инно отслеживать нажатие клавиш? хочу сделать режим при запуске с нажатой клавишей Shift

и можно ли как-то задержать на 20 секунд кнопку next на странице InfoAfterPage?

Dodakaedr
16-01-2017, 12:36
задержать на 20 секунд »
команда sleepsleep(20000)
сделать режим при запуске с нажатой клавишей Shift »
[Setup]
AppName=AppName
AppVerName=AppVerName
DefaultDirName={pf}\My Program

[Code]
const VK_SHIFT = $10;

function GetKeyState(nVirtKey: Integer): Shortint; external 'GetKeyState@user32.dll stdcall';

function InitializeSetup: Boolean;
begin
Result:= GetKeyState(VK_SHIFT) < 0;
if not result then
MsgBox('Для запуска требуется зажать кнопку Shift', mbInformation, MB_OK);
end;

R.i.m.s.k.y.
16-01-2017, 16:29
const VK_SHIFT = $10; »
это стандартный ASCII код SHIFT или откуда-то берется?
ALT = $12, CTRL=$11?
GetKeyState какие значения может принимать?

R.i.m.s.k.y.
18-01-2017, 13:17
sleep(20000) »
установщик замерзает на 20 секунд и не дает промотать скролл на InfoAfterPage
if (CurPageID = wpInfoAfter) then begin
Result:= False;
sleep (20000);
Result:= True;
end;

как сделать установщик в этот момент отзывчивым?

Dodakaedr
18-01-2017, 15:47
как сделать установщик в этот момент отзывчивым? »


[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Code]
var
ok: boolean;
tm: ttimer;

procedure wait(Sender: tobject);
begin
WizardForm.NextButton.Enabled := true;
ok := true;
tm.Free;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectDir then
begin
if ok <> true then
begin
WizardForm.NextButton.Enabled := false;
tm := TTimer.Create(WizardForm.SelectDirPage);
with tm do
begin
Interval:= 5*1000; //5 секунд
OnTimer:= @wait;
end;
end;
end;
end;

procedure InitializeWizard();
begin
ok := false;
end;

R.i.m.s.k.y.
18-01-2017, 15:56
Dodakaedr, что-то я не понял а где кнопка Далее разблокируется?

Dodakaedr
18-01-2017, 15:59
R.i.m.s.k.y., на странице выбора папки установки через 5 сек.

R.i.m.s.k.y.
18-01-2017, 16:02
Dodakaedr, это я понял, я вижу что через 5*1000 вызовется @wait, оно не застынет между Interval:= 5*1000 и OnTimer:= @wait?

Dodakaedr
18-01-2017, 16:05
оно не застынет »
Нет. Можно запустить пример и посмотреть его работу.

Alloc
22-01-2017, 03:04
Привет ребят!
Понадобилось написать dll библиотеку на Delphi, что бы прикрутить ее к Inno Setup. Делаю это в первый раз, опыта раньше не было. Столкнулся с проблемой.

Как правильно передать строку из функции в приложение Inno Setup?

В Delphi я пишу так:

function GetLastVersion(Link: String) : String; stdcall;
var
FileOnNet, LocalFileName: string;
Version: TStringList;
begin
Result:= '0';

FileOnNet:=Link;
LocalFileName:=WinTemp+'MMVersion.dat';

if InternetConnected then
begin
if DownloadFile(FileOnNet,LocalFileName) = True then
begin
Version:= TStringList.Create;
Version.LoadFromFile(LocalFileName);

Result:= Version.Strings[3];

Version.Free;

if FileExists(LocalFileName) then DeleteFile(LocalFileName);
end;

end else
begin
Result:= '0';
end;
end;


В Inno Setup добавляю следующее:


function GetLastVersion(const Link: String) : String; external 'GetLastVersion@files:MMProtect.dll stdcall';


Получаю Access Violation...

semiono
22-01-2017, 15:04
function x(): Boolean;
begin
if RegValueExists(HKCU, 'Software\aaaa', 'bbbb') then
begin
Result := true
end
else
begin
Result := false
end
end;


[Registry]
; x
Root: HKCU; Subkey: "Software\aaaa"; ValueName: "bbbb"; Flags: deletevalue noerror; Permissions: everyone-full; Check: x

; not x
Root: HKCU; Subkey: "Software\aaaa"; ValueType: string; ValueName: "bbbb"; ValueData: "0"; Flags: noerror; Permissions: everyone-full; Check: not x

Не получается. Мне нужно, чтобы согласно условию, если VALUE существует, то надо удалить, если не существвует, то записать в реестр.
То-есть инсталятор должен работать по-кругу, каждый раз выбирая противоположное действие. Как бы так.

R.i.m.s.k.y.
22-01-2017, 15:09
semiono

deletevalue
When this flag is specified, Setup will first try deleting the value if it exists. If ValueType is not none, it will then create the key if it didn't already exist, and the new value.
function x(): Boolean;
begin
Result := RegValueExists(HKCU, 'Software\aaaa', 'bbbb');
end;


[Registry]
; x
Root: HKCU; Subkey: "Software\aaaa"; ValueType: none; ValueName: "bbbb"; Flags: deletevalue noerror; Permissions: everyone-full; Check: x

; not x
Root: HKCU; Subkey: "Software\aaaa"; ValueType: string; ValueName: "bbbb"; ValueData: "0"; Flags: noerror; Permissions: everyone-full; Check: not x

Alloc, покажи секцию files c MMProtect.dll

semiono
22-01-2017, 15:31
R.i.m.s.k.y., не совсем корректно работает. Попробовал убрать Check: not, но не помогло. Вторая строка всегда пишется в реестр.

Если нужно, реестр можно было бы в секции код править, (но мне функция чек так же нужна в секции Files, надеюсь потом это возможно добавить?)

R.i.m.s.k.y.
22-01-2017, 15:47
не совсем корректно работает »?

реестр можно было бы в секции код править »
regWriteStringValue

semiono
22-01-2017, 18:13
? »
Первый раз записывает строку, а после этого всегда проходит обе (вернее первый раз удаляет и записывает)

[x] Root: HKCU; Subkey: "Software\aaaa"; ValueType: none; ValueName: "bbbb"; Flags: deletevalue noerror; Permissions: everyone-full; Check: x

[x] Root: HKCU; Subkey: "Software\aaaa"; ValueType: string; ValueName: "bbbb"; ValueData: "0"; Flags: noerror; Permissions: everyone-full; Check: not x

regWriteStringValue »
Я путаюсь в операторах if then else, вобщем в Паскале

R.i.m.s.k.y.
22-01-2017, 18:18
semiono, всё должно быть нормально
или в скрипте еще где-то это дело делается

semiono
22-01-2017, 20:16
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;
Не пойму что не так, почему else и if всегда проходит насквозь. Выглядит красиво, но не работает.

R.i.m.s.k.y.
22-01-2017, 20:27
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;»
/me с грохотом упал под стол
я ж привел тебе код функции




© OSzone.net 2001-2012