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

Ответить
 • Просмотры: 25
Аватара пользователя
aidynchik

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

Сообщение aidynchik »

Добрый день, народ!

Подскажите пожалуйста, Inno Setup юзаю 3-ий день и потому не совсем втыкаю как и что, поэтому прошу помощи.

Задача такая - нужен установщик и апдейтер в одном. То есть если приложение не установлено - идет установка, если установлено, то соответственно обновление.

Причем при обновлении нужно копировать новый екзе, и после этого запускать второй екзешник, который будет делать обновление скриптов в базе. После всего этого закрывать установщик.

Записывать что-то в регистр не обязательно.



Как это сделать? Я нашел код сравнивающий версии файлов, впихнул его в раздел Code, но что делать дальше ума не приложу, да к тому же компилятор ругается на строку 47.



Код:

Код: Выделить всё

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
AppId={{1419C2B5-9C27-42DE-9424-9EB8FEEF4C3B}
AppName=MyApp
AppVersion=1.0.0.3
AppPublisher=Студия "MyApp"
DefaultDirName={pf}\MyApp
DefaultGroupName=MyApp
LicenseFile=C:\CVSWork\MyApp\license.txt
OutputDir=C:\CVSWork\MyApp\Out
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1
[Files]
Source: "C:\CVSWork\MyApp\ShopUchet.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\CVSWork\MyApp\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
{Code}
type
  VersionState = (vsNotInstalled, vsOlderInstalled, vsSameInstalled, vsNewerInstalled);
function GetVersionState(): VersionState;
var
  ExePath: String;
  VersionMS, VersionLS: Cardinal;
begin
  ExePath := ExpandConstant('{app}\MyApp.exe');
  if GetVersionNumbers(ExePath, VersionMS, VersionLS) then begin
    if (VersionMS < {#VersionMS}) or ((VersionMS = {#VersionMS}) and (VersionLS < {#VersionLS})) then begin
      Result := vsOlderInstalled;
    end else if (VersionMS > {#VersionMS}) or ((VersionMS = {#VersionMS}) and (VersionLS > {#VersionLS})) then begin
      Result := vsNewerInstalled;
    end else begin
      Result := vsSameInstalled;
    end;
  end else begin
    Result := vsNotInstalled;
  end;
end;
function OnNextButtonClick(CurPageId: Integer): Boolean;
begin
  Result := True;
  if CurPageId = wpSelectDir then begin
    if GetVersionState() = vsNewerInstalled then begin
      Result := SuppressibleMsgBox('A newer version of the application is already installed.  Are you sure you want to '
         + 'downgrade to {#MyAppVersion}?', mbConfirmation, MB_YESNO, IDYES) = IDYES;
    end;
  end;
end;
[Icons]
Name: "{group}\ShopUchet"; Filename: "{app}\MyApp.exe"
Name: "{commondesktop}\MyApp"; Filename: "{app}\MyApp.exe"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\MyApp"; Filename: "{app}\MyApp.exe"; Tasks: quicklaunchicon
[Run]
Filename: "{app}\MyApp.exe"; Description: "{cm:LaunchProgram,MyApp}"; Flags: nowait postinstall skipifsilent

строка, на которую ругается компилятор "if (VersionMS < {#VersionMS}) or ((VersionMS = {#VersionMS}) and (VersionLS < {#VersionLS})) then begin"
Аватара пользователя
kotyarko@fb

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

Сообщение kotyarko@fb »

Цитата habib2302:



Т.е. изображение выделенное красным должно быть совершенно в другом месте (в SelectLanguageForm)
Скрипты Inno Setup. Помощь и советы [часть 8]




Ну так поместите его туда.
Аватара пользователя
aidynchik

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

Сообщение aidynchik »

Цитата:



Вы не указали эти директивы, вот и ругается.

Перед секцией [Setup] (ну или же в любом месте, где вам угодно), прописываете:



спасибо, вставил директивы. А что дальше делать, как заставить теперь сработать эту функцию?

Т.к. установка проходит вполне гладко, и пошагово компилятор туда не заходит
Аватара пользователя
aidynchik

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

Сообщение aidynchik »

спасибо! Изображение

теперь не подскажете - как все-таки сделать, если программа уже установлена, то обновить ТОЛЬКО лишь екзешник а не все файлы с папки, и запустить второй exe-файл, который будет обновлять БД?
Аватара пользователя
Dodakaedr

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

Сообщение Dodakaedr »

Цитата habib2302:



и как убрать это
Скрипты Inno Setup. Помощь и советы [часть 8]






Код:

Код: Выделить всё

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  Confirm:=False;
end;
Аватара пользователя
maraby

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

Сообщение maraby »

привет!



Как сделать зависимость инсталяции компонентов от версии системы (будет один RadioButton будет активный - MS SQL Server 2008 или 2012, или оба - если версия виндовса поддерживает обе программы) ?



Win < 6.0 - только 2008

Win >6.1 - только 2012

Win = 6.0 or 6.1 - 2008 и 2012



Благодарю!!

Изображение
Аватара пользователя
Dodakaedr

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

Сообщение Dodakaedr »

Как в inno сгенерировать случайное число на 10 цифр?
Аватара пользователя
aidynchik

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

Сообщение aidynchik »

я извиняюсь, но почему-то этот код не работает Изображение

ставлю версию 1.0.0.5 на версию 1.0.0.4 - пишет что новейшая версия уже установлена...



Код:

Код: Выделить всё

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{1419C2B5-9C27-42DE-9424-9EB8FEEF4C3B}
AppName=MyApp
AppVersion=1.0.0.5
;AppVerName=MyApp 1.0.0.5
AppPublisher=Студия "Автоматизация ИП"
AppPublisherURL=http://MyApp.kz/
AppSupportURL=http://MyApp.kz/
AppUpdatesURL=http://MyApp.kz/
DefaultDirName={pf}\MyApp
DefaultGroupName=MyApp
LicenseFile=C:\CVSWork\MyAppFB\MyApp32\license.txt
OutputDir=C:\CVSWork\MyAppFB\MyApp32
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1
[Files]
Source: "C:\CVSWork\MyAppFB\MyApp32\MyApp.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\CVSWork\MyAppFB\MyApp32\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
#define VersionMajor
#define VersionMinor
#define VersionRevision
#define VersionBuild
#expr ParseVersion("MyApp.exe", VersionMajor, VersionMinor, VersionRevision, VersionBuild)
#define VersionMS ((VersionMajor << 16) + VersionMinor)
#define VersionLS ((VersionRevision << 16) + VersionBuild)
{Code}
type
  VersionState = (vsNotInstalled, vsOlderInstalled, vsSameInstalled, vsNewerInstalled);
function GetVersionState(): VersionState;
var
  ExePath: String;
  VersionMS, VersionLS: Cardinal;
  VersionMSs : Cardinal;
begin
  ExePath := ExpandConstant('{app}\MyApp.exe');
  if GetVersionNumbers(ExePath, VersionMS, VersionLS) then begin
    if (VersionMS < {#VersionMS}) or ((VersionMS = {#VersionMS}) and (VersionLS < {#VersionLS})) then begin
      Result := vsOlderInstalled;
    end else if (VersionMS > {#VersionMS}) or ((VersionMS = {#VersionMS}) and (VersionLS > {#VersionLS})) then begin
      Result := vsNewerInstalled;
    end else begin
      Result := vsSameInstalled;
    end;
  end else begin
    Result := vsNotInstalled;
  end;
end;
function NextButtonClick(CurPageId: Integer): Boolean;
var VersState : VersionState;
begin
  Result := True;
  if CurPageId = wpSelectDir then begin
    VersState := GetVersionState();
    if (VersState = vsNewerInstalled) or (VersState = vsSameInstalled) then begin
      MsgBox('Последняя версия программного продукта уже установлена. Установка будет отменена.', mbConfirmation, MB_OK);
      Result := False;
      WizardForm.CancelButton.OnClick(WizardForm.CancelButton);
    end;
  end;
end;
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
    Confirm := false;
end;
[Icons]
Name: "{group}\MyApp"; Filename: "{app}\MyApp.exe"
Name: "{commondesktop}\MyApp"; Filename: "{app}\MyApp.exe"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\MyApp"; Filename: "{app}\MyApp.exe"; Tasks: quicklaunchicon
[Run]
Filename: "{app}\MyApp.exe"; Description: "{cm:LaunchProgram,MyApp}"; Flags: nowait postinstall skipifsilent

что я написал не так?
Аватара пользователя
OldGamer

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

Сообщение OldGamer »

Help! В конце установки Visual C++ выбивает ошибку Изображение (при этом компоненты в систему устанавливаются):



http://i58.fastpic.ru/big/2015/0429/...974a13031c.png




С чем эта проблема связана?

(скину скрипт при необходимости)
Аватара пользователя
R.i.m.s.k.y.

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

Сообщение R.i.m.s.k.y. »

TrueMage, в принципе, ничего особенного. Но в этом варианте:


Цитата TrueMage:



б) Если на жестких дисках есть файл, скажем, patch_d2.mpq, то в каталог, который содержит этот файл плюс, опять же, "\BFE"
Скрипты Inno Setup. Помощь и советы [часть 8]




поиск будет не самый быстрый. Будет напрямую зависеть от забитости хардов.
Ответить

Вернуться в «Автоматическая установка приложений»