PDA

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

TryRooM
25-11-2015, 15:41
Bartron, http://rghost.ru/6tRGNZ995
Тогда так. Стандартная установка, ошибки нет.

Bartron
25-11-2015, 16:01
TryRooM, не помогает. Что странно, если прикрутить распаковку через Isdone, то окно работает нормально, ошибки нет, но если распаковка стандартная (что мне и нужно), то появляется ошибка; и если ботву убрать, окно тоже работает нормально, ничего понять не могу...

TryRooM
25-11-2015, 16:13
Bartron, При стандартной установке, скрипт работает. А понять, что у вас не клеится, я не телепат.

habib2302
25-11-2015, 16:27
Помогите решить проблему
http://savepic.ru/8079108.png (http://savepic.ru/8078084.png)
Filename: regedit; Parameters: "/s ""{src}\WinRAR\Settings.reg"""; Check: "FileExists (ExpandConstant('{src}\WinRAR\Settings.reg'))"; Components: WRAR\I;

TryRooM
25-11-2015, 16:59
habib2302,
Исходя из вашего кода, файл Settings.reg должен находиться, в папке WinRAR, тогда, ошибки не будет.

ZVSRus
25-11-2015, 17:07
Dodakaedr, Как это все реализовать

habib2302
25-11-2015, 17:11
TryRooM, он там и лежит. Тем более вы сами подумайте зачем я делаю еще проверку на файл??

TryRooM
25-11-2015, 17:23
habib2302, Вот ваш пример. Скомпилируйте и посмотрите.

Dodakaedr
25-11-2015, 20:07
Как это все реализовать »
ручками) Все ответы есть в основном в предыдущей части темы и в справке.

habib2302
26-11-2015, 17:49
Как это все реализовать »
меня больше всего интересует оформление
ZVSRus,
вот код для закрепления


[Tasks]
Name: ic; Description: {cm:AdditionalIcons}; Components: AIDA64\I;
Name: ic\taskbar; Description: Закрепить в панели управления; MinVersion: 0.0,6.1.7600; Flags: unchecked
Name: ic\startmenu; Description: Закрепить в пуске; MinVersion: 0.0,6.1.7600; Flags: unchecked

[code]
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;
// szFilename : full path to executable file
// IsPin......: False - unpin from TaskBar, True - pin to TaskBar
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 }
end else res := 5387; { Unpin from Tas&kbar }

{ 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;

function PinToStartMenu(const szFilename: String; IsPin: Boolean): Boolean;
// szFilename : full path to exe- or lnk-file
// IsPin......: False - unpin from StartMenu, True - pin to StartMenu
var
hInst: THandle;
buf: array [0..259] of Char;
i, res: Integer;
strLnk, strVerb: String;
objShell, colVerbs: Variant;
begin
Result := False;
if not FileExists(szFilename) then Exit;
if GetWindowsVersion > $06020000 then Exit; { Window 8 and above }

{ Windows 7 }
if (GetWindowsVersion >= $06010000) and boolean(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\StartMenu\') + ExtractFileName(strLnk)) then Exit;
end;

{ String resources }
if IsPin then
res := 5381 { Pin to Start Men&u }
else
res := 5382; { Unpin from Start Men&u }

{ 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');

{ below Windows 7 }
if GetWindowsVersion < $06010000 then
begin
objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).InvokeVerb(str Verb);
Result := True;
end;

{ Windows 7 }
if GetWindowsVersion >= $06010000 then
begin
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;
end;
except
Exit;
end;
finally
FreeDLL(hInst);
end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
Case CurPageID of
wpFinished:
begin
if IsTaskSelected('icons\taskbaricon') then
PinToTaskbar(ExpandConstant('{app}\app.exe'), True);
if IsTaskSelected('icons\startmenuicon') then
PinToStartMenu(ExpandConstant('{app}\app.exe'), True);
end;
end;
end;

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

ZVSRus
26-11-2015, 19:08
меня больше всего интересует оформление
Вы имеете ввиду скрипт?.

habib2302
26-11-2015, 19:46
ZVSRus, ага

ZVSRus
26-11-2015, 20:04
ага
Скрипта как токового еще нет.
Есть наброски, т.е. на вновь созданной странице прикрутить 2 чекбокса.
И сразу 2 вопрос, где-то в справке находил как закрепить в меню пуск. {userstartmenu} & {commonstartmenu} Путь к "корню" меню Пуск.
А закрепить на панели задач никак. 2 вопрос заключается в том, можно-ли закрепить ярлык на панели задач через секцию [Icons], чтобы реально закреплялся.
Сам скрипт.
[Setup]
AppName=ACDSee 5.0 Power Pack
AppVersion=ACDSee 5.0 Power Pack
DefaultDirName={pf}\ACD Systems
DefaultGroupName=ACD Systems
OutputDir=.
UsePreviousAppDir=no
UsePreviousGroup=no
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

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

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

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

[Run]
//Filename: "{app}\{AppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent

[Code ]
var
ComponentPage: TWizardPage;

InstallerImage: TBitmapImage;
PortableImage: TBitmapImage;
FlagImage: TBitmapImage;

InstallerGroupBox: TNewGroupBox;
InstallerRadioButton: TNewRadioButton;
PortableRadioButton: TNewRadioButton;

IconsGroupBox: TNewGroupBox;
DesktopIconCheck: TNewCheckBox;
PuskIconCheck: TNewCheckBox;
PanelZadachCheck: TNewCheckBox;
PanelPuskCheck: TNewCheckBox;

LangGroupBox: TNewGroupBox;
LangRUS: TNewRadioButton;
LangENG: TNewRadioButton;


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

InstallerImage := TBitmapImage.Create(WizardForm);
with InstallerImage do
begin
Parent := ComponentPage.Surface;
Left := ScaleX(227);
Top := ScaleY(5);
Width := ScaleX(190);
Height := ScaleY(160);
end;

PortableImage := TBitmapImage.Create(WizardForm);
with PortableImage do
begin
Parent := ComponentPage.Surface;
Left := ScaleX(227);
Top := ScaleY(5);
Width := ScaleX(190);
Height := ScaleY(160);
end;

FlagImage := TBitmapImage.Create(WizardForm);
with FlagImage do
begin
Parent := ComponentPage.Surface;
Left := ScaleX(252);
Top := ScaleY(167);
Width := ScaleX(110);
Height := ScaleY(70);
end;

InstallerGroupBox := TNewGroupBox.Create(WizardForm);
with InstallerGroupBox do
begin
Parent := ComponentPage.Surface;
Left := ScaleX(0);
Top := ScaleY(0);
Width := ScaleX(205);
Height := ScaleY(64);
Caption := 'Тип установки:';
end;

InstallerRadioButton := TNewRadioButton.Create(WizardForm);
with InstallerRadioButton do
begin
Parent := InstallerGroupBox;
Left := ScaleX(10);
Top := ScaleY(14);
Width := ScaleX(190);
Height := ScaleY(17);
Caption := 'Установка обычной версии';
Checked := True;
TabStop := True;
OnClick := @InstallerRadioButtonClick;
end;

PortableRadioButton := TNewRadioButton.Create(WizardForm);
with PortableRadioButton do
begin
Parent := InstallerGroupBox;
Left := ScaleX(10);
Top := ScaleY(39);
Width := ScaleX(190);
Height := ScaleY(17);
Caption := 'Распаковка портативной версии';
OnClick := @PortableRadioButtonClick;
end;

IconsGroupBox := TNewGroupBox.Create(WizardForm);
with IconsGroupBox do
begin
Parent := ComponentPage.Surface;
Left := ScaleX(0);
Top := ScaleY(74);
Width := ScaleX(205);
Height := ScaleY(114);
Caption := 'Дополнительно:';
end;

DesktopIconCheck := TNewCheckBox.Create(WizardForm);
with DesktopIconCheck do
begin
Parent := IconsGroupBox;
Left := ScaleX(10);
Top := ScaleY(14);
Width := ScaleX(190);
Height := ScaleY(17);
Caption := 'Ярлык(и) на рабочем столе';
OnClick := @DesktopIconCheckClick;
Checked := True;
end;

PuskIconCheck := TNewCheckBox.Create(WizardForm);
with PuskIconCheck do
begin
Parent := IconsGroupBox;
Left := ScaleX(10);
Top := ScaleY(39);
Width := ScaleX(190);
Height := ScaleY(17);
Caption := 'Ярлык(и) в меню пуск';
OnClick := @PuskIconCheckClick;
Checked := True;
end;

PanelZadachCheck := TNewCheckBox.Create(WizardForm);
with PanelZadachCheck do
begin
Parent := IconsGroupBox;
Left := ScaleX(10);
Top := ScaleY(64);
Width := ScaleX(190);
Height := ScaleY(17);
Caption := 'Закрепить ярлык в панели задач';
OnClick := @PanelZadachCheckClick;
end;

PanelPuskCheck := TNewCheckBox.Create(WizardForm);
with PanelPuskCheck do
begin
Parent := IconsGroupBox;
Left := ScaleX(10);
Top := ScaleY(89);
Width := ScaleX(190);
Height := ScaleY(17);
Caption := 'Закрепить ярлык в меню пуск';
OnClick := @PanelPuskCheckClick;
end;

LangGroupBox := TNewGroupBox.Create(WizardForm);
with LangGroupBox do
begin
Parent := ComponentPage.Surface;
Left := ScaleX(0);
Top := ScaleY(197);
Width := ScaleX(205);
Height := ScaleY(39);
Caption := 'Язык интерфейса:';
end;

LangRUS := TNewRadioButton.Create(WizardForm);
with LangRUS do
begin
Parent := LangGroupBox;
Left := ScaleX(40);
Top := ScaleY(14);
Width := ScaleX(40);
Height := ScaleY(17);
Caption := 'RUS';
Checked := True;
end;

LangENG := TNewRadioButton.Create(WizardForm);
with LangENG do
begin
Parent := LangGroupBox;
Left := ScaleX(130);
Top := ScaleY(14);
Width := ScaleX(40);
Height := ScaleY(17);
Caption := 'ENG';
end;
end;
end;

habib2302
27-11-2015, 09:18
Доброе время суток. Помогите с кодом. Пытаюсь выполнить удаление файлов через unlocker, но происходит "exit code: 1" после запуска

[Files]
Source: unlock\*; Flags: dontcopy;

[code]
var
RC: integer;
lpBuff: String;

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Unlocker.exe');
ExtractTemporaryFile('UnlockerCOM.dll');
ExtractTemporaryFile('UnlockerDriver5.sys');
ExtractTemporaryFile('UnlockerInject32.exe');
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinRAR archiver', 'InstallLocation', lpBuff) then
Exec(ExpandConstant('{tmp}\Unlocker.exe'), ' "lpBuff\RarExt.dll" /S /D', '', SW_HIDE, ewWaitUntilTerminated, RC)
Exec(ExpandConstant('{tmp}\Unlocker.exe'), ' "lpBuff\RarExt32.dll" /S /D', '', SW_HIDE, ewWaitUntilTerminated, RC)
Exec(ExpandConstant('{tmp}\Unlocker.exe'), ' "lpBuff\RarLng.dll" /S /D', '', SW_HIDE, ewWaitUntilTerminated, RC)
end;
https://yadi.sk/d/6b-vcZyIkmjcy

El Sanchez
27-11-2015, 14:36
Пытаюсь выполнить удаление файлов через unlocker, но происходит "exit code: 1" после запуска »
habib2302, а с чего это имя переменной lpBuff, а не её значение, входит в комстроку? Нужно так:

Exec(ExpandConstant('{tmp}\Unlocker.exe'), Format('"%s\RarExt.dll" /S /D', [lpBuff]), '', SW_HIDE, ewWaitUntilTerminated, RC)

Да и все 3 вызова не помешало бы в блок begin - end обернуть после условия.

habib2302
27-11-2015, 19:20
El Sanchez, и можно как то пропустить этот момент
http://savepic.ru/8120140.png (http://savepic.ru/8119116.png)
т.к инсталлятор ругается на отсутствие файлов
Found pending rename or delete that matches one of our files: c:\program files\winrar\rarext.dll

mouri
28-11-2015, 02:33
Подскажите, как проверить синтаксис ввода. Через edit забиваются параметры в конфиг, должны соответствовать шаблону --param1 --param2 и т.д.

BMODS
28-11-2015, 21:13
Всем привет, нужны компоненты с галочкой без галочки с кружочком и зачеркнутые компоненты с галочкой и кружочком.

BMODS
29-11-2015, 10:27
Не у кого нет примеров компонентов что ли?

kotyarko@fb
29-11-2015, 11:02
Всем привет, нужны компоненты с галочкой без галочки с кружочком и зачеркнутые компоненты с галочкой и кружочком. »
Например:
[Components]
Name: a; Description: Компонент 1.;
Name: b; Description: Компонент 2.; Flags: exclusive;
Name: c; Description: Компонент 3.; Flags: exclusive;
Name: d; Description: Компонент 4.; Flags: fixed;
Name: e; Description: Компонент 5.; Flags: fixed;
Name: f; Description: Компонент 6.; Flags: fixed exclusive;
Name: g; Description: Компонент 7.; Flags: fixed exclusive;

[*Code]
Procedure InitializeWizard();
var
I: Integer;
begin
with WizardForm.ComponentsList do
for I := 0 to ItemCount - 1 do
if not ItemEnabled[I] then
ItemFontStyle[I] := [fsStrikeOut];
end;




© OSzone.net 2001-2012