Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 8]
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;
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); при этом пути запуск не происходит.
В чём разница подскажите?
при этом пути запуск не происходит.
В чём разница подскажите? »Как по вашему будет работать, если путь к диску не указан?
В
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
Забыл выставить C:\ Блин глаз за мылился.
чтобы так сделать нужна ботва с модулем для неё. »
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;
а так не проще? »И я о том же подумал:
#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;
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
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;
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;
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 »
Скорее всего никак.
Подскажите, пожалуйста. Решил сделать собственное окно выхода из инсталла, кнопки сделал через ботву. На всех страницах окно выхода работает нормально, но на странице установки при нажатии "отмена" появляется ошибка http://www.pixic.ru/i/20a0c9S350K61211.jpg Ничего не могу понять. Скрипт прикрепил.
Bartron, http://rghost.ru/79vcWlr9H
Пробуйте.
TryRooM, всё равно та же ошибка на странице установки...
Вот скриншот страницы установки. Проверял на Ansi и Unicode версии от Restools
TryRooM, у вас на скриншоте Readypage, а ошибка появляется непосредственно на Installingpage (когда уже идёт сама установка).
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC