Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 8]
Bartron, http://rghost.ru/6tRGNZ995
Тогда так. Стандартная установка, ошибки нет.
TryRooM, не помогает. Что странно, если прикрутить распаковку через Isdone, то окно работает нормально, ошибки нет, но если распаковка стандартная (что мне и нужно), то появляется ошибка; и если ботву убрать, окно тоже работает нормально, ничего понять не могу...
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;
habib2302,
Исходя из вашего кода, файл Settings.reg должен находиться, в папке WinRAR, тогда, ошибки не будет.
Dodakaedr, Как это все реализовать
habib2302
25-11-2015, 17:11
TryRooM, он там и лежит. Тем более вы сами подумайте зачем я делаю еще проверку на файл??
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;
меня больше всего интересует оформление
Вы имеете ввиду скрипт?.
habib2302
26-11-2015, 19:46
ZVSRus, ага
ага
Скрипта как токового еще нет.
Есть наброски, т.е. на вновь созданной странице прикрутить 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
Подскажите, как проверить синтаксис ввода. Через edit забиваются параметры в конфиг, должны соответствовать шаблону --param1 --param2 и т.д.
Всем привет, нужны компоненты с галочкой без галочки с кружочком и зачеркнутые компоненты с галочкой и кружочком.
Не у кого нет примеров компонентов что ли?
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC