PDA

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


Страниц : 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

saurn
21-02-2014, 11:07
Не совсем, я впервые пробую inno setup и поэтому много чего не ясно... »
Тогда справку читать просто необходимо. Вам и самому будет проще - каждый раз не задаватся вопросом, а зачем этот параметр, а что делает этот. Изучите азы, а потом можно переходить уже к более сложному. Пока посмотрите, как реализован запуск vbs сценария из секции Run, например, в этом примере из шапки (http://forum.oszone.net/post-1444931-2009.html)

Dodakaedr
21-02-2014, 11:09
nik1967, все равно выскакивают ошибки в разных секциях. Вот код, в чем ошибка? [Run]
Filename: "{tmp}\11.vbs"; Parameters: "{app}\{#MyAppExeName}"; WorkingDir: "{tmp}"; Flags: nowait postinstall shellexec;

saurn
21-02-2014, 11:28
Dodakaedr,
[Run]
Filename: {tmp}\11.vbs; Parameters: """{app}\{#MyAppExeName}"""; Description: Закрепить ярлык на панели задач; Flags: nowait postinstall shellexec;

Dodakaedr
21-02-2014, 11:54
saurn, спс)

А почему так не работает? Решил перенести в Tasks к другим ярлыкам.
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1
Name: quicklaunchicon7; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; MinVersion: 0,6.1

[Files]
Source: "D:\1123\Kallisto.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\1123\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "D:\script.vbs"; DestDir: {tmp}; Flags: deleteafterinstall
; Примечание: Не используйте "Flags: ignoreversion" для системных файлов

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
Filename: "{tmp}\script.vbs"; Parameters: """{app}\{#MyAppExeName}"""; Flags: shellexec; Tasks: quicklaunchicon7

Брал с примера что вы дали.

Dodakaedr
21-02-2014, 12:23
Что именно не работает? Ярлык не создается? »
Да

saurn
21-02-2014, 12:33
Да »
А так?
[Run]
Filename: {tmp}\script.vbs; Parameters: """{app}\{#MyAppExeName}"""; Flags: shellexec; Tasks: quicklaunchicon7;
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}; Flags: nowait postinstall skipifsilent;

Поясню, где вы допустили ошибку: сценарий выполняется сверху вниз, и никак иначе. Тоесть все параметры, указаные в какой бы то нибыло секции будут выполнены в том порядке, в каком вы их задали. И так, инсталятор дошел до секции Run, где первая задача имеет флаг postinstall, тоесть должна быть выполнена после завершения установки, и ему совершенно не важно, что следующая задача, такового флага не имеет, тоесть должна быть выполнена на этапе ssPostInstall после завершения копирования файлов, создания ярлыков, папок и т.д., но до перехода на шаг ssDone. Установка завершена, инсталятор переходит на шаг ssDone и выполняет задачу с флагом postinstall, как вы ему и указали. А вот следующую в списке задачу, в вашем случае создание ярлыка, инсталятор уже не выполнит, так как она не имеет флага postinstall, и следовательно должна быть выполнена на шаге ssPostInstall, а инсталятор в этот момент уже находится на шаге ssDone. Поэтому задачи с флагами postinstall должны быть объявлены после задач, которые должны быть выполнены в процессе установки.

Dodakaedr
21-02-2014, 22:13
saurn, а почему в секции tasks не создается больше двух параметров?

saurn
21-02-2014, 22:20
а почему в секции tasks не создается больше двух параметров? »
Потому что для одной из задач, именно для задачи "Создать ярлык в панели быстрого запуска" у вас установлено условие OnlyBelowVersion: 0,6.1, тоесть только для версий винды ниже 6.1, тоесть ниже семерки. Да при установке на семерку создавать эту задачу и нет смысла, так как панели быстрого запуска из прошлых редакций в ней нет.

Dodakaedr
21-02-2014, 22:35
saurn, Почему оно на расстоянии?
http://savepic.org/5082124.jpg
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "ico"; Description: "Закрепить ярлык на Панели Задач"; Flags: unchecked;

habib2302
21-02-2014, 22:46
Dodakaedr,
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "ico"; Description: "Закрепить ярлык на Панели Задач"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked;
ты забыл добавить GroupDescription: "{cm:AdditionalIcons}"; во второй task

Dodakaedr
21-02-2014, 22:53
habib2302, спс

habib2302
21-02-2014, 22:57
Dodakaedr, Помог? От Полезное сообщение не откажусь!!!

Dodakaedr
21-02-2014, 22:59
habib2302, без проблем))

habib2302
21-02-2014, 23:32
народ, ответьте кто-нибудь пожалуйста на мое сообщение http://forum.oszone.net/post-2312607-2314.html

Dodakaedr
22-02-2014, 00:28
Как обозначаются чекбоксы?

http://savepic.org/5060610.jpg

И правильно ли я обозначил другие пункты?

Debugger
22-02-2014, 02:18
Пытаюсь сделать так:
DefaultDirName={reg:HKLM\SOFTWARE\Adobe\Photoshop\55.0,PluginPath|C:\123}
Инсталлятор прочесть из реестра не может, кажет альтернативный путь установки. Но при этом рядом есть ключ HKLM\Software\AGEIA Technologies,PhysXCore Path с ним все работает без проблем! Что за избирательность?...

Nordek
22-02-2014, 02:44
habib2302,
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

[CustomMessages]
Caption=Действия
Description=Выберите действия которые вы хотите сделать.
NewButton1=Проверить версию для Internet Explorer
NewButton2=Проверить версию для Firefox, Safari, Opera
NewButton3=Запустить деинсталлятор Adobe Flash Player


[Code]
var
ISCustomPage1: TWizardPage;
NewButton1, NewButton2, NewButton3: TNewButton;
ResultCode: Integer;

procedure NewButton1Click(Sender: TObject);
begin
shellexec('open', ExpandConstant('{sys}\calc.exe'), '', '',SW_SHOWNORMAL, ewnowait, ResultCode)
end;

procedure NewButton2Click(Sender: TObject);
begin
shellexec('open', ExpandConstant('{sys}\notepad.exe'), '', '',SW_SHOWNORMAL, ewnowait, ResultCode)
end;

procedure NewButton3Click(Sender: TObject);
begin
shellexec('open', ExpandConstant('{sys}\cmd.exe'), '', '',SW_SHOWNORMAL, ewnowait, ResultCode)
end;



procedure InitializeWizard();
begin
ISCustomPage1 := CreateCustomPage(wpWelcome, CustomMessage('Caption'), CustomMessage('Description'));

NewButton1 := TNewButton.Create(WizardForm);
with NewButton1 do
begin
Parent := ISCustomPage1.Surface;
Left := ScaleX(24);
Top := ScaleY(32);
Width := ScaleX(371);
Height := ScaleY(33);
Caption := CustomMessage('NewButton1');
OnClick := @NewButton1Click;
end;

NewButton2 := TNewButton.Create(WizardForm);
with NewButton2 do
begin
Parent := ISCustomPage1.Surface;
Left := ScaleX(24);
Top := ScaleY(88);
Width := ScaleX(371);
Height := ScaleY(33);
Caption := CustomMessage('NewButton2');
OnClick := @NewButton2Click;
end;

NewButton3 := TNewButton.Create(WizardForm);
with NewButton3 do
begin
Parent := ISCustomPage1.Surface;
Left := ScaleX(24);
Top := ScaleY(136);
Width := ScaleX(371);
Height := ScaleY(33);
Caption := CustomMessage('NewButton3');
OnClick := @NewButton3Click;
end;
end;


Dodakaedr, То что "Перезаписать значение если параметр уже существует" - это значит что если в реестре есть параметр "Kallisto", то при установке, в параметре "Kallisto" перезапишется значение "SOFTWARE\Clients\Media\Kallisto\Capabilites".
Например в "SOFTWARE\RegisteredApplications" ранее уже имеется параметр "Kallisto", а в параметре "Kallisto" значение "SOFTWARE\Clients\Media\KallistoXXX\Capabilites".
У тебя в инсталляторе, значение "SOFTWARE\Clients\Media\Kallisto\Capabilites", то при "Перезаписать значение если параметр уже существует" - заменится значение "SOFTWARE\Clients\Media\KallistoXXX\Capabilites" на "SOFTWARE\Clients\Media\Kallisto\Capabilites"

"Деинсталлировать" - это значит что при удалении программы, удалится и ключ в реестре. Далее зависит от флагов.

Инсталлятор прочесть из реестра не может »
В реестре так:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Photoshop\55.0]
"PluginPath"="C:\\Program Files\\Adobe\\Photoshop"???

Dodakaedr
22-02-2014, 09:04
Nordek, То что они означают я знаю, вопрос в том как их прописать в inno setup?

habib2302
22-02-2014, 10:00
как сделать чтобы версия определялась через реестр и появлялся диалог с версией т.е как у D!akov'а
http://i.imgur.com/9neDH46.jpg (http://i.imgur.com/FTCHz2z.png) http://i.imgur.com/07BwNCf.jpg (http://i.imgur.com/w72TPFF.png)
и как перед установкой распаковать файлы во временную папку {tmp}

Debugger
22-02-2014, 10:21
Nordek, именно так, и есть еще одноименный раздел:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Photoshop\55.0]
"PluginPath"="C:\\Program Files\\Adobe\\Adobe Photoshop CS5.1 (64 Bit)\\Plug-Ins"

[HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Photoshop\55.0\PluginPath]
@="C:\\Program Files\\Adobe\\Adobe Photoshop CS5.1 (64 Bit)\\Plug-Ins\\"

Я думал, может инсталлятор сбивает с толку то, что есть и раздел, и ключ с одним и тем же именем, но и после удаления раздела ничего не меняется.

Добавлю, что пока я не добавил в скрипт такие строки -
UsePreviousAppDir=False
EnableDirDoesntExistWarning=True
DirExistsWarning=yes
AppendDefaultDirName=False

у меня вообще ничего не работало, даже ключ от AGEIA.

И еще вопрос - когда гуглил вопрос, многие делают то же самое, но через код на Паскале. Есть какие-то различия, или каждый делает как ему удобнее?




© OSzone.net 2001-2012