Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 9]


Страниц : 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

nik1967
04-11-2019, 11:26
niksan29,

[Setup]
AppName=My programm
AppVerName=My programm v1.1
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppName")}_is1,Path|{pf}\{#SetupSetting("AppName")}}

boss911
04-11-2019, 16:42
чтобы инсталлер, после хотя бы одной установки, в дальнейшем предлагал установку в тот же каталог, что, и ранее »
По умолчанию, Inno Setup всегда использует каталог предыдущей установки (UsePreviousAppDir=yes), то есть, дополнительно для этого ничего делать не нужно, при условии, если вы не меняли дефолтное значение параметров UsePreviousAppDir, CreateUninstallRegKey и Uninstallable в секции [Setup].

Все, что я вам порекомендую сделать, это включить постоянное отображение страницы выбора папки назначения:
[Setup]
DisableDirPage=no
- по умолчанию значение 'auto' - страница отключается при повторной установке приложения.

niksan29
05-11-2019, 08:19
nik1967, как сказал товарищ
boss911, inno путь по умолчанию,вроде как и так запоминает, позвольте узнать,в чем отличие кода который привели Вы?
И ещё вопрос, а если перед установкой новой версии(того что ставим инсталлером, созданным с помощью inno), старую удаляем, то Inno в таком случае будет помнить путь, или нет?
И, спасибо за быстрые ответы;)

boss911
05-11-2019, 10:09
в чем отличие кода который привели Вы? »
В том, что ни каких каких изменений по сути проводить не нужно, так как это штатная ситуация инсталлятора, работает по умолчанию. Короче, указывать в DefaultDirName штатный параметр 'Path' в ветке реестра Uninstall - лишнее, имхо, но можно и так, только зачем.

если перед установкой новой версии, старую удаляем, то Inno в таком случае будет помнить путь, или нет? »
Нет. При деинсталляции штатным деинсталлятором, в реестре удаляется запись об установленном продукте, в которой содержится путь, куда был установлен этот продукт.

niksan29
05-11-2019, 13:01
если перед установкой новой При деинсталляции штатным деинсталлятором, в реестре удаляется запись об установленном продукте, в которой содержится путь, куда был установлен этот продукт.
А вот это, как то можно обойти?
По сути как раз, это самая важная задача: это чтобы этого не происходило, т.к перед установкой обновления, обязательно надо удалять старую версию...
А т.к обновления будут выходить досточно часто, то каждый раз выбирать каталог установки по новой будет не совсем удобно, тем более инсталлеров при обновлении будет около 5-7 разово(данные разбиты по регионам, каждый устанавливает необходимые по одному, или же по очереди все).

boss911
06-11-2019, 00:05
т.к перед установкой обновления, обязательно надо удалять старую версию... »
Нужно больше информации, сейчас многое не ясно, посему куча вопрсов. У вас есть некий основной установленный продукт, который нужно обновлять? Что за тип обновлений, это обновление программных файлов основного ПО до новой версии или обновление некой базы/ресурсов для этого ПО? Обновления выпускаются отдельным инсталляционным пакетом или в виде полного дистрибутива ПО с уже обновленными в нем компонентами? С какой целью сначала нужно удалить старую версию обновлений (или все ПО?), перед установкой новой версии обновлений? Обновления ставятся в отдельный каталог, это строгий путь? Чем больше информации, тем лучше, на гадание и выпрашивание тут ни у кого нет времени.

niksan29
06-11-2019, 11:11
База данных для ПО, отдельные инсталляционные пакеты около 7(число может меняться) штук , количество необходимых пакетов выбирает пользователь(исходя из его требований/желаний), может быть и 1 из 7 а может и все 7...
Уделяется старые версии с той целью, чтобы каталог очищался и не было конфликтов после установки новой версии , т.к некоторые файлы просто могут отсутствовать в новой версии, соответственно если перед обновлением не почистить каталог, то они(старые старые файлы, которых теперь в обновление нет) останутся и будут мешать...
Обновление может ставиться в любой каталог и уже потом, в самом ПО указывается путь до базы и сохраняется...

boss911
06-11-2019, 18:24
niksan29

