Войти

Показать полную графическую версию : Скрипты 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

ispolin
29-03-2016, 14:30
Подскажите пожалуйста что нужно дописать в скрипте, чтобы заполнились пустые поля?
на данный момент в скрипте есть строки
[Setup]
AppName=Soft Pack
AppVersion=2016
AppVerName=Soft Pack
VersionInfoVersion=2016
VersionInfoCompany=ispolin
VersionInfoCopyright=ispolin
AppCopyright=ispolin

http://s41.radikal.ru/i094/1603/88/7bdabcddd9e4.jpg

AlexanderSergeev
29-03-2016, 16:02
Подскажите пожалуйста что нужно дописать в скрипте, чтобы заполнились пустые поля? »
ispolin, вот попробуйте так должно работать:
#define MyAppName "Название продукта"
#define MyAppVersion "Версия продукта"

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppName}
DefaultDirName=D:\{#MyAppName}
DefaultGroupName={#MyAppName}

ZVSRus
29-03-2016, 16:22
Подскажите пожалуйста что нужно дописать в скрипте, чтобы заполнились пустые поля?

из Справки

VersionInfoProductVersion= Значение из 4 чисел, разделенных точками. Задает двоичное значение версии файла инсталлятора.
VersionInfoProductName= AppName, если AppName не содержит констант (иначе будет пустая строка). Определяет значение названия продукта


Пример

VersionInfoVersion=4.7.6.1
VersionInfoProductVersion=4.7.6.1
VersionInfoCompany=ObviousIdea
VersionInfoDescription=RePack (& Portable) by ZVSRus
VersionInfoProductName=Light Image Resizer
VersionInfoCopyright=Copyright © 2011-2015 ObviousIdea SARL

vovann01
30-03-2016, 12:28
Мне нужно, что бы установщик СНАЧАЛА сохранял в архив файлы, которые уже лежат на компе, а только потом производилась установка
Другими словами, перед установкой нужно сделать Backup файлов которые лежат на компе.
В справке как сделать Backup (Создать резервную копию оригинальных файлов) я насчитал около 10 примеров.
Где искать смотри на картинке. »

и

Буду благодарен хотя бы за ссылки на 5 примеров
Скрытый текст
Скрытый текст
Скрытый текст »

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

Прилагаю пример своего "генерального кода", указал только 1 файлик, ну а для примера больше и не надо)

; Script generated by the Inno Script Studio Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "Los"
#define MyAppExeName "Daemon.exe"
#define MyAppVersion "1.0"
#define los "C:\Users\v.pon\Desktop\ARXIV"
;#define Svc "..\los\Svc\"
;#define BackupDir "..\Backup";


[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
;(To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{4B52DA29-1987-41EB-A7E8-87572C794301}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
DefaultDirName={#MyAppName}
DefaultGroupName={#MyAppName}
UninstallFilesDir= "C:\Users\v.pon\Desktop\backup"
;DefaultDirName={pf}\My Program
;OutputDir=C:\Users\v.pon\Desktop\backup //куда будет запихиватся установщик

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Components]
;Name: "arch"; Description: "1.7z\2.7z";
Name: "Svc"; Description: " Установить Svc "; Flags: checkablealone exclusive
Name: "Coll"; Description: "Установить Los "; Flags: checkablealone exclusive

[Run]
;Source: "C:\Users\v.pon\Desktop\ARXIV\2.bat"; Flags:

[Files]

Source: "{#Los}\*.xml"; DestDir: "{app}\Los\"; Flags: onlyifdoesntexist ;Components: Coll


[Icons]
;Name: "{group}\My Program"; Filename: "{app}\Svc"; Components: Svc ;
;Name: "{group}\los"; Filename: "{app}\Installer"; Components: Coll;
;Name: "{group}\los"; Filename: "{app}\"; Components: Coll;

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
Filename: "msiexec"; Parameters: "/i {tmp}\mysql-connector-net-6.9.6.msi /qb /norestart REBOOT=ReallySuppress"; WorkingDir: "{tmp}"; Description: "MySql Connector"; StatusMsg: "MySql Connector"

[Dirs]
Name: "C:\Users\v.pon\Desktop\backup"

[code]
var
MyTask: TCheckBox;

function MoveFile(const srcFile, destFile: PChar): Integer; external 'MoveFileA@kernel32.dll stdcall';

procedure CurStepChanged(CurStep: TSetupStep);
var
FindFiles: TFindRec;
i: integer;
MyFiles: array of string;
MyDir, BackDir: string;
begin
if CurStep=ssInstall then begin
if MyTask.Checked then begin
MyFiles:=['*']; // указать файлы или маски нужные для бакупа через запятую. при указании маски '*' бакупятся все файлы с вложенными папками
MyDir:=ExpandConstant('C:\Users\v.pon\Desktop\los'); //папка откуда бакупить
BackDir:=ExpandConstant('C:\Users\v.pon\Desktop\Los\backup'); // папка куда бакупить
for i:=0 to GetArrayLength(MyFiles)-1 do
begin
if FindFirst(MyDir+MyFiles[i], FindFiles) then begin
repeat
if not DirExists(BackDir) then begin
CreateDir(BackDir);
end;
MoveFile(MyDir+FindFiles.Name, BackDir+FindFiles.Name);
until not FindNext(FindFiles);
FindClose(FindFiles);
end;
end;
end;
end;
end;

procedure InitializeWizard();
begin
MyTask:=TCheckBox.Create(WizardForm);
with MyTask do
begin
Parent:=WizardForm.SelectDirPage;
Caption:='Сделать Бэкап';
Left:=ScaleX(0);
Top:=ScaleY(100);
Width:=ScaleX(400);
Height:=ScaleY(15);
TabOrder:=0;
Checked:=True;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
FindFiles: TFindRec;
MyDir, BackDir: string;
begin
if CurUninstallStep = usPostUninstall then begin
MyDir:=ExpandConstant('{app}'+'C:\Users\v.pon\Desktop\backup222'); //папка куда возвращать файлы
BackDir:=ExpandConstant('{app}'+'C:\Users\v.pon\Desktop\backup'); // папка откуда брать файлы
if DirExists(BackDir) then begin
if MsgBox('Восстановить данные из бэкапа?', mbConfirmation, MB_YESNO) = IDYES then begin
if FindFirst(BackDir+'*', FindFiles) then begin
repeat
MoveFile(BackDir+FindFiles.Name, MyDir+FindFiles.Name);
until not FindNext(FindFiles);
FindClose(FindFiles);
RemoveDir(BackDir);
end;
end;
end;
end;
end;

ZVSRus
30-03-2016, 15:49
не один из скрипов не работает... не знаю почему так
Пример из Справки (Один из 3 примеров выложенным ранее, чуть-чуть подправил).
Работает нормально, и бекапит и возвращает сбекапенные файлы на место при удалении новых файлов.
Для примера взялась папка с картинками

В вашем примере в секции Setup в директиве DefaultDirName= нет пути куда устанавливать, есть только имя программы.
Директива должна выглядеть так DefaultDirName={pf}{#MyAppName} или пропиши вручную так C:\Users\v.pon\Desktop\los


[Setup]
AppName=MyProg
AppVerName=MyProg
DefaultDirName={pf}\MyProg
DefaultGroupName=MyProg
OutputDir=.

[Files]
Source: "D:\Files\*"; DestDir: "{app}"; Flags: ignoreversion

[Code]
var
MyTask: TCheckBox;

function MoveFile(const srcFile, destFile: PChar): Integer; external 'MoveFileA@kernel32.dll stdcall';

procedure CurStepChanged(CurStep: TSetupStep);
var
FindFiles: TFindRec;
i: integer;
MyFiles: array of string;
MyDir, BackDir: string;
begin
if CurStep=ssInstall then begin
if MyTask.Checked then begin
MyFiles:=['001.png','002.png','003.png','004.png']; // указать файлы или маски нужные для бакупа через запятую. при указании маски '*' бакупятся все файлы с вложенными папками

MyDir:=ExpandConstant('{pf}'+'\MyProg\'); //папка откуда бакупить
BackDir:=ExpandConstant('{pf}'+'\MyProg\Backup\'); // папка куда бакупить
for i:=0 to GetArrayLength(MyFiles)-1 do
begin
if FindFirst(MyDir+MyFiles[i], FindFiles) then begin
repeat
if not DirExists(BackDir) then begin
CreateDir(BackDir);
end;
MoveFile(MyDir+FindFiles.Name, BackDir+FindFiles.Name);
until not FindNext(FindFiles);
FindClose(FindFiles);
end;
end;
end;
end;
end;

procedure InitializeWizard();
begin
MyTask:=TCheckBox.Create(WizardForm);
with MyTask do
begin
Parent:=WizardForm.SelectDirPage;
Caption:='Сделать Бэкап';
Left:=ScaleX(0);
Top:=ScaleY(120);
Width:=ScaleX(400);
Height:=ScaleY(15);
TabOrder:=0;
Checked:=True;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
FindFiles: TFindRec;
MyDir, BackDir: string;
begin
if CurUninstallStep = usPostUninstall then begin
MyDir:=ExpandConstant('{pf}'+'\MyProg\'); //папка куда возвращать файлы
BackDir:=ExpandConstant('{pf}'+'\MyProg\Backup\'); // папка откуда брать файлы
if DirExists(BackDir) then begin
if MsgBox('Восстановить данные из бэкапа?', mbConfirmation, MB_YESNO) = IDYES then begin
if FindFirst(BackDir+'*', FindFiles) then begin
repeat
MoveFile(BackDir+FindFiles.Name, MyDir+FindFiles.Name);
until not FindNext(FindFiles);
FindClose(FindFiles);
RemoveDir(BackDir);
end;
end;
end;
end;
end;

vovann01
30-03-2016, 15:59
А, забыл сказать) Надо что бы это всё не просто бакупилось, а ещё и запихивалось в архив, да.
При том, что бы в имени архива была дата, и архивировалось это встроеным архиватором. (в идеале)

ZVSRus
30-03-2016, 16:25
А, забыл сказать) Надо что бы это всё не просто бакупилось, а ещё и запихивалось в архив, да.
При том, что бы в имени архива была дата, и архивировалось это встроеным архиватором. (в идеале)


Если Вы хотите сказать что в Inno Setup есть встроенный архиватор, тогда скажите где он находится и как на него посмотреть.

vovann01
30-03-2016, 16:31
Если бы я хорошо знал Inno Setup, яб не сидел тут. Тогда предогаю юзать 7za, я даже скрипт написал на архивацию, не знаю, как сильно он поможет, и можно ли его воткнуть в установщик, но:

Содержание моего батника:

"C:\Users\v.pon\Desktop\ARXIV\7za.exe" a %date%.rar c:\Los\

Dodakaedr
30-03-2016, 16:32
vovann01, Я вам уже давал пример, юзайте его!

vovann01
30-03-2016, 16:35
юзайте его! »

да не работает он нормально. Я не знаю почему. Мож я тупой, или хз

Вот ваш код, но как его адаптировать под себя то ?

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=.

[Components]
Name: "arch"; Description: "1.7z\2.7z";

[Files]
Source: "7za.exe"; Flags: dontcopy deleteafterinstall
Source: "1.7z"; DestDir: "{app}\Icons"; AfterInstall: "Extract()"; Components: arch;
Source: "2.7z"; DestDir: "{app}"; AfterInstall: "Extract()"; Components: arch;

[Code]
procedure Extract();
var
rs: integer;
strFile: String;
begin
strFile := ExpandConstant(CurrentFileName);
if not FileExists(ExpandConstant('{tmp}\7za.exe')) then ExtractTemporaryFile('7za.exe');
Exec(ExpandConstant('{tmp}\7za.exe'), ' x '+'"'+strFile+'" -y -o'+'"'+ExtractFilePath(strFile)+'"', '', SW_Hide, ewWaitUntilTerminated, rs);
DeleteFile(strFile);
end;

буду очень рад если мне помогут

[Setup]
AppName=MyProg
AppVerName=MyProg
DefaultDirName={pf}\MyProg
DefaultGroupName=MyProg
OutputDir=.

[Files]
Source: "D:\Files\*"; DestDir: "{app}"; Flags: ignoreversion

[code]
var
MyTask: TCheckBox;

function MoveFile(const srcFile, destFile: PChar): Integer; external 'MoveFileA@kernel32.dll stdcall';

procedure CurStepChanged(CurStep: TSetupStep);
var
FindFiles: TFindRec;
i: integer;
MyFiles: array of string;
MyDir, BackDir: string;
begin
if CurStep=ssInstall then begin
if MyTask.Checked then begin
MyFiles:=['001.png','002.png','003.png','004.png']; // указать файлы или маски нужные для бакупа через запятую. при указании маски '*' бакупятся все файлы с вложенными папками

MyDir:=ExpandConstant('{pf}'+'\MyProg\'); //папка откуда бакупить
BackDir:=ExpandConstant('{pf}'+'\MyProg\Backup\'); // папка куда бакупить
for i:=0 to GetArrayLength(MyFiles)-1 do
begin
if FindFirst(MyDir+MyFiles[i], FindFiles) then begin
repeat
if not DirExists(BackDir) then begin
CreateDir(BackDir);
end;
MoveFile(MyDir+FindFiles.Name, BackDir+FindFiles.Name);
until not FindNext(FindFiles);
FindClose(FindFiles);
end;
end;
end;
end;
end;

procedure InitializeWizard();
begin
MyTask:=TCheckBox.Create(WizardForm);
with MyTask do
begin
Parent:=WizardForm.SelectDirPage;
Caption:='Сделать Бэкап';
Left:=ScaleX(0);
Top:=ScaleY(120);
Width:=ScaleX(400);
Height:=ScaleY(15);
TabOrder:=0;
Checked:=True;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
FindFiles: TFindRec;
MyDir, BackDir: string;
begin
if CurUninstallStep = usPostUninstall then begin
MyDir:=ExpandConstant('{pf}'+'\MyProg\'); //папка куда возвращать файлы
BackDir:=ExpandConstant('{pf}'+'\MyProg\Backup\'); // папка откуда брать файлы
if DirExists(BackDir) then begin
if MsgBox('Восстановить данные из бэкапа?', mbConfirmation, MB_YESNO) = IDYES then begin
if FindFirst(BackDir+'*', FindFiles) then begin
repeat
MoveFile(BackDir+FindFiles.Name, MyDir+FindFiles.Name);
until not FindNext(FindFiles);
FindClose(FindFiles);
RemoveDir(BackDir);
end;
end;
end;
end;
end;

ZVSRus
30-03-2016, 18:21
vovann01, Я вам уже давал пример, юзайте его!
Несколькими страницами ранее видел ваш пример, но тогда глубоко в смысл не задавался.
Сейчас просто стало интересно на счет данного примера. Скачал с приложенными файлами, попробовал.
И как я понимаю данный пример на распаковку 7z архива. В Справке есть еще несколько примеров на счет 7z, все они также на распаковку. В своё время прошёлся по всем страницам данного форума начиная с 1 части, но что-то не припоминаю примера на запаковку в архив (rar, zip, 7z) каких либо файлов перед установкой (например обновление). В вашем примере, как я понимаю 7za.exe запустится после всех установленных файлов, что будут указаны в секции [Files], или я ошибаюсь.
Если я прав тогда, сделать Бэкап и ещё его за архивировать это пустая трата времени.
Рассудите прав ли я.

ZVSRus
30-03-2016, 18:39
Содержание моего батника:

"C:\Users\v.pon\Desktop\ARXIV\7za.exe" a %date%.rar c:\Los\ - Вы куда это хотите воткнуть.

Dodakaedr
31-03-2016, 09:45
но что-то не припоминаю примера на запаковку в архив »
Мне нужно, сделать бекап до установки, запихнув несколько папок в архив. »
Вызывайте Backup сколько нужно.


[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=.

[Files]
Source: "7za.exe"; DestDir: "{app}\7z"; Flags: onlyifdoesntexist uninsneveruninstall
Source: "compiler:Languages\*"; DestDir: "{app}\Lang2";
Source: "compiler:Help\*"; DestDir: "{app}\Help2";

[Code]
procedure Restore(strFile, DestDir: String);
var
rs: integer;
begin
if Fileexists(ExpandConstant('{app}\7z\7za.exe')) then
begin
Exec(ExpandConstant('{app}\7z\7za.exe'), ' x '+'"'+strFile+'"'+' -y -o'+'"'+DestDir+'"', '', SW_Hide, ewWaitUntilTerminated, rs);
DeleteFile(strFile);
end;
end;

procedure Backup(bkfile, fromDir: String);
var
i: integer;
begin
if not FileExists(ExpandConstant('{tmp}\7za.exe')) then ExtractTemporaryFile('7za.exe');
Exec(ExpandConstant('{tmp}\7za.exe'), ' a ' +'"' +bkfile +'.7z' +'"' +' -r ' +'"' +fromDir +'"', '', SW_Hide, ewWaitUntilTerminated, i);
DeleteFile(ExpandConstant('{tmp}\7za.exe'));
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
if DirExists(ExpandConstant('{app}')) then
begin
WizardForm.StatusLabel.Caption := 'Архивация данных, пожалуйста, подождите...';
Backup(ExpandConstant('{app}\Backup\Bak'), ExpandConstant('{app}\Help2'));
Backup(ExpandConstant('{app}\Backup\Bak'), ExpandConstant('{app}\Lang2'));
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usDone then
if FileExists(ExpandConstant('{app}\Backup\Bak.7z')) then
begin
Restore(ExpandConstant('{app}\Backup\Bak.7z'), ExpandConstant('{app}'));
RemoveDir(ExpandConstant('{app}\Backup'));
DelTree(ExpandConstant('{app}\7z'), true, true, true);
end;
end;

vovann01
31-03-2016, 09:46
Вы правы и не правы одновременно. Дело в том, что я слегка дилетант, и многих "очевидных " вещей не знаю.

Мне нужно, сделать бекап до установки, запихнув несколько папок в архив.

ZVSRus
31-03-2016, 10:21
Dodakaedr, Пример реальный, значит я был не прав. Где-то, что-то пропустил. Ранее глубоко не вдавался в данные действия.

ZVSRus
03-04-2016, 16:05
Как объединить несколько процедур CurStepChanged(CurStep: TSetupStep); в одну, если в процедуре имеется
if CurStep = ssInstall then


case CurStep of ssPostInstall: PinToTaskbar( ExpandConstant( '{app}\MyProg.exe' ), True );


if CurStep = ssDone then

nik1967
03-04-2016, 16:26
ZVSRus,


procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssPreInstall: begin
//твои действия
end;
ssInstall: begin
//твои действия
end;
ssPostInstall: begin
//твои действия
end;
ssDone: begin
//твои действия
end;
end;
end;

ZVSRus
03-04-2016, 16:48
элементарно
Ответили оперативно. Не успел написать что уже разобрался. Просто я пихал сначала ssDone
потом ssInstall, а надо по порядку TSetupStep = (ssPreInstall, ssInstall, ssPostInstall, ssDone);.
Все равно спасибо!

ZVSRus
05-04-2016, 11:33
Как к скрипту ''Закрепить ярлык на панели задач'' прикрутить чекбокс находящийся на костомной странице.
То-есть чтобы ярлык закреплялся только при выборе чекбокса на вновь созданной странице.

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppExeName "MyProg.exe"

[Setup]
AppId={{C50EFAA0-C80A-431E-8698-784F527C6AC4}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Languages\English.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Tasks]
// Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "Дополнительные значки"; Flags: unchecked
// Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked;
// Name: "pin"; Description: "Закрепить ярлык на панели задач"; GroupDescription: "Дополнительные значки"; Flags: unchecked

[Files]
Source: "C:\Program Files (x86)\Inno Setup v.5.5.1\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}";
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\{#MyAppName}"; Filename: "{app}\MyProg.exe"; Check: PinIconCheck;

[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D003010F204000054504630F10B5457697A617264466F726D0A57697A61726 4466F726D0C436C69656E744865696768740368010B436C69656E74576964746803F1010C4578706C696369744C656674020 00B4578706C69636974546F7002000D4578706C6963697457696474680301020E4578706C69636974486569676874038E010 D506978656C73506572496E636802600A54657874486569676874020D00F10C544E65774E6F7465626F6F6B0D4F757465724 E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B57656C636F6D6550616765084E65787450616765070D4 36F6D706F6E656E74506167650D4578706C69636974576964746803F1010E4578706C696369744865696768740339010000F 110544E65774E6F7465626F6F6B5061676509496E6E6572506167650D4578706C69636974576964746803F1010E4578706C6 963697448656967687403390100F10C544E65774E6F7465626F6F6B0D496E6E65724E6F7465626F6F6B00F110544E65774E6 F7465626F6F6B506167650B4C6963656E7365506167650C50726576696F757350616765070D436F6D706F6E656E745061676 50D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED000000F110544E65774E6F7465626F6 F6B506167650D53656C656374446972506167650D4578706C69636974576964746803A1010E4578706C69636974486569676 87403ED000000F110544E65774E6F7465626F6F6B506167651653656C65637450726F6772616D47726F7570506167650D457 8706C69636974576964746803A1010E4578706C6963697448656967687403ED000000F110544E65774E6F7465626F6F6B506 167650F53656C6563745461736B7350616765084E65787450616765070C44697247726F7570506167650D4578706C6963697 4576964746803A1010E4578706C6963697448656967687403ED000000F110544E65774E6F7465626F6F6B506167650952656 16479506167650C50726576696F757350616765070C44697247726F7570506167650D4578706C69636974576964746803A10 10E4578706C6963697448656967687403ED00000010544E65774E6F7465626F6F6B506167650D436F6D706F6E656E7450616 7650743617074696F6E1426000000D092D18BD0B1D0BED18020D182D0B8D0BFD0B020D183D181D182D0B0D0BDD0BED0B2D0B AD0B80B4465736372697074696F6E06032E2E2E0C50726576696F757350616765070B57656C636F6D6550616765084E65787 450616765070B4C6963656E736550616765000C544E6577436865636B426F780350696E044C656674020003546F70025A055 76964746803C3000648656967687402110743617074696F6E143A000000D097D0B0D0BAD180D0B5D0BFD0B8D182D18C20D18 FD180D0BBD18BD0BA20D0BDD0B020D0BFD0B0D0BDD0B5D0BBD0B820D0B7D0B0D0BBD0B0D187085461624F726465720200000 00010544E65774E6F7465626F6F6B506167650C44697247726F7570506167650743617074696F6E144B000000D092D18BD0B 1D0BED18020D0BFD0B0D0BFD0BAD0B820D183D181D182D0B0D0BDD0BED0B2D0BAD0B820D0B820D0BFD0B0D0BFD0BAD0B820D 0B220D0BCD0B5D0BDD18E20D09FD183D181D0BA0B4465736372697074696F6E06032E2E2E0C50726576696F7573506167650 70F53656C6563745461736B7350616765084E657874506167650709526561647950616765000000000000

[Code]
var
ComponentPage: TWizardPage;
PinIcon: TNewCheckBox;

function PinIconCheck: Boolean;
begin
Result:=PinIcon.Checked;
end;

const
LOAD_LIBRARY_AS_DATAFILE = $2;

#define A = (Defined UNICODE) ? "W" : "A"

function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';
function PinToTaskbar(const szFilename: String; IsPin: Boolean): Boolean;

var
hInst: THandle;
buf: array [0..255] of Char;
i, res: Integer;
strLnk, strVerb: String;
objShell, colVerbs: Variant;

begin
Result := False;
if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit; { below Windows 7 }

{ String resources }
if IsPin then
begin
if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
begin
while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
end;
res := 5386; { Pin to Tas&kbar } { Закрепить на Taskbar }
end else
res := 5387; { Unpin from Tas&kbar } { Открепить от Taskbar }

{ Load string resource }
hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
if hInst <> 0 then
try
for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
try
objShell := CreateOleObject('Shell.Application');
colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
begin
colVerbs.Item[i].DoIt;
Result := True;
Break;
end;
except
Exit;
end;
finally
FreeDLL(hInst);
end;
end;

procedure CurPageChanged(CurPageID: integer);
begin
case CurPageID of
wpFinished: begin
if IsTaskSelected('Pin') then PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), True);
end;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
instPath: string;
begin
case CurUninstallStep of
usUninstall: begin
PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), False);
end;
end;
end;


procedure InitializeWizard();
begin
ComponentPage := CreateCustomPage(wpWelcome, 'Выбор типа установки', '...');
WizardForm.SelectTasksLabel.Hide;

{ Pin }
PinIcon := TNewCheckBox.Create(WizardForm);
with PinIcon do
begin
Parent := ComponentPage.Surface;
Left := ScaleX(0);
Top := ScaleY(90);
Width := ScaleX(195);
Height := ScaleY(17);
Caption := 'Закрепить ярлык на панели задач';
end;
end;

Dodakaedr
05-04-2016, 12:49
Как к скрипту ''Закрепить ярлык на панели задач'' прикрутить чекбокс находящийся на костомной странице. »
Вот так #define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppExeName "MyProg.exe"

[Setup]
AppId={{C50EFAA0-C80A-431E-8698-784F527C6AC4}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Languages\English.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: "compiler:\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}";
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\{#MyAppName}"; Filename: "{app}\MyProg.exe"; Check: PinIconCheck;

[code]
var
ComponentPage: TWizardPage;
PinIcon: TNewCheckBox;

function PinIconCheck: Boolean;
begin
Result:=PinIcon.Checked;
end;

const
LOAD_LIBRARY_AS_DATAFILE = $2;

#define A = (Defined UNICODE) ? "W" : "A"

function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';
function PinToTaskbar(const szFilename: String; IsPin: Boolean): Boolean;

var
hInst: THandle;
buf: array [0..255] of Char;
i, res: Integer;
strLnk, strVerb: String;
objShell, colVerbs: Variant;

begin
Result := False;
if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit; { below Windows 7 }

{ String resources }
if IsPin then
begin
if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
begin
while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
end;
res := 5386; { Pin to Tas&kbar } { Закрепить на Taskbar }
end else
res := 5387; { Unpin from Tas&kbar } { Открепить от Taskbar }

{ Load string resource }
hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
if hInst <> 0 then
try
for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
try
objShell := CreateOleObject('Shell.Application');
colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
begin
colVerbs.Item[i].DoIt;
Result := True;
Break;
end;
except
Exit;
end;
finally
FreeDLL(hInst);
end;
end;

procedure CurPageChanged(CurPageID: integer);
begin
case CurPageID of
wpFinished: begin
if PinIconCheck then PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), True);
end;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
instPath: string;
begin
case CurUninstallStep of
usUninstall: begin
PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), False);
end;
end;
end;


procedure InitializeWizard();
begin
ComponentPage := CreateCustomPage(wpWelcome, 'Выбор типа установки', '...');
WizardForm.SelectTasksLabel.Hide;

{ Pin }
PinIcon := TNewCheckBox.Create(WizardForm);
with PinIcon do
begin
Parent := ComponentPage.Surface;
Left := ScaleX(0);
Top := ScaleY(90);
Width := ScaleX(195);
Height := ScaleY(17);
Caption := 'Закрепить ярлык на панели задач';
end;
end;




© OSzone.net 2001-2012