Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 8]
Nordek, спасибо за ответ.
Я так понял, что всё что я "натягал" из реестра в сценарий скрипту и даром не нунжно?
Удалил всё, что шло ниже [Registry]. Сделал инсталлятор и установил с него игру. При попытке удаления выскакивает та же ошибка.
Я так понял, что всё что я "натягал" из реестра в сценарий скрипту и даром не нунжно? »Да, т.е вам не нужно добавлять информацию в скрипт из раздела "Uninstall"
У вас имеются:
Software\MPC-HC
SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MPC-HC_is1
В Software\MPC-HC содержится информация о настройках, которая в будущем может пригодиться (Зависит от возможностей): Может быть как добавлено содержимое в скрипт, так и нет (т.к в другом случае информация о параметрах может быть помещена в конфигурационный файл ".ini").
В Software\Microsoft\Windows\CurrentVersion\Uninstall\MPC-HC_is1 содержится информация о приложении, контакты и пр. В тоже время, благодаря информации которая содержится в "MPC-HC_is1", позволит без труда деинсталлировать приложение.
Т.е для деинсталляции, достаточно такой информации:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MPC-HC_is1]
"DisplayIcon"="C:\\Program Files\\MPC-HC\\mpc-hc.exe"
"DisplayName"="Media Player Classic Home Cinema"
"UninstallString"="C:\\Program Files\\MPC-HC\\uninsall.exe"
Даже при добавлении информации из "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MPC-HC_is1" в скрипт, то ранее внесённая информация в [Registry], в реестре не будет числиться. Будет внесена та информация, которая внесена в секцию [Setup]:
[Setup]
AppId=ID Приложения
AppVersion=Версия
AppPublisher=Издатель
AppPublisherURL=Сайт создателя
AppSupportURL=Поддержка
AppUpdatesURL=Обновления
UninstallDisplayName=Имя
UninstallDisplayIcon=Значок,Индекс значка
AppModifyPath=Изменения
AppComments=Комментарии
AppContact=Контакты
AppReadmeFile=Файл Readme
AppSupportPhone=Телефон
По этому, вам в секцию [Registry], добавлять информацию вида:
[Registry]
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MPC-HC_is1не нужно.
В некотором случае, добавление может стать ошибочной или не желательной (например в случае как 32-х и 64-х битных системах, одна из информации может являться неверной информацией (мусором)).
При попытке удаления выскакивает та же ошибка. »Смотрите внимательно:
[Files]
Source: C:\Program Files (x86)\GothicIII\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Вы компилируете напрямую с "C:\Program Files (x86)\GothicIII"
В инсталляторе прописано "C:\Program Files (x86)\GothicIII\*" + Обрабатовать подкаталоги + Создавать все подкаталоги: Это значит, что в инсталлятор входит всё содержимое.
Вы не учли одно "но", то что в инсталлятор не должны входить файлы "unins000.dat" и "unins000.exe".
Чтоб не путаться, скопируйте содержимое: "C:\Program Files (x86)\GothicIII" в другое удобное место.
Зайдите в "C:\Program Files (x86)" и скопируйте от туда папку "GothicIII" на локальный диск "D:\" т.е чтоб получилось "D:\GothicIII"
Затем зайдите в "D:\GothicIII" и в папке "GothicIII" удалите "unins000.dat" и "unins000.exe".
В скрипте, в секции [Files] замените:
Source: C:\Program Files (x86)\GothicIII\Gothic3.exe; DestDir: {app}; Flags: ignoreversion
Source: C:\Program Files (x86)\GothicIII\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
на
Source: D:\GothicIII\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Строка вида C:\Program Files (x86)\GothicIII\Gothic3.exe вам не нужна, потому-что у вас и так входит всё содержимое каталога.
Nordek, спасибо огромное! Изумительный Вы человек! Вместо того, что бы просто кинуть пару строк кода ламеру с подсказкой куда их вставить, Вы пошагово разжовываете в чём моя ошибка (как хороший преподаватель), объясняете где я был не прав... О, боженька ты мой! В Вас толерантности на десять человек! Я просто счастлив, что попал на этот форум даже из-за того, что есть возможность пообщаться с такими людьми! Ещё раз огромное спасибо.
palsn2000
25-04-2015, 10:31
Здравствуйте, подскажите пожалуйста можно-ли каким-то образом перенести часть названия (текста) задачи на вторую строку.
Допустим (произвольное название)
[Tasks]
Name: zadacha1; Description: Установить/Обновить Название программы Версия программы (от: число месяц год)
Хочу чтобы на странице инсталлятора название задачи выглядело следующим образом:
Установить/Обновить Название программы
Версия программы (от: число месяц год)
Отбивать строку пробелами как-то не серьёзно (каждый раз приходится подбирать заново при наличии/отсутствии прокрутки в задачах или при изменении названия)
Есть какой-нибудь способ типа +#13#10+ или что-то типа того?
Хочу чтобы на странице инсталлятора название задачи выглядело следующим образом:
Установить/Обновить Название программы
Версия программы (от: число месяц год) »
[CustomMessages]
zadacha1=Установить/Обновить Название программы %nВерсия программы (от: число месяц год)
[Tasks]
Name: zadacha1; Description: {cm:zadacha1}
OldGamer
26-04-2015, 12:16
Всем привет!
Подскажите, пожалуйста, нубу, пример кода (скрипта) на установку доп. компонентов (DirectX, Visual C++) ? :blush:
Сойдёт либо тихая установка, либо в конце шла - без разницы.
Заранее Большое Спасибо!
Dodakaedr
26-04-2015, 14:07
OldGamer, Вот здесь посмотрите Ссылка (http://forum.oszone.net/post-2430892-1958.html)
еще такое есть [Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: icons\Mp; Description: Создать ярлык на рабочем столе для одиночной игры (Mp)
Name: soft; Description: Дополнительные програмное обеспечение
Name: soft\directx; Description: Обновить DirectX
Name: soft\VCCheck; Description: Установить Microsoft Visual C++
Name: soft\oalinst; Description: Установить Open AL
Name: soft\PhysX; Description: Установить Nvidia PhysX
Name: soft\ubisoft_Game_Launcher; Description: Установить Ubisoft Game Launcher
Name: icons; Description: Дополнительные значки
Name: icons\sp; Description: Создать ярлык на рабочем столе для одиночной игры (Sp)
Name: icons\Mp; Description: Создать ярлык на рабочем столе для одиночной игры (Mp)
[Run]
Filename: {src}\DirectX\DXSETUP.exe; Parameters: /silent; StatusMsg: Обновление DirectX...; Tasks: soft\directx; Flags: waituntilterminated
Filename: {src}\vcredist\vcredist_x86.exe; Parameters: /q; StatusMsg: Установка Microsoft Visual C++ ...; Tasks: soft\VCCheck; Flags: runhidden waituntilterminated
Filename: {src}\Redist\oalinst.exe; Parameters: /silent; MinVersion: 4.0,5.0; StatusMsg: Идет установка дополнительных программ...; Tasks: soft\oalinst; Flags: waituntilterminated
Filename: {src}\PhysX_9.10.0224_SystemSoftware.exe; Parameters: /quiet; MinVersion: 4.0,5.0; StatusMsg: Идет установка Nvidia PhysX; Tasks: soft\PhysX; Flags: waituntilterminated
Filename: {src}\GameLauncher\UbisoftGameLauncherInstaller.exe; Parameters: /silent; MinVersion: 4.0,5.0; StatusMsg: Идет установка Ubisoft Game Launcher...; Tasks: soft\Ubisoft_Game_Launcher; Flags: waituntilterminated
aidynchik
27-04-2015, 11:58
Добрый день, народ!
Подскажите пожалуйста, 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
27-04-2015, 13:12
строка, на которую ругается компилятор "if (VersionMS < {#VersionMS}) or ((VersionMS = {#VersionMS}) and (VersionLS < {#VersionLS})) then begin" »
Вы не указали эти директивы, вот и ругается.
Перед секцией [Setup] (ну или же в любом месте, где вам угодно), прописываете:
#define VersionMS "необходимое_вам_значение"
#define VersionLS "необходимое_вам_значение"
З.ы. это директивы препроцессора, встроенного в компилятор. Не все компиляторы имеют его.
aidynchik
28-04-2015, 06:27
Вы не указали эти директивы, вот и ругается.
Перед секцией [Setup] (ну или же в любом месте, где вам угодно), прописываете:
спасибо, вставил директивы. А что дальше делать, как заставить теперь сработать эту функцию?
Т.к. установка проходит вполне гладко, и пошагово компилятор туда не заходит
kotyarko@fb
28-04-2015, 11:28
А что дальше делать, как заставить теперь сработать эту функцию? » Переименуйте функцию OnNextButtonClick на NextButtonClick.
aidynchik
28-04-2015, 14:04
спасибо! =)
теперь не подскажете - как все-таки сделать, если программа уже установлена, то обновить ТОЛЬКО лишь екзешник а не все файлы с папки, и запустить второй exe-файл, который будет обновлять БД?
Dodakaedr
29-04-2015, 09:12
теперь не подскажете - как все-таки сделать, если программа уже установлена, то обновить ТОЛЬКО лишь екзешник а не все файлы с папки »
Для обновления файлов используйте флаг onlyifdoesntexist(установить если файл отсутствует) а для exe-шника ignoreversion(игнорировать, заменить)[Files]
Source: 1.dll; DestDir: {app}; Flags: onlyifdoesntexist
Source: help.chm; DestDir: {app}; Flags: onlyifdoesntexist
Source: MyProg.exe; DestDir: {app}; Flags: ignoreversion
и запустить второй exe-файл, который будет обновлять БД? »
А для этой задачи есть секция Run, в справке все подробно описывается.
привет!
Как сделать зависимость инсталяции компонентов от версии системы (будет один RadioButton будет активный - MS SQL Server 2008 или 2012, или оба - если версия виндовса поддерживает обе программы) ?
Win < 6.0 - только 2008
Win >6.1 - только 2012
Win = 6.0 or 6.1 - 2008 и 2012
Благодарю!!
:)
Dodakaedr
29-04-2015, 10:23
Как в inno сгенерировать случайное число на 10 цифр?
aidynchik
29-04-2015, 13:07
я извиняюсь, но почему-то этот код не работает :(
ставлю версию 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
29-04-2015, 19:31
Help! В конце установки Visual C++ выбивает ошибку :shocked: (при этом компоненты в систему устанавливаются):
http://i58.fastpic.ru/big/2015/0429/1c/12ed4ce94479f20a50da12974a13031c.png
С чем эта проблема связана?
(скину скрипт при необходимости)
R.i.m.s.k.y.
29-04-2015, 19:46
aidynchik, у тебя переменные с версиями обнулены
#define VersionMajor
#define VersionMinor
#define VersionRevision
#define VersionBuild
OldGamer, залил на говнохостинг - сиди жди у моря погоды
OldGamer
29-04-2015, 20:14
R.i.m.s.k.y., заменил ссылку.
R.i.m.s.k.y.
29-04-2015, 20:22
OldGamer, потому что в скрипте обращаешься к несуществующему элементу
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.