На всякий случай уточню, вам нужно, чтобы при установке очередного обновления (отдельный инсталляционный пакет), путь для установки был аналогичен тому, куда было установлено предыдущее обновление, при этом, каталог назначения должен быть очищен перед установкой нового обновления? Тогда пропишите в скрипте обновления следующие:
[InstallDelete]
Name: {app}\Base; Type: filesandordirs
Таким образом, каждое новое обновление можете ставить поверх предыдущего, то есть без предварительной деинсталляции предыдущего, оно сначала удалит в каталоге назначения указанную папку со всем содержимым, только потом начнется установка/распаковка. Например, для установки обновления указан путь "%ProgramFiles%\My Program", тогда оно сначала удалит "%ProgramFiles%\My Program\Base" со всем содержимым, потом начнет устанавливать. Предупреждаю (!), никогда не указывайте для удаления каталог "{app}", так как при не правильных действиях пользователя, может произойти не поправимое, всегда указывайте конкретную конечную папку/файл для удаления, чем уникальней имя, тем лучше.

habib2302
07-11-2019, 12:32
Доброе время суток. Может будет у кого нибудь желание и время переделать скрипт сделанный под IS Ultra под стандартную версию IS v6.x
https://drive.google.com/file/d/1OJGJ1ntXHg87RBGAyCMwxBqX3VCE7qTJ/view?usp=sharing
Просто хочу перейти на стандартную версию, а чтобы довести до рабочего состояния ума не хватает

El Sanchez
10-11-2019, 15:01
хочу перейти на стандартную версию, а чтобы довести до рабочего состояния ума не хватает »
habib2302, пробуйте:

#define AppName "HxD Hex Editor"
#define AppVersion "2.3"

