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

Dodakaedr
21-11-2015, 20:05
при отказе от дальнейшей установки(скрипт скомпилирован в 7х64) и закрытии инсталятора, выдает ошибку »
Попробуйте так [Files]
Source: compiler:Dll Pack\CallbackCtrl.dll; Flags: dontcopy

[code]
type
TWFProc = function(h:hWnd;Msg,wParam,lParam:Longint):Longint;

function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam: Longint; lParam: Longint): Longint; external 'CallWindowProcA@user32.dll stdcall';
function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function WrapWFProc(Callback: TWFProc; ParamCount: Integer): Longword; external 'wrapcallbackaddr@files:CallbackCtrl.dll stdcall';

var
OldProc:Longint;
free: boolean;

procedure AboutSetupClick;
begin
//здесь обрабатываем нажатие на пункт меню "О программе ..."
MsgBox('bla-bla-bla', mbInformation, MB_OK);
end;

function WFWndProc(h:HWND;Msg,wParam,lParam:Longint):Longint;
begin
if (Msg=$112) and (wParam=9999) then begin
Result:=0;
AboutSetupClick;
end else begin
if Msg=$2 then SetWindowLong(WizardForm.Handle,-4,OldProc);
Result:=CallWindowProc(OldProc,h,Msg,wParam,lParam);
end;
end;

procedure InitializeWizard;
begin
free := true;
OldProc:=SetWindowLong(WizardForm.Handle,-4,WrapWFProc(@WFWndProc,4));
end;

procedure DeinitializeSetup();
begin
if free <> false then WizardForm.Free;
end;
Как сделать как на картинке. »
чтобы так сделать нужна ботва с модулем для неё. Наверняка все это у вас уже есть. Положите все что необходимо рядом с инсталлятором и раскомментируйте строки в скрипте;#include "botva2.iss"

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
DisableFinishedPage=yes
//SetupIconFile=icon.ico //иконка слева вверху окна инсталлятора

//[files]
//Source: "b2p.dll"; DestDir: "{tmp}"; Flags: dontcopy
//Source: "botva2.dll"; DestDir: "{tmp}"; Flags: dontcopy

[code]
//function InitializeSetup(): Boolean;
//begin
//if not FileExists(ExpandConstant('{tmp}\b2p.dll')) then ExtractTemporaryFile('b2p.dll');
//if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
//Result := True;
//end;

function ShowFinishedForm(): Boolean;
var
FinishedForm: TSetupForm;
begin
FinishedForm := CreateCustomForm;
FinishedForm.Position:=poScreenCenter;
try
FinishedForm.ClientWidth := ScaleX(310);
FinishedForm.ClientHeight := ScaleY(133);
FinishedForm.BorderStyle := bsSingle;
FinishedForm.BorderIcons := [biSystemMenu];
FinishedForm.Caption := 'Установка My Application';
FinishedForm.CenterInsideControl(WizardForm, False);

//установка иконки, требуется ботва
//ImgLoad(FinishedForm.Handle, ExpandConstant('{tmp}\icon.png'), ScaleX(20), ScaleY(20), ScaleX(46), ScaleY(40), True, False);
//ImgApplyChanges(FinishedForm.Handle);

with TNewButton.Create(FinishedForm) do
begin
Parent := FinishedForm;
SetBounds(ScaleX(110), ScaleY(100), ScaleX(90), ScaleY(25));
ModalResult := mrYes;
Caption := SetupMessage(msgButtonYes);
end;
with TNewStaticText.Create(FinishedForm) do
begin
Parent:= FinishedForm;
Caption:='Всё готово, приятного пользования!'+ #13#10 +
''+ #13#10 +
'Запустить программу сейчас?';
Left:=70;
Top:=20;
Font.Name:= 'Tahoma';
Font.Size:= 9;
Font.Color:=clBlack;;
end;
with TNewButton.Create(FinishedForm) do
begin
Parent := FinishedForm;
SetBounds(ScaleX(210), ScaleY(100), ScaleX(90), ScaleY(25));
ModalResult := mrNo;
Caption := SetupMessage(msgButtonNo);
end;

Result := (FinishedForm.ShowModal = mrYes);
finally
FinishedForm.Free;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;
begin
case CurStep of
ssDone:
if ShowFinishedForm then
Exec(ExpandConstant('{app}\MyProg.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
end;
end;

ZVSRus
21-11-2015, 21:29
Dodakaedr, Сделал как описано. Все иконки на своих местах. Но почему то программа не запускается. Путь к файлу прописан вручную.

Разобрался.

Exec(ExpandConstant('{pf}\ArtIcons Pro\ARTICONS.exe'), '', '', SW_SHOW, ewNoWait, ResultCode); при этом пути запуск происходит.
Exec(ExpandConstant('Program Files (x86)\ArtIcons Pro\ARTICONS.exe'), '', '', SW_SHOW, ewNoWait, ResultCode); при этом пути запуск не происходит.
В чём разница подскажите?

Nordek
21-11-2015, 22:09
при этом пути запуск не происходит.
В чём разница подскажите? »Как по вашему будет работать, если путь к диску не указан?
В
Exec(ExpandConstant('Program Files (x86)\ArtIcons Pro\ARTICONS.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
укажите корень диска, т.е
Exec(ExpandConstant('C:\Program Files (x86)\ArtIcons Pro\ARTICONS.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
В инсталляторе, константа {pf} в 32-разрядной Windows: переводит путь в "C:\Program Files"; в 64-разрядной Windows: в "C:\Program Files (x86)"; если инсталлятор работает в 64-разрядном режиме: в "C:\Program Files".

Можно жёстко указать:
{pf32} - Путь для 32-разрядного системного каталога Program Files
{pf64} - Путь для 64-разрядного системного каталога Program Files

ZVSRus
21-11-2015, 22:51
Забыл выставить C:\ Блин глаз за мылился.

nik1967
21-11-2015, 22:58
чтобы так сделать нужна ботва с модулем для неё. »
Dodakaedr, а так не проще?#ifndef IS_ENHANCED
#error Enhanced edition of Inno Setup (restools) is required to compile this script
#endif

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

[Files]
Source: 1.ico; Flags: dontcopy;

[code]
function LoadImage(hInst: THandle; ImageName: PansiChar; ImageType: UINT; X, Y: Integer; Flags: UINT): THandle;
external 'LoadImageA@user32.dll stdcall delayload';

procedure InitializeWizard;
begin
ExtractTemporaryFile('1.ico');
MsgBoxEx(0, 'Проверка', 'Заголовок проверки', MB_YESNO, LoadImage(0,ExpandConstant('{tmp}')+'\1.ico',1,32,32,$1010), 0);
end;

Nordek
21-11-2015, 23:35
а так не проще? »И я о том же подумал:
#define icon "myicon.ico"

[Files]
Source: {#icon}; DestDir: {tmp}; Flags: dontcopy;

[Code]
var
IconImage1: TNewIconImage;

procedure InitializeWizard();
begin
IconImage1 := TNewIconImage.Create(WizardForm);
with IconImage1 do
begin
Parent := WizardForm;
SetBounds(ScaleX(40), ScaleY(313), ScaleX(105), ScaleY(105));
ExtractTemporaryFile('{#icon}');
Icon.LoadFromFile(ExpandConstant('{tmp}\{#icon}'));
end;
end;

ZVSRus
22-11-2015, 09:33
Nordek, Так проще, но как к этому прикрурить этот скрипт.
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Code ]
procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;
begin
if CurStep = ssDone then
if MsgBox('Программа ' + '{#SetupSetting("AppName")}' + ' установлена!' + #10#10#13 + 'Запустить ' + '{#SetupSetting("AppName")}' + '?' , mbInformation, MB_YESNO) = IDYES then
Exec(ExpandConstant('{app}\bin\XR_3DA.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
end;

vadjliss
22-11-2015, 09:50
парни помогите решить проблему надо что бы создался 1 файл ехе. а в этом скрипте создаётся ехе. и bin. то есть 2 файла
#define MyAppName "CorelCAD 2016"
#define MyAppVersion "16.0.0.1079"
#define MyAppPublisher "Corel"
#define MyAppURL ""
#define MainExe "{app}\CorelCAD 2016\BIN\CorelCAD.exe"
#define MainExe64 "{app}\CorelCAD 2016\BIN\CorelCAD.exe"
#define MainExeDir Copy(MainExe, 1, RPos("\", MainExe)-1)
#define MainExe64Dir Copy(MainExe64, 1, RPos("\", MainExe64)-1)

[Setup]
AppId={{2F983EE9-A521-4D68-83F4-626DEC61E945}
AppVersion=16.0.0.1079
VersionInfoVersion=16.0.0.1079
AppName={#MyAppName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
VersionInfoDescription=CorelCAD 2016 Build 16.0.0.1079 x86-x64
OutputDir=C:\Users\\WW-W\Desktop\скрипт
OutputBaseFilename=CorelCAD 2016 Build 16.0.0.1079 x86-x64 RUS
SetupIconFile=C:\Users\\WW-W\Desktop\скрипт\image\1.ico
PrivilegesRequired=admin
Compression=lzma/ultra64
SolidCompression=true
InternalCompressLevel=ultra64
WizardImageFile=image\1.bmp
WizardSmallImageFile=image\2.bmp
UsePreviousGroup=False
DisableProgramGroupPage=yes
UninstallRestartComputer=yes
ArchitecturesInstallIn64BitMode=x64
DiskSpanning=yes
SlicesPerDisk=1
DiskSliceSize=728760320



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

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

[Files]
;Source: C:\Users\WW-W\Desktop\64\ProgramFiles64Folder\*; DestDir: {app}; Check: IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs
Source: C:\Users\WW-W\Desktop\64\ProgramFiles64Folder\*; DestDir: {app}; Check: IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs
Source: C:\Users\WW-W\Desktop\32\ProgramFilesFolder\*; DestDir: {app}; Check: not IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs
// C:\ProgramData
;Source: ..\64\LocalAppDataFolder\*; DestDir: {commonappdata}; Check: IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs
// CommonAppDataFolder
Source: ..\64\CommonAppDataFolder\*; DestDir: {localappdata}; Check: IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs
// CommonFiles
;Source: ..\64\CommonFilesFolder\*; DestDir: {cf}; Check: IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs
//Application Data
Source: ..\64\AppDataFolder\*; DestDir: {userappdata}; Check: IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs

// C:\ProgramData
;Source: ..\32\LocalAppDataFolder\*; DestDir: {commonappdata}; Check: not IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs
// CommonAppDataFolder
Source: ..\32\CommonAppDataFolder\*; DestDir: {localappdata}; Check: not IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs
// CommonFiles
Source: ..\32\CommonFilesFolder\*; DestDir: {cf}; Check: not IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs
//Application Data
Source: ..\32\AppDataFolder\*; DestDir: {userappdata}; Check: not IsWin64; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: "{userdesktop}\{#MyAppName}"; FileName: "{#MainExe64}"; WorkingDir: "{#MainExe64Dir}"; Tasks: desktopicon; Check: IsWin64
Name: "{userdesktop}\{#MyAppName}"; FileName: "{#MainExe}"; WorkingDir: "{#MainExeDir}"; Tasks: desktopicon; Check: not IsWin64

nik1967
22-11-2015, 09:55
ZVSRus, чукча не читатель, чукча писатель.
#ifndef IS_ENHANCED
#error Enhanced edition of Inno Setup (restools) is required to compile this script
#endif

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

[Files]
Source: 1.ico; Flags: dontcopy;

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[code]
function LoadImage(hInst: THandle; ImageName: PansiChar; ImageType: UINT; X, Y: Integer; Flags: UINT): THandle; external 'LoadImageA@user32.dll stdcall delayload';

procedure InitializeWizard;
begin
ExtractTemporaryFile('1.ico');
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;
begin
if CurStep = ssDone then
if MsgBoxEx(0,'Программа '+'{#SetupSetting("AppName")}'+' установлена!'+#10#10#13+'Запустить '+'{#SetupSetting("AppName")}'+'?',
'Установка — '+'{#SetupSetting("AppName")}',MB_YESNO,LoadImage(0,ExpandConstant('{tmp}')+'\1.ico',1,32,32,$1010),0) = IDYES then
Exec(ExpandConstant('{win}\notepad.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
end;



vadjliss, [Setup]: DiskSpanning
Возможные значения:
yes или no
Значение по умолчанию:
no

Опмсание:
При значении yes будет производиться разбиение на диски. Определяет, создавать ли компилятору один файл SETUP.EXE, или делить его на файлы (SETUP-*.BIN), которые помещаются на дискету, CD-ROM, DVD-ROM или другой носитель.

vadjliss
22-11-2015, 10:26
как совместить если имеется уже уже токая строка procedure CurStepChanged(CurStep: TSetupStep);

kotyarko@fb
22-11-2015, 12:32
vadjliss, Procedure CurStepChanged1(CurStep: TSetupStep);
begin
...
end;

Procedure CurStepChanged2(CurStep: TSetupStep);
begin
...
end;

Procedure CurStepChanged(CurStep: TSetupStep);
begin
CurStepChanged1(CurStep);
CurStepChanged2(CurStep);
end;

ZVSRus
22-11-2015, 15:53
nik1967, Все хорошо. Только не отображается иконка в левом верхнем углу на бордюре.
И второй вопрос. Можно ли к данному скрипту прикрутить InstallerCheck и PortableCheck
#ifndef IS_ENHANCED
#error Enhanced edition of Inno Setup (restools) is required to compile this script
#endif

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

[Files]
Source: 1.ico; Flags: dontcopy;

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[code]
function LoadImage(hInst: THandle; ImageName: PansiChar; ImageType: UINT; X, Y: Integer; Flags: UINT): THandle; external 'LoadImageA@user32.dll stdcall delayload';

procedure InitializeWizard;
begin
ExtractTemporaryFile('1.ico');
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;
begin
if CurStep = ssDone then
if MsgBoxEx(0,'Программа '+'{#SetupSetting("AppName")}'+' установлена!'+#10#10#13+'Запустить '+'{#SetupSetting("AppName")}'+'?',
'Установка — '+'{#SetupSetting("AppName")}',MB_YESNO,LoadImage(0,ExpandConstant('{tmp}')+'\1.ico',1,32,32,$1010),0) = IDYES then
Exec(ExpandConstant('{win}\notepad.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
end;

Dodakaedr
23-11-2015, 08:07
Все хорошо. Только не отображается иконка в левом верхнем углу на бордюре. »
Будьте повнимательней [Setup]
SetupIconFile=icon.ico //иконка слева вверху окна инсталлятора
И второй вопрос. Можно ли к данному скрипту прикрутить InstallerCheck и PortableCheck »
Можно все что угодноprocedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode: Integer;
begin
if CurStep = ssDone then
if InstallerCheck then begin
if MsgBoxEx(0,'Программа '+'{#SetupSetting("AppName")}'+' установлена!'+#10#10#13+'Запустить '+'{#SetupSetting("AppName")}'+'?',
'Установка — '+'{#SetupSetting("AppName")}',MB_YESNO,LoadImage(0,ExpandConstant('{tmp}')+'\1.ico',1,32,32,$1010), 0) = IDYES then
Exec(ExpandConstant('{win}\notepad.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
end else
MsgBoxEx(0,'Программа '+'{#SetupSetting("AppName")}'+' установлена!'+#10#10#13+'Приятного пользования!,
'Установка — '+'{#SetupSetting("AppName")}',MB_OK,LoadImage(0,ExpandConstant('{tmp}')+'\1.ico',1,32,32,$1010), 0);
end;

ZVSRus
23-11-2015, 11:58
Dodakaedr, Не отображается иконка в левом верхнем углу на бордюре в данном куске скрипта
т.е. на бордюре маленького окошечка вместо финишной страницы от nik1967 #ifndef IS_ENHANCED
#error Enhanced edition of Inno Setup (restools) is required to compile this script
#endif

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=.
SetupIconFile=Icon.ico
UsePreviousAppDir=no
UsePreviousGroup=no

[Files]
Source: 1.ico; Flags: dontcopy;

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[code ]
function LoadImage(hInst: THandle; ImageName: PansiChar; ImageType: UINT; X, Y: Integer; Flags: UINT): THandle; external 'LoadImageA@user32.dll stdcall delayload';

procedure InitializeWizard;
begin
ExtractTemporaryFile('1.ico'); // Извлечение временных файлов
end;

procedure CurStepChanged(CurStep: TSetupStep); // Изменение Шага
var
ResultCode: Integer;
begin
if CurStep = ssDone then
if MsgBoxEx(0,'Программа '+'{#SetupSetting("AppName")}'+' установлена!'+#10#10#13+'Запустить '+'{#SetupSetting("AppName")}'+'?',
'Установка — '+'{#SetupSetting("AppName")}',MB_YESNO,LoadImage(0,ExpandConstant('{tmp}')+'\1.ico',1,32,32,$1010),0) = IDYES then
Exec(ExpandConstant('{win}\notepad.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
end;

Dodakaedr
24-11-2015, 07:43
Не отображается иконка в левом верхнем углу на бордюре в данном куске скрипта
т.е. на бордюре маленького окошечка вместо финишной страницы от nik1967 »
Скорее всего никак.

Bartron
25-11-2015, 12:17
Подскажите, пожалуйста. Решил сделать собственное окно выхода из инсталла, кнопки сделал через ботву. На всех страницах окно выхода работает нормально, но на странице установки при нажатии "отмена" появляется ошибка http://www.pixic.ru/i/20a0c9S350K61211.jpg Ничего не могу понять. Скрипт прикрепил.

TryRooM
25-11-2015, 14:41
Bartron, http://rghost.ru/79vcWlr9H
Пробуйте.

Bartron
25-11-2015, 14:55
TryRooM, всё равно та же ошибка на странице установки...

TryRooM
25-11-2015, 15:04
Вот скриншот страницы установки. Проверял на Ansi и Unicode версии от Restools

Bartron
25-11-2015, 15:27
TryRooM, у вас на скриншоте Readypage, а ошибка появляется непосредственно на Installingpage (когда уже идёт сама установка).




© OSzone.net 2001-2012