Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 8]

Закрытая тема
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 8]

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1274
Благодарности: 1030


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: El Sanchez
Дата: 22-10-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:

Показать/скрыть: Ссылки на примеры скриптов:

Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;

  • RegExporter - Фриварная утилита для экспорта реестра и конвертации файлов *.reg и *.ini в инсталляционные скрипты Inno Setup и NSIS.
    Последняя версия: 1.2.0 [23.09.2014] - Скачать;



Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Скрипты Inno Setup. Помощь и советы [часть 6]
Скрипты Inno Setup. Помощь и советы [часть 7]

Отправлено: 08:52, 02-02-2015

 

Аватара для Dodakaedr

Ветеран


Сообщения: 863
Благодарности: 262

Профиль | Отправить PM | Цитировать


Цитата МИШАНЧИК:
при отказе от дальнейшей установки(скрипт скомпилирован в 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;

Цитата ZVSRus:
Как сделать как на картинке. »
чтобы так сделать нужна ботва с модулем для неё. Наверняка все это у вас уже есть. Положите все что необходимо рядом с инсталлятором и раскомментируйте строки в скрипте
Скрытый текст
Код: Выделить весь код
;#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;

-------
Inno Setup 5 Ultra Unicode

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:05, 21-11-2015 | #1081



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для ZVSRus

Старожил


Сообщения: 292
Благодарности: 90

Профиль | Отправить PM | Цитировать


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); при этом пути запуск не происходит.
В чём разница подскажите?

Последний раз редактировалось ZVSRus, 21-11-2015 в 22:00.


Отправлено: 21:29, 21-11-2015 | #1082


SHVtYW4=


Сообщения: 3451
Благодарности: 1273

Профиль | Отправить PM | Цитировать


Цитата ZVSRus:
при этом пути запуск не происходит.
В чём разница подскажите? »
Как по вашему будет работать, если путь к диску не указан?
В
Код: Выделить весь код
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
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:09, 21-11-2015 | #1083


Аватара для ZVSRus

Старожил


Сообщения: 292
Благодарности: 90

Профиль | Отправить PM | Цитировать


Забыл выставить C:\ Блин глаз за мылился.

Отправлено: 22:51, 21-11-2015 | #1084


Аватара для nik1967

Старожил


Сообщения: 440
Благодарности: 251

Профиль | Сайт | Отправить PM | Цитировать


Цитата Dodakaedr:
чтобы так сделать нужна ботва с модулем для неё. »
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;

-------
Если сообщение оказалось полезным для Вас, то помимо спасибо, можно нажать на "Полезное сообщение".

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:58, 21-11-2015 | #1085


SHVtYW4=


Сообщения: 3451
Благодарности: 1273

Профиль | Отправить PM | Цитировать


Цитата nik1967:
а так не проще? »
И я о том же подумал:
Скрытый текст
Код: Выделить весь код
#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;

Отправлено: 23:35, 21-11-2015 | #1086


Аватара для ZVSRus

Старожил


Сообщения: 292
Благодарности: 90

Профиль | Отправить PM | Цитировать


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;

Отправлено: 09:33, 22-11-2015 | #1087


Забанен


Сообщения: 96
Благодарности: 0

Профиль | Цитировать


парни помогите решить проблему надо что бы создался 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

Отправлено: 09:50, 22-11-2015 | #1088


Аватара для nik1967

Старожил


Сообщения: 440
Благодарности: 251

Профиль | Сайт | Отправить PM | Цитировать


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,
из справки Inno
[Setup]: DiskSpanning
Возможные значения:
yes или no
Значение по умолчанию:
no

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

-------
Если сообщение оказалось полезным для Вас, то помимо спасибо, можно нажать на "Полезное сообщение".

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:55, 22-11-2015 | #1089


Забанен


Сообщения: 96
Благодарности: 0

Профиль | Цитировать


как совместить если имеется уже уже токая строка procedure CurStepChanged(CurStep: TSetupStep);

Отправлено: 10:26, 22-11-2015 | #1090



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 8]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 7] El Sanchez Автоматическая установка приложений 2499 02-02-2015 08:59
Скрипты Inno Setup. Помощь и советы [часть 6] El Sanchez Автоматическая установка приложений 2494 10-03-2014 11:51
Скрипты Inno Setup. Помощь и советы [часть 5] El Sanchez Автоматическая установка приложений 1999 28-03-2013 19:09
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58




 
Переход