[Setup]
AppName={#AppName}
AppVerName={#AppName} {#AppVersion}
AppId=HxD
AppVersion={#AppVersion}
AppCopyright=Xabib © 2019
AppPublisher=Mael Horz
AppPublisherURL=https://mh-nexus.de/
AppSupportURL=https://mh-nexus.de/hxd/
AppUpdatesURL=https://mh-nexus.de/hxd/
AllowNoIcons=yes
DefaultDirName={code:GetDefaultDirName}\HxD
DefaultGroupName={#AppName}
DisableWelcomePage=yes
DisableReadyPage=yes
DisableFinishedPage=yes
DirExistsWarning=no
PrivilegesRequiredOverridesAllowed=dialog
SetupIconFile=Install.ico
UninstallDisplayIcon={code:GetMainExeFileName}
UninstallDisplayName={#AppName} {#AppVersion}
OutputBaseFilename={#AppName} {#AppVersion} RePack (& Portable) by Xabib
VersionInfoDescription={#AppName} RePack by Xabib
VersionInfoVersion={#AppVersion}
Compression=lzma2/ultra64
SolidCompression=true
InternalCompressLevel=ultra64
LZMADictionarySize=65536
LZMAMatchFinder=BT
LZMANumFastBytes=273
ArchitecturesInstallIn64BitMode=x64
Uninstallable=not IsInPortableMode
WizardSmallImageFile=WizardSmallImage0.bmp

[Languages]
Name: enu; MessagesFile: compiler:default.isl
Name: rus; MessagesFile: compiler:Languages\russian.isl

[Messages]
BeveledLabel=RePack by Xabib
SelectLanguageTitle={#AppName}

[CustomMessages]
enu.CreateConfigShowOptions=Show options window (when finishing install)
enu.CreateDefaultConfig=Create default configuration
enu.ForbiddenDirMessage=In portable mode, %1 should not be installed in "Program Files" or similar system directories.
enu.InstallModePageCaption=Pick Installation Mode
enu.InstallModePageDescription=Do you prefer integration into Windows or a portable installation?
enu.InstallModePageNormalOption=Normal - Integrates into Windows
enu.InstallModePagePortableOption=Portable - Supports removeable drives (e.g., USB pen drives)
enu.InstallModePageSubCaption=Choose a normal installation that integrates into Windows (e.g., Startmenu, optional Explorer context menu), or a portable installation that can run on any compatible Windows machine.
enu.LanguageFilesComponent=Languages
enu.OpenInstallFolderAfterInstall=Open installation target folder
enu.ProgramFilesComponent=Program Files
enu.StatusRunHxDToCreateConfigFile=Create configuration file...
enu.TaskConfigurationFile=Configuration file:
enu.WriteProtectConfig=Make readonly
enu.PortableButtonInstall=&Unpack
rus.CreateConfigShowOptions=Показать окно параметров (после завершения установки)
rus.CreateDefaultConfig=Создать конфигурацию по умолчанию
rus.ForbiddenDirMessage=В портативном режиме %1 не следует устанавливать в «Program Files» или аналогичных системных каталогах.
rus.InstallModePageCaption=Выберите тип установки
rus.InstallModePageDescription=Предпочитаете интеграцию в Windows или портативную версию?
rus.InstallModePageNormalOption=Нормальная - интеграция в Windows
rus.InstallModePagePortableOption=Портативная - поддерживает переносимые устройства (USB/HDD)
rus.InstallModePageSubCaption=Выберите нормальный тип для установки программы в Windows (добавление в меню Пуск, опционально в контекстное меню) или портативную для работы программы на любом ПК, совместимым с Windows
rus.LanguageFilesComponent=Языки
rus.OpenInstallFolderAfterInstall=Открыть папку установки
rus.ProgramFilesComponent=Program Files
rus.StatusRunHxDToCreateConfigFile=Создать файл конфигурации...
rus.TaskConfigurationFile=Файл конфигурации:
rus.WriteProtectConfig=Сделать доступным только для чтения
rus.PortableButtonInstall=&Распаковать

[Files]
Source: {app}\HxD32_enu.exe; DestDir: {app}; DestName: HxD.exe; Languages: enu; Flags: replacesameversion; Check: not IsInPortableMode and not IsWin64
Source: {app}\HxD32_enu.exe; DestDir: {app}; DestName: HxD32.exe; Languages: enu; Flags: replacesameversion; Check: IsInPortableMode
Source: {app}\HxD64_enu.exe; DestDir: {app}; DestName: HxD.exe; Languages: enu; Flags: replacesameversion; Check: not IsInPortableMode and IsWin64
Source: {app}\HxD64_enu.exe; DestDir: {app}; DestName: HxD64.exe; Languages: enu; Flags: replacesameversion; Check: IsInPortableMode and IsWin64
Source: {app}\HxD32_rus.exe; DestDir: {app}; DestName: HxD.exe; Languages: rus; Flags: replacesameversion; Check: not IsInPortableMode and not IsWin64
Source: {app}\HxD32_rus.exe; DestDir: {app}; DestName: HxD32.exe; Languages: rus; Flags: replacesameversion; Check: IsInPortableMode
Source: {app}\HxD64_rus.exe; DestDir: {app}; DestName: HxD.exe; Languages: rus; Flags: replacesameversion; Check: not IsInPortableMode and IsWin64
Source: {app}\HxD64_rus.exe; DestDir: {app}; DestName: HxD64.exe; Languages: rus; Flags: replacesameversion; Check: IsInPortableMode and IsWin64

[Registry]
Root: HKCR32; Subkey: *\shell\HxD; Flags: uninsdeletekey dontcreatekey
Root: HKCR32; Subkey: *\shell\HxDReadonly; Flags: uninsdeletekey dontcreatekey
Root: HKCR64; Subkey: *\shell\HxD; Check: IsWin64; Flags: uninsdeletekey dontcreatekey
Root: HKCR64; Subkey: *\shell\HxDReadonly; Check: IsWin64; Flags: uninsdeletekey dontcreatekey

[Run]
Filename: {code:GetMainExeFileName}; Parameters: {code:GetHxDConfigParams}; StatusMsg: {cm:StatusRunHxDToCreateConfigFile}; Check: IsInPortableMode
Filename: {code:GetMainExeFileName}; Description: {cm:LaunchProgram,{#AppName}}; Flags: postinstall skipifsilent nowait; Check: not IsInPortableMode
Filename: {app}; Description: {cm:OpenInstallFolderAfterInstall}; Flags: shellexec postinstall skipifsilent nowait; Check: IsInPortableMode

[Icons]
Name: {group}\HxD; Filename: {code:GetMainExeFileName}; Check: not IsInPortableMode
Name: {autoappdata}\Microsoft\Internet Explorer\Quick Launch\HxD; Filename: {code:GetMainExeFileName}; Tasks: quicklaunchicon; Check: not IsInPortableMode
Name: {autodesktop}\HxD; Filename: {code:GetMainExeFileName}; Tasks: desktopicon; Check: not IsInPortableMode

[Tasks]
Name: createdefaultconfig; Description: {cm:CreateDefaultConfig}; GroupDescription: {cm:TaskConfigurationFile}; Flags: exclusive; Check: IsInPortableMode
Name: createconfigshowoptions; Description: {cm:CreateConfigShowOptions}; GroupDescription: {cm:TaskConfigurationFile}; Flags: exclusive unchecked; Check: IsInPortableMode
Name: makeconfigreadonly; Description: {cm:WriteProtectConfig}; GroupDescription: {cm:TaskConfigurationFile}; Flags: unchecked; Check: IsInPortableMode
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Check: not IsInPortableMode
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Check: not IsInPortableMode

[Code]
var
InputOptionPage: TInputOptionWizardPage;

function IsInPortableMode: Boolean;
begin
Result := InputOptionPage.Values[1];
end;

function GetDefaultDirName(const AParam: string): string;
begin
if ExpandConstant('{param:portable|0}') = '1' then
Result := ExpandConstant('{userdesktop}') else
Result := ExpandConstant('{autopf}');
end;

function GetMainExeFileName(const AParam: string): string;
begin
if not IsInPortableMode then
Result := ExpandConstant('{app}\HxD.exe')
else if not IsWin64 then
Result := ExpandConstant('{app}\HxD32.exe')
else
Result := ExpandConstant('{app}\HxD64.exe');
end;

function GetHxDConfigParams(const AParam: string): string;
begin
Result := '/chooselang:' + ActiveLanguage;
if IsTaskSelected('createdefaultconfig') then
begin
Result := Result + ' /createdefaultconfig:';
if IsTaskSelected('makeconfigreadonly') then
Result := Result + 'readonly' else
Result := Result + 'normal';
end else
if IsTaskSelected('createconfigshowoptions') then
begin
Result := Result + ' /createconfig:';
if IsTaskSelected('makeconfigreadonly') then
Result := Result + 'readonly' else
Result := Result + 'normal';
end;
end;

function IsForbiddenDir(const ADir: string): Boolean;
begin
Result := IsAdminInstallMode and
((not IsWin64 and (Pos(ExpandConstant('{win}'), ADir) = 1)) or
(not IsWin64 and (Pos(ExpandConstant('{commonpf32}'), ADir) = 1)) or
(IsWin64 and (Pos(ExpandConstant('{commonpf64}'), ADir) = 1)));
end;

procedure InstallModeListBoxClick(Sender: TObject);
begin
if IsInPortableMode and (CompareText(WizardDirValue, ExpandConstant('{autopf}\HxD')) = 0) then
WizardForm.DirEdit.Text := ExpandConstant('{userdesktop}\HxD')
else if not IsInPortableMode and (CompareText(WizardDirValue, ExpandConstant('{userdesktop}\HxD')) = 0) then
WizardForm.DirEdit.Text := ExpandConstant('{autopf}\HxD');
end;

procedure CreateInstallModePage;
begin
InputOptionPage := CreateInputOptionPage(wpWelcome, ExpandConstant('{cm:InstallModePageCaption}'),
ExpandConstant('{cm:InstallModePageDescription}'), ExpandConstant('{cm:InstallModePageSubCaption}'), True, False);
InputOptionPage.Add(ExpandConstant('{cm:InstallModePageNormalOption}'));
InputOptionPage.Add(ExpandConstant('{cm:InstallModePagePortableOption}'));
InputOptionPage.Values[1] := ExpandConstant('{param:portable|0}') = '1';
InputOptionPage.Values[0] := not InputOptionPage.Values[1];
InputOptionPage.CheckListBox.OnClickCheck := @InstallModeListBoxClick;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
wpSelectTasks:
begin
if not IsInPortableMode then
WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall) else
WizardForm.NextButton.Caption := ExpandConstant('{cm:PortableButtonInstall}');
end;
end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := True;
case CurPageId of
wpSelectDir:
if IsInPortableMode then
begin
Result := not IsForbiddenDir(WizardDirValue);
if not Result then
MsgBox(ExpandConstant('{cm:ForbiddenDirMessage,{#AppName}}'), mbError, MB_OK);
end;
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
Result := False;
case PageID of
wpSelectProgramGroup:
Result := IsInPortableMode;
end;
end;

procedure InitializeWizard;
begin
CreateInstallModePage;
end;

generator324
11-11-2019, 17:52
Подскажите, а можно при написании Inno-установщика как-нибудь импортировать .inf-файл (установка драйвера) для своего инсталлятора?

habib2302
11-11-2019, 22:06
generator324, читаем шапку

generator324
12-11-2019, 08:20
habib2302,
Благодарю, вы имеете ввиду это: http://forum.oszone.net/post-1674976-1599.html ?
Уж очень много всего в шапку понатолкано, глаза смыливаются :(
Про devcon знаю, но если есть devcon, то зачем тогда вообще Inno Setup? Драйвера через devcon просто ставятся из командной строки (если знать HWID устройства), никакой Inno Setup не нужен. Вопрос-то был именно в том, что я, допустим, HWID не знаю совсем (только семейство), но есть .inf-файл в котором это всё перечисленно. И можно ли инжектировать этот .inf напрямую в Inno Setup. Как, например, древний ISTool делал с .reg-файлами - просто добавлял в инсталлятор...

habib2302
12-11-2019, 08:30
generator324, только через innoide в разделе ini есть кнопка импорта ini файлов

generator324
12-11-2019, 08:39
Так я, вроде про .inf писал. ini - совсем "другие яйца", не?

habib2302
12-11-2019, 09:20
generator324,

https://b.radikal.ru/b11/1911/de/1a154d2038fd.png (https://b.radikal.ru/b32/1911/2a/d6208e6fa50c.jpg)

generator324
12-11-2019, 09:54
habib2302,
Ну, хорошо - он (innoide) походу разницу между .inf / . ini не делает, импортирует "всё, что дают" :ok: . А работать-то это как будет? И будет ли ВООБЩЕ? All Files *.* я могу выбрать и в ISTool - вообще, "затолкать чего-то куда-то" - дело не хитрое...
Меня интересует, если так можно выразится, "обработчик" .inf-файла, прописывающий в скрипт .iss (коль уж тут мы ведём речь о Inno Setup) правильный порядок работы с тем же .inf-файлом. Скажем, если ISTool производит импорт .reg-файла, она его и прописывает в скрипт .iss соответственно; значения потом при установке добавляются в реестр.
А тут чего?

El Sanchez
12-11-2019, 10:54
Меня интересует, если так можно выразится, "обработчик" .inf-файла, прописывающий в скрипт .iss (коль уж тут мы ведём речь о Inno Setup) правильный порядок работы с тем же .inf-файлом »
generator324, без сторонних утилит в Inno Setup можно устанавливать только 32-разрядные драйверы через setupapi.dll, например. 32-разрядный код не может устанавливать 64-разрядные драйверы. Поэтому с devcon проще.

generator324
12-11-2019, 11:16
без сторонних утилит в Inno Setup можно устанавливать только 32-разрядные драйверы через setupapi.dll, например. 32-разрядный код не может устанавливать 64-разрядные драйверы. »
Мне, в принципе, и нужен был 32-разрядный драйвер RS-485 установить. Просто в автоматическом режиме ;)
Поэтому с devcon проще. »
Никто и не спорит ;). Но, повторюсь, нужно знать HWID устройства. А если я его (HWID) не знаю? Вот и хотелось автоматизировать...
А так, повторюсь опять же: и Inno Setup не нужен - просто командная строка (devcon). Но это если знать HWID, что известно не всегда...

ЗЫ. InnoIDE - коммерческий продукт? Что-то я не понял: при попытке скачать перекидывают куда-то :o

habib2302
12-11-2019, 15:23
generator324, попробуйте обратиться в http://autoit-script.ru/




© OSzone.net 2001-2012