Скрипты Inno Setup. Помощь и советы [часть 9]
Вложений: 4
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах: Скрипты Inno Setup. Помощь и советы [часть 6] | Файл 152035 Скрипты Inno Setup. Помощь и советы [часть 7] | Файл 152036 Скрипты Inno Setup. Помощь и советы [часть 8] | Файл 152037 |
Привет всем. Как можно определить системный диск ({sd}) ssd или hdd.
Что-то вроде этого: Код:
if ssd then Цитата:
Хмм... нашёл пока на AutoIt3 (в.3.3.14.2) подогнал под себя, вроде работает. Может кому пригодится для установки Windows. Код:
#NoTrayIcon |
Цитата:
Файл 152052 |
Цитата:
|
Вложений: 3
Секция CODE
пусто
А также второй вопрос: сделал, как вы сказали, сместил список компонентов и их превью, но все равно половину вкладки выбора типа установки перекрывает. Скорее всего это место было для инструкции, пример: "выберите из списка нужный компонент....", если это так, то можно ли это убрать? Заранее спасибо. |
Цитата:
Цитата:
Код:
Label1 := TLabel.Create(WizardForm); Код:
Image1 := TBitmapImage.Create(WizardForm); Код:
WizardForm.SelectDirBitmapImage.Hide; |
Вложений: 1
P.S: за остальное же спасибо, слепой, что с меня взять... Секция CODE
пусто
|
Цитата:
вот добавьте это в InitializeWizard Код:
WizardForm.DirBrowseButton.SetBounds(ScaleX(342),ScaleY(36),ScaleX(75),ScaleY(23)); |
P.S: смотрел статью, опять же пытался - ничего не получилось. Секция Code
Пусто |
TheLeon, вот другой вариант. потому что скрипт из этой статьи в виде всплывающего уведомления
Код:
[Setup] |
Вложений: 1
Секция code
пусто
|
TheLeon, дайте мне полный скрипт вместе с картинками
|
Цитата:
Код:
[Setup] |
Вложений: 1
Секция CODE
пусто
|
Цитата:
Код:
var Цитата:
Код:
var |
Цитата:
Скрытый текст
Код:
[Setup] |
El Sanchez,
Цитата:
|
El Sanchez, здравствуйте, сможете ли помочь с задуманным?
.ISS
пусто
|
Цитата:
Скрытый текст
Код:
[Setup] Цитата:
Скрытый текст
Код:
[Setup] Цитата:
Скрытый текст
Код:
if Index = 0 then Цитата:
|
Здраствуйте, ув. форумчане. Подскажите пож. Возникла следующая проблема:
1. Создана кастомная страница Код:
var Код:
var |
ROMKA-1977,
Скрытый текст
Код:
[Setup] |
Вложений: 1
nik1967, в вашем примере панель отображается на кастомной странице. Мне же необходимо создать её на WizardForm но так чтобы она отображалась при кастомной странице, примерно так:
http://forum.oszone.net/attachment.p...1&d=1524651856 Вслучае стандартных страниц я указывал так : procedure CurPageChanged(CurPageID: Integer); begin Test_pnl.Hide; case CurPageID of wpInfoBefore: Test_pnl.Show; end; end; Из справки Inno Setup: Значения PageID для определенных ранее страниц мастера wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished Как же вывести панель на WizardForm только при отображении кастомной страницы ? |
ROMKA-1977,
Скрытый текст
Код:
[Setup] |
Здравствуйте, уважаемые форумчане OSZone.net.
- - 2. Проблема с установкой дополнений на игру, которая расположена в Program Files, прогресс бар в самом установщике показывает, что идёт установка, но, перейдя в папку игры, после окончания, ничего не изменилось/не добавилось. Сам скрипт(.iss)
[Setup] AppName=Vehicles for SpinTires™ AppVersion=1.0 AllowNoIcons=yes AppPublisher=Leon DefaultDirName=C:\Program Files (x86)\Spintires DisableProgramGroupPage=auto DisableReadyPage=yes DirExistsWarning=no DisableWelcomePage=yes DisableFinishedPage=no OutputBaseFilename=Vehicles for Spintires OutputDir=C:\Users\Unknown\Documents\Inno Setup\Examples LicenseFile=licence.rtf SetupIconFile=images\SetupIcon.ico WizardSmallImageFile=images\WizardSmallImage.bmp WizardImageFile=images\WizardImage.bmp PrivilegesRequired=admin Compression=zip/9 InternalCompressLevel=ultra CompressionThreads=2 SolidCompression=True CreateUninstallRegKey=no Uninstallable=no [Languages] Name: "RU"; MessagesFile: "Russian.isl" [Types] Name: full; Description: Полная установка; Name: iscustom; Description: Выборочная установка; [Components] Name: CAR1; Description: {code:CompHelper|Bentley Continental Supersports}; Types: full; Name: CAR2; Description: {code:CompHelper|BMW X5 M}; Types: full; Name: CAR3; Description: {code:CompHelper|Chevrolet Silverado 2500}; Types: full; Name: CAR4; Description: {code:CompHelper|Fiat Ducato (250)}; Types: full; Name: CAR5; Description: {code:CompHelper|Ford Raptor Pre-Runner}; Types: full; Name: CAR6; Description: {code:CompHelper|Hummer H3}; Types: full; Name: CAR7; Description: {code:CompHelper|Jeep Grand Cherokee}; Types: full; Name: CAR8; Description: {code:CompHelper|LADA Vesta (ВАЗ-2180)}; Types: full; Name: CAR9; Description: {code:CompHelper|MAN TGX}; Types: full; Name: CAR10; Description: {code:CompHelper|Mercedes-Benz G65 AMG}; Types: full; Name: CAR11; Description: {code:CompHelper|Nissan Pathfinder (R51)}; Types: full; Name: CAR12; Description: {code:CompHelper|Range Rover Evoque LRX}; Types: full; Name: CAR13; Description: {code:CompHelper|Range Rover Vogue (L405)}; Types: full; Name: CAR14; Description: {code:CompHelper|Subaru Impreza STI}; Types: full; Name: CAR15; Description: {code:CompHelper|Toyota Hilux Tonka Concept 2017}; Types: full; Name: CAR16; Description: {code:CompHelper|Volkswagen Touareg}; Types: full; Name: CAR17; Description: {code:CompHelper|Volvo FM}; Types: full; Name: CAR18; Description: {code:CompHelper|Volvo XC90}; Types: full; Name: CAR19; Description: {code:CompHelper|ВАЗ 2103 Жигули}; Types: full; Name: CAR20; Description: {code:CompHelper|ВАЗ-21213 Нива}; Types: full; [Dirs] Name: "{app}\Vehicles"; Permissions: everyone-full [Files] ;------------------------------Bentley Continental Supersports------------------------------ Source: "Files\Bentley Continental Supersports\*"; DestDir: "{app}\Vehicles"; Flags: ignoreversion; Components: CAR1; Source: "Files\Bentley Continental Supersports\billboards\trucks\*"; DestDir: "{app}\Vehicles\billboards\trucks"; Flags: ignoreversion; Components: CAR1; Source: "Files\Bentley Continental Supersports\classes\trucks\*"; DestDir: "{app}\Vehicles\classes\trucks"; Flags: ignoreversion; Components: CAR1; Source: "Files\Bentley Continental Supersports\classes\wheels\*"; DestDir: "{app}\Vehicles\classes\wheels"; Flags: ignoreversion; Components: CAR1; Source: "Files\Bentley Continental Supersports\sounds\engine\bentley_porsche\*"; DestDir: "{app}\Vehicles\sounds\engine\bentley_porsche"; Flags: ignoreversion; Components: CAR1; ;------------------------------------------BMW X5 M----------------------------------------- Source: "Files\BMW X5 M\*"; DestDir: "{app}\Vehicles"; Flags: ignoreversion; Components: CAR2; Source: "Files\BMW X5 M\billboards\trucks\*"; DestDir: "{app}\Vehicles\billboards\trucks"; Flags: ignoreversion; Components: CAR2; Source: "Files\BMW X5 M\classes\trucks\*"; DestDir: "{app}\Vehicles\classes\trucks"; Flags: ignoreversion; Components: CAR2; Source: "Files\BMW X5 M\classes\wheels\*"; DestDir: "{app}\Vehicles\classes\wheels"; Flags: ignoreversion; Components: CAR2; Source: "Files\BMW X5 M\sounds\*"; DestDir: "{app}\Vehicles\sounds"; Flags: ignoreversion; Components: CAR2; ;---------------------------------Chevrolet Silverado 2500---------------------------------- Source: "Files\Chevrolet Silverado 2500\*"; DestDir: "{app}\Vehicles"; Flags: ignoreversion; Components: CAR3; Source: "Files\Chevrolet Silverado 2500\billboards\trucks\*"; DestDir: "{app}\Vehicles\billboards\trucks"; Flags: ignoreversion; Components: CAR3; Source: "Files\Chevrolet Silverado 2500\classes\trucks\*"; DestDir: "{app}\Vehicles\classes\trucks"; Flags: ignoreversion; Components: CAR3; Source: "Files\Chevrolet Silverado 2500\classes\wheels\*"; DestDir: "{app}\Vehicles\classes\wheels"; Flags: ignoreversion; Components: CAR3; Source: "Files\Chevrolet Silverado 2500\sounds\engine\*"; DestDir: "{app}\Vehicles\sounds\engine"; Flags: ignoreversion; Components: CAR3; Source: "Files\Chevrolet Silverado 2500\textures\trucks\*"; DestDir: "{app}\Vehicles\textures\trucks"; Flags: ignoreversion; Components: CAR3; ;-------------------------------------Fiat Ducato (250)------------------------------------- Source: "Files\Fiat Ducato (250)\billboards\trucks\*"; DestDir: "{app}\Vehicles\billboards\trucks"; Flags: ignoreversion; Components: CAR4; Source: "Files\Fiat Ducato (250)\classes\trucks\*"; DestDir: "{app}\Vehicles\classes\trucks"; Flags: ignoreversion; Components: CAR4; Source: "Files\Fiat Ducato (250)\classes\wheels\*"; DestDir: "{app}\Vehicles\classes\wheels"; Flags: ignoreversion; Components: CAR4; Source: "Files\Fiat Ducato (250)\meshes\trucks\*"; DestDir: "{app}\Vehicles\meshes\trucks"; Flags: ignoreversion; Components: CAR4; Source: "Files\Fiat Ducato (250)\meshes\wheels\*"; DestDir: "{app}\Vehicles\meshes\wheels"; Flags: ignoreversion; Components: CAR4; Source: "Files\Fiat Ducato (250)\sounds\mentura\*"; DestDir: "{app}\Vehicles\sounds\mentura"; Flags: ignoreversion; Components: CAR4; Source: "Files\Fiat Ducato (250)\textures\trucks\police\*"; DestDir: "{app}\Vehicles\textures\trucks\police"; Flags: ignoreversion; Components: CAR4; ;----------------------------------Ford Raptor Pre-Runner----------------------------------- Source: "Files\Ford Raptor Pre-Runner\*"; DestDir: "{app}\Vehicles"; Flags: ignoreversion; Components: CAR5; Source: "Files\Ford Raptor Pre-Runner\billboards\trucks\*"; DestDir: "{app}\Vehicles\billboards\trucks"; Flags: ignoreversion; Components: CAR5; Source: "Files\Ford Raptor Pre-Runner\classes\trucks\*"; DestDir: "{app}\Vehicles\classes\trucks"; Flags: ignoreversion; Components: CAR5; Source: "Files\Ford Raptor Pre-Runner\classes\wheels\*"; DestDir: "{app}\Vehicles\classes\wheels"; Flags: ignoreversion; Components: CAR5; Source: "Files\Ford Raptor Pre-Runner\sounds\engine\SID-V8\*"; DestDir: "{app}\Vehicles\sounds\engine\SID-V8"; Flags: ignoreversion; Components: CAR5; ;-----------------------------------------Hummer H3----------------------------------------- Source: "Files\Hummer H3\*"; DestDir: "{app}\Vehicles"; Flags: ignoreversion; Components: CAR6; Source: "Files\Hummer H3\billboards\trucks\*"; DestDir: "{app}\Vehicles\billboards\trucks"; Flags: ignoreversion; Components: CAR6; Source: "Files\Hummer H3\classes\trucks\*"; DestDir: "{app}\Vehicles\classes\trucks"; Flags: ignoreversion; Components: CAR6; Source: "Files\Hummer H3\classes\wheels\*"; DestDir: "{app}\Vehicles\classes\wheels"; Flags: ignoreversion; Components: CAR6; Source: "Files\Hummer H3\sounds\engine\*"; DestDir: "{app}\Vehicles\sounds\engine"; Flags: ignoreversion; Components: CAR6; ;------------------------------------Jeep Grand Cherokee------------------------------------ Source: "Files\Jeep Grand Cherokee\*"; DestDir: "{app}\Vehicles"; Flags: ignoreversion; Components: CAR7; Source: "Files\Jeep Grand Cherokee\billboards\trucks\*"; DestDir: "{app}\Vehicles\billboards\trucks"; Flags: ignoreversion; Components: CAR7; Source: "Files\Jeep Grand Cherokee\classes\trucks\*"; DestDir: "{app}\Vehicles\classes\trucks"; Flags: ignoreversion; Components: CAR7; Source: "Files\Jeep Grand Cherokee\classes\wheels\*"; DestDir: "{app}\Vehicles\classes\wheels"; Flags: ignoreversion; Components: CAR7; Source: "Files\Jeep Grand Cherokee\sounds\engine\V8\*"; DestDir: "{app}\Vehicles\sounds\engine\V8"; Flags: ignoreversion; Components: CAR7; ;-----------------------------------LADA Vesta (ВАЗ-2180)----------------------------------- Source: "Files\LADA Vesta (ВАЗ-2180)\*"; DestDir: "{app}\Vehicles"; Flags: ignoreversion; Components: CAR8; Source: "Files\LADA Vesta (ВАЗ-2180)\billboards\trucks\*"; DestDir: "{app}\Vehicles\billboards\trucks"; Flags: ignoreversion; Components: CAR8; Source: "Files\LADA Vesta (ВАЗ-2180)\classes\trucks\*"; DestDir: "{app}\Vehicles\classes\trucks"; Flags: ignoreversion; Components: CAR8; Source: "Files\LADA Vesta (ВАЗ-2180)\classes\wheels\*"; DestDir: "{app}\Vehicles\classes\wheels"; Flags: ignoreversion; Components: CAR8; Source: "Files\LADA Vesta (ВАЗ-2180)\sounds\laaadaaa_veeesttas\*"; DestDir: "{app}\Vehicles\sounds\laaadaaa_veeesttas"; Flags: ignoreversion; Components: CAR8; Source: "Files\LADA Vesta (ВАЗ-2180)\sounds\laaadaaa_veeesttas\niZZmsa\*"; DestDir: "{app}\Vehicles\sounds\laaadaaa_veeesttas\niZZmsa"; Flags: ignoreversion; Components: CAR8; ;-------------------------------------------MAN TGX----------------------------------------- Source: "Files\MAN TGX\*"; DestDir: "{app}\Vehicles"; Flags: ignoreversion; Components: CAR9; Source: "Files\MAN TGX\billboards\trucks\*"; DestDir: "{app}\Vehicles\billboards\trucks"; Flags: ignoreversion; Components: CAR9; Source: "Files\MAN TGX\classes\trucks\*"; DestDir: "{app}\Vehicles\classes\trucks"; Flags: ignoreversion; Components: CAR9; Source: "Files\MAN TGX\classes\wheels\*"; DestDir: "{app}\Vehicles\classes\wheels"; Flags: ignoreversion; Components: CAR9; Source: "Files\MAN TGX\sounds\*"; DestDir: "{app}\Vehicles\sounds"; Flags: ignoreversion; Components: CAR9; ;-----------------------------------Mercedes-Benz G65 AMG----------------------------------- Source: "Files\Mercedes-Benz G65 AMG\*"; DestDir: "{app}\Vehicles"; Flags: ignoreversion; Components: CAR11; Source: "Files\Mercedes-Benz G65 AMG\billboards\trucks\*"; DestDir: "{app}\Vehicles\billboards\trucks"; Flags: ignoreversion; Components: CAR10; Source: "Files\Mercedes-Benz G65 AMG\classes\trucks\*"; DestDir: "{app}\Vehicles\classes\trucks"; Flags: ignoreversion; Components: CAR10; Source: "Files\Mercedes-Benz G65 AMG\classes\wheels\*"; DestDir: "{app}\Vehicles\classes\wheels"; Flags: ignoreversion; Components: CAR10; Source: "Files\Mercedes-Benz G65 AMG\meshes\trucks\*"; DestDir: "{app}\Vehicles\meshes\trucks"; Flags: ignoreversion; Components: CAR10; Source: "Files\Mercedes-Benz G65 AMG\meshes\wheels\*"; DestDir: "{app}\Vehicles\meshes\wheels"; Flags: ignoreversion; Components: CAR10; Source: "Files\Mercedes-Benz G65 AMG\sounds\*"; DestDir: "{app}\Vehicles\sounds"; Flags: ignoreversion; Components: CAR11; Source: "Files\Mercedes-Benz G65 AMG\textures\merc_g65\*"; DestDir: "{app}\Vehicles\textures\merc_g65"; Flags: ignoreversion; Components: CAR10; ;-----------------------------------Nissan Pathfinder (R51)--------------------------------- Source: "Files\Nissan Pathfinder (R51)\*"; DestDir: "{app}\Vehicles"; Flags: ignoreversion; Components: CAR11; Source: "Files\Nissan Pathfinder (R51)\billboards\trucks\*"; DestDir: "{app}\Vehicles\billboards\trucks"; Flags: ignoreversion; Components: CAR11; Source: "Files\Nissan Pathfinder (R51)\classes\trucks\*"; DestDir: "{app}\Vehicles\classes\trucks"; Flags: ignoreversion; Components: CAR11; Source: "Files\Nissan Pathfinder (R51)\classes\wheels\*"; DestDir: "{app}\Vehicles\classes\wheels"; Flags: ignoreversion; Components: CAR11; Source: "Files\Nissan Pathfinder (R51)\sounds\engine\V1\*"; DestDir: "{app}\Vehicles\sounds\engine\V1"; Flags: ignoreversion; Components: CAR11; Source: "Files\Nissan Pathfinder (R51)\sounds\env\*"; DestDir: "{app}\Vehicles\sounds\env"; Flags: ignoreversion; Components: CAR11; ;-----------------------------------Range Rover Evoque LRX---------------------------------- Source: "Files\Range Rover Evoque LRX\*"; DestDir: "{app}\Vehicles"; Flags: ignoreversion; Components: CAR12; Source: "Files\Range Rover Evoque LRX\billboards\trucks\*"; DestDir: "{app}\Vehicles\billboards\trucks"; Flags: ignoreversion; Components: CAR12; Source: "Files\Range Rover Evoque LRX\classes\trucks\*"; DestDir: "{app}\Vehicles\classes\trucks"; Flags: ignoreversion; Components: CAR12; Source: "Files\Range Rover Evoque LRX\classes\wheels\*"; DestDir: "{app}\Vehicles\classes\wheels"; Flags: ignoreversion; Components: CAR12; Source: "Files\Range Rover Evoque LRX\sounds\engine\*"; DestDir: "{app}\Vehicles\sounds\engine"; Flags: ignoreversion; Components: CAR12; ;---------------------------------Range Rover Vogue (L405)---------------------------------- Source: "Files\Range Rover Vogue (L405)\*"; DestDir: "{app}\Vehicles"; Flags: ignoreversion; Components: CAR13; Source: "Files\Range Rover Vogue (L405)\billboards\trucks\*"; DestDir: "{app}\Vehicles\billboards\trucks"; Flags: ignoreversion; Components: CAR13; Source: "Files\Range Rover Vogue (L405)\classes\trucks\*"; DestDir: "{app}\Vehicles\classes\trucks"; Flags: ignoreversion; Components: CAR13; Source: "Files\Range Rover Vogue (L405)\classes\wheels\*"; DestDir: "{app}\Vehicles\classes\wheels"; Flags: ignoreversion; Components: CAR13; Source: "Files\Range Rover Vogue (L405)\sounds\*"; DestDir: "{app}\Vehicles\sounds"; Flags: ignoreversion; Components: CAR13; ;------------------------------------Subaru Impreza STI------------------------------------- Source: "Files\Subaru Impreza STI\billboards\trucks\*"; DestDir: "{app}\Vehicles\billboards\trucks"; Flags: ignoreversion; Components: CAR14; Source: "Files\Subaru Impreza STI\classes\trucks\*"; DestDir: "{app}\Vehicles\classes\trucks"; Flags: ignoreversion; Components: CAR14; Source: "Files\Subaru Impreza STI\classes\wheels\*"; DestDir: "{app}\Vehicles\classes\wheels"; Flags: ignoreversion; Components: CAR14; Source: "Files\Subaru Impreza STI\meshes\trucks\*"; DestDir: "{app}\Vehicles\meshes\trucks"; Flags: ignoreversion; Components: CAR14; Source: "Files\Subaru Impreza STI\meshes\wheels\*"; DestDir: "{app}\Vehicles\meshes\wheels"; Flags: ignoreversion; Components: CAR14; Source: "Files\Subaru Impreza STI\sounds\enginesti\*"; DestDir: "{app}\Vehicles\sounds\enginesti"; Flags: ignoreversion; Components: CAR14; Source: "Files\Subaru Impreza STI\textures\*"; DestDir: "{app}\Vehicles\textures"; Flags: ignoreversion; Components: CAR14; Source: "Files\Subaru Impreza STI\textures\sti\*"; DestDir: "{app}\Vehicles\textures\sti"; Flags: ignoreversion; Components: CAR14; Source: "Files\Subaru Impreza STI\textures\sub\*"; DestDir: "{app}\Vehicles\textures\sub"; Flags: ignoreversion; Components: CAR14; Source: "Files\Subaru Impreza STI\textures\wh1\*"; DestDir: "{app}\Vehicles\textures\wh1"; Flags: ignoreversion; Components: CAR14; ;------------------------------Toyota Hilux Tonka Concept 2017------------------------------ Source: "Files\Toyota Hilux Tonka Concept 2017\*"; DestDir: "{app}\Vehicles"; Flags: ignoreversion; Components: CAR15; Source: "Files\Toyota Hilux Tonka Concept 2017\_templates\*"; DestDir: "{app}\Vehicles\_templates"; Flags: ignoreversion; Components: CAR15; Source: "Files\Toyota Hilux Tonka Concept 2017\billboards\trucks\*"; DestDir: "{app}\Vehicles\billboards\trucks"; Flags: ignoreversion; Components: CAR15; Source: "Files\Toyota Hilux Tonka Concept 2017\classes\trucks\*"; DestDir: "{app}\Vehicles\classes\trucks"; Flags: ignoreversion; Components: CAR15; Source: "Files\Toyota Hilux Tonka Concept 2017\classes\wheels\*"; DestDir: "{app}\Vehicles\classes\wheels"; Flags: ignoreversion; Components: CAR15; Source: "Files\Toyota Hilux Tonka Concept 2017\sounds\*"; DestDir: "{app}\Vehicles\sounds"; Flags: ignoreversion; Components: CAR15; Source: "Files\Toyota Hilux Tonka Concept 2017\sounds\engine\*"; DestDir: "{app}\Vehicles\sounds\engine"; Flags: ignoreversion; Components: CAR15; Source: "Files\Toyota Hilux Tonka Concept 2017\sounds\env\*"; DestDir: "{app}\Vehicles\sounds\env"; Flags: ignoreversion; Components: CAR15; Source: "Files\Toyota Hilux Tonka Concept 2017\sounds\truck\*"; DestDir: "{app}\Vehicles\sounds\truck"; Flags: ignoreversion; Components: CAR15; Source: "Files\Toyota Hilux Tonka Concept 2017\sounds\engine\V1\*"; DestDir: "{app}\Vehicles\sounds\engine\V1"; Flags: ignoreversion; Components: CAR15; ;------------------------------------Volkswagen Touareg------------------------------------- Source: "Files\Volkswagen Touareg\*"; DestDir: "{app}\Vehicles"; Flags: ignoreversion; Components: CAR16; Source: "Files\Volkswagen Touareg\billboards\trucks\*"; DestDir: "{app}\Vehicles\billboards\trucks"; Flags: ignoreversion; Components: CAR16; Source: "Files\Volkswagen Touareg\classes\trucks\*"; DestDir: "{app}\Vehicles\classes\trucks"; Flags: ignoreversion; Components: CAR16; Source: "Files\Volkswagen Touareg\classes\wheels\*"; DestDir: "{app}\Vehicles\classes\wheels"; Flags: ignoreversion; Components: CAR16; Source: "Files\Volkswagen Touareg\sounds\*"; DestDir: "{app}\Vehicles\sounds"; Flags: ignoreversion; Components: CAR16; ;------------------------------------------Volvo FM----------------------------------------- Source: "Files\Volvo FM\*"; DestDir: "{app}\Vehicles"; Flags: ignoreversion; Components: CAR17; Source: "Files\Volvo FM\billboards\trucks\*"; DestDir: "{app}\Vehicles\billboards\trucks"; Flags: ignoreversion; Components: CAR17; Source: "Files\Volvo FM\classes\trucks\*"; DestDir: "{app}\Vehicles\classes\trucks"; Flags: ignoreversion; Components: CAR17; Source: "Files\Volvo FM\classes\wheels\*"; DestDir: "{app}\Vehicles\classes\wheels"; Flags: ignoreversion; Components: CAR17; Source: "Files\Volvo FM\sounds\*"; DestDir: "{app}\Vehicles\sounds"; Flags: ignoreversion; Components: CAR17; ;-----------------------------------------Volvo XC90---------------------------------------- Source: "Files\Volvo XC90\*"; DestDir: "{app}\Vehicles"; Flags: ignoreversion; Components: CAR18; Source: "Files\Volvo XC90\billboards\trucks\*"; DestDir: "{app}\Vehicles\billboards\trucks"; Flags: ignoreversion; Components: CAR18; Source: "Files\Volvo XC90\classes\trucks\*"; DestDir: "{app}\Vehicles\classes\trucks"; Flags: ignoreversion; Components: CAR18; Source: "Files\Volvo XC90\classes\wheels\*"; DestDir: "{app}\Vehicles\classes\wheels"; Flags: ignoreversion; Components: CAR18; Source: "Files\Volvo XC90\sounds\*"; DestDir: "{app}\Vehicles\sounds"; Flags: ignoreversion; Components: CAR18; ;--------------------------------------ВАЗ 2103 Жигули-------------------------------------- Source: "Files\ВАЗ 2103 Жигули\*"; DestDir: "{app}\Vehicles"; Flags: ignoreversion; Components: CAR19; Source: "Files\ВАЗ 2103 Жигули\billboards\trucks\*"; DestDir: "{app}\Vehicles\billboards\trucks"; Flags: ignoreversion; Components: CAR19; Source: "Files\ВАЗ 2103 Жигули\classes\trucks\*"; DestDir: "{app}\Vehicles\classes\trucks"; Flags: ignoreversion; Components: CAR19; Source: "Files\ВАЗ 2103 Жигули\classes\wheels\*"; DestDir: "{app}\Vehicles\classes\wheels"; Flags: ignoreversion; Components: CAR19; Source: "Files\ВАЗ 2103 Жигули\sounds\LADA1500_nEw\*"; DestDir: "{app}\Vehicles\sounds\LADA1500_nEw"; Flags: ignoreversion; Components: CAR19; ;--------------------------------------Нива (ВАЗ-21213)------------------------------------- Source: "Files\Нива (ВАЗ-21213)\*"; DestDir: "{app}\Vehicles"; Flags: ignoreversion; Components: CAR20; Source: "Files\Нива (ВАЗ-21213)\billboards\trucks\*"; DestDir: "{app}\Vehicles\billboards\trucks"; Flags: ignoreversion; Components: CAR20; Source: "Files\Нива (ВАЗ-21213)\classes\trucks\*"; DestDir: "{app}\Vehicles\classes\trucks"; Flags: ignoreversion; Components: CAR20; Source: "Files\Нива (ВАЗ-21213)\classes\wheels\*"; DestDir: "{app}\Vehicles\classes\wheels"; Flags: ignoreversion; Components: CAR20; Source: "Files\Нива (ВАЗ-21213)\sounds\2106\*"; DestDir: "{app}\Vehicles\sounds\2106"; Flags: ignoreversion; Components: CAR20; ;----------------------------------------Русификатор---------------------------------------- Source: "Files\translate\strings\ru\*"; DestDir: "{app}\Vehicles\strings\ru"; Flags: ignoreversion; ;--------------------------------------Временные файлы-------------------------------------- Source: "images\ad.bmp"; DestDir: "{tmp}"; Flags: dontcopy Source: "images\vehicles\*"; DestDir: "{tmp}"; Flags: dontcopy [code] type TComponentDesc = record Description: String; ImageName: String; Index: Integer; end; var ComponentsInfoImage: TBitmapImage; ComponentHelper: TStringList; CompDescText: TLabel; Image1: TBitmapImage; DelTmp: TNewCheckBox; function CompHelper(Param: string): string; var Image: TBitmap; Index: Integer; begin Result := ''; with TStringList.Create do try StringChangeEx(Param, '|', #13#10, True); Text := Param; if Count = 0 then Exit; if Count > 0 then Index := ComponentHelper.Add(Strings[0]); if Count > 1 then begin if not FileExists(ExpandConstant('{tmp}\') + Strings[1]) then ExtractTemporaryFile(Strings[1]); Image := TBitmap.Create; Image.LoadFromFile(ExpandConstant('{tmp}\') + Strings[1]); ComponentHelper.Objects[Index] := Image; end; Result := ComponentHelper[Index]; finally Free; end; end; function DelTmpCheck(): boolean; begin result := DelTmp.Checked; end; procedure ComponentsListClickCheck(Sender: TObject); begin if not Assigned(Sender) or (TNewCheckListBox(Sender).ItemIndex = -1) then Exit; ComponentsInfoImage.Bitmap.Assign(TBitmap(ComponentHelper.Objects[TNewCheckListBox(Sender).ItemIndex])); end; function InitializeSetup(): Boolean; begin Result := True; ComponentHelper := TStringList.Create; ComponentHelper.Duplicates := dupIgnore; end; var CheckLicense: TCheckBox; procedure LicenseOnClick(Sender: TObject); begin if (CheckLicense.Checked) = True then begin WizardForm.LicenseAcceptedRadio.Checked := True; end else begin WizardForm.LicenseNotAcceptedRadio.Checked := True; end; end; var CompDescs: array of TComponentDesc; CompDescImgPanel: TPanel; CompIndex, LastIndex: Integer; CompDescImg: TBitmapImage; procedure ShowCompDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea); var i: Integer; begin if Index = LastIndex then Exit; CompIndex := -1; for i := 0 to GetArrayLength(CompDescs) -1 do begin if (CompDescs[i].Index = Index) then begin CompIndex := i; Break; end; end; if (CompIndex >= 0) and (Area = iaItem) then begin if not FileExists(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName) then ExtractTemporaryFile(CompDescs[CompIndex].ImageName); CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName); CompDescImg.Show; if Index = 0 then CompDescText.Caption := 'Наведите курсор мыши на компонент, чтобы посмотреть его превью.'; end; LastIndex := Index; end; procedure CompListMouseLeave(Sender: TObject); begin CompDescImg.Hide; LastIndex := -1; end; procedure AddCompDescription(AIndex: Integer; ADescription: String; AImageName: String); var i: Integer; begin i := GetArrayLength(CompDescs); SetArrayLength(CompDescs, i + 1); CompDescs[i].Description := ADescription; CompDescs[i].ImageName := AImageName; CompDescs[i].Index := AIndex - 1 end; procedure Image1Click(Sender: TObject); var ErrorCode: Integer; begin ShellExec('open','https://www.nssro.ga','', '', SW_SHOW, ewNoWait, ErrorCode) end; procedure InitializeWizard(); var i: Integer; begin WizardForm.SelectComponentsLabel.Hide; WizardForm.SelectDirBitmapImage.Hide; WizardForm.DiskSpaceLabel.Hide; WizardForm.DirBrowseButton.SetBounds(ScaleX(342),ScaleY(39),ScaleX(75),ScaleY(22)); WizardForm.DirEdit.SetBounds(ScaleX(0),ScaleY(40),ScaleX(332),ScaleY(20)); WizardForm.SelectDirBrowseLabel.SetBounds(ScaleX(0),ScaleY(13),ScaleX(417),ScaleY(27)); WizardForm.SelectDirLabel.SetBounds(ScaleX(0),ScaleY(1),ScaleX(417),ScaleY(14)); WizardForm.TypesCombo.Top := ScaleY(0) WizardForm.ComponentsList.OnItemMouseMove:= @ShowCompDescription; WizardForm.ComponentsList.OnMouseLeave := @CompListMouseLeave; WizardForm.ComponentsList.Visible := True; WizardForm.ComponentsList.Height := ScaleX(204); WizardForm.ComponentsList.Top := ScaleX(31); WizardForm.ComponentsList.Width := ScaleX(200); for i := 0 to WizardForm.ComponentsList.Items.Count - 1 do if not WizardForm.ComponentsList.ItemEnabled[i] then WizardForm.ComponentsList.ItemSubItem[i] := ''; WizardForm.ComponentsDiskSpaceLabel.Visible := True; WizardForm.LicenseNotAcceptedRadio.Hide; WizardForm.LicenseAcceptedRadio.Hide; WizardForm.LicenseMemo.Height := ScaleY(175); DelTmp := TNewCheckBox.Create(WizardForm); DelTmp.Parent := WizardForm.FinishedPage; DelTmp.Caption := 'Удалить временные файлы'; DelTmp.Left := ScaleX(180); DelTmp.Top := ScaleY(207); DelTmp.Width := ScaleX(300); DelTmp.Height := ScaleY(15);; DelTmp.Checked := true; CheckLicense:= TCheckBox.Create(WizardForm); CheckLicense.Left:= ScaleX(0); CheckLicense.Top:= ScaleY(216); CheckLicense.Caption:= WizardForm.LicenseAcceptedRadio.Caption; CheckLicense.Width:= ScaleX(417); CheckLicense.OnClick:= @LicenseOnClick; CheckLicense.Parent:= WizardForm.LicensePage; Image1 := TBitmapImage.Create(WizardForm); with Image1 do begin Parent := WizardForm.SelectDirPage; SetBounds(ScaleX(0),ScaleY(70),ScaleX(416),ScaleY(170)); ExtractTemporaryFile('ad.bmp'); Bitmap.LoadFromFile(ExpandConstant('{tmp}\ad.bmp')); OnClick:=@Image1Click; Enabled:=True; Cursor:=crHand; end; CompDescImgPanel := TPanel.Create(WizardForm); with CompDescImgPanel do begin Parent := WizardForm.SelectComponentsPage; SetBounds(ScaleX(212), ScaleY(30), ScaleX(205), ScaleY(205)); BevelInner := bvLowered; end; CompDescText := TLabel.Create(WizardForm); with CompDescText do begin Parent := CompDescImgPanel; SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10)); AutoSize := False; WordWrap := True; Enabled := False; Caption := 'Наведите курсор мыши на компонент, чтобы посмотреть его превью.'; end; CompDescImg := TBitmapImage.Create(WizardForm); with CompDescImg do begin Parent := CompDescImgPanel; SetBounds(ScaleX(4), ScaleY(4), CompDescImgPanel.Width - ScaleX(7), CompDescImgPanel.Height - ScaleY(7)); Stretch := True; Hide; end; AddCompDescription(1, (''), 'car1.bmp'); AddCompDescription(2, (''), 'car2.bmp'); AddCompDescription(3, (''), 'car3.bmp'); AddCompDescription(4, (''), 'car4.bmp'); AddCompDescription(5, (''), 'car5.bmp'); AddCompDescription(6, (''), 'car6.bmp'); AddCompDescription(7, (''), 'car7.bmp'); AddCompDescription(8, (''), 'car8.bmp'); AddCompDescription(9, (''), 'car9.bmp'); AddCompDescription(10, (''), 'car10.bmp'); AddCompDescription(11, (''), 'car11.bmp'); AddCompDescription(12, (''), 'car12.bmp'); AddCompDescription(13, (''), 'car13.bmp'); AddCompDescription(14, (''), 'car14.bmp'); AddCompDescription(15, (''), 'car15.bmp'); AddCompDescription(16, (''), 'car16.bmp'); AddCompDescription(17, (''), 'car17.bmp'); AddCompDescription(18, (''), 'car18.bmp'); AddCompDescription(19, (''), 'car19.bmp'); AddCompDescription(20, (''), 'car20.bmp'); end; procedure CurPageChanged(CurPageID: Integer); begin case CurPageID of wpSelectComponents: ComponentsListClickCheck(nil); end; end; procedure CurStepChanged(CurStep: TSetupStep); begin case CurStep of ssDone: begin if DelTmpCheck then begin DelTree(ExpandConstant('{localappdata}\Temp'), false, true, true); end; end; end; end; function NextButtonClick(CurPageID: Integer): Boolean; begin Result := True; case CurPageID of wpSelectDir: if not FileExists(ExpandConstant('{app}\SpinTires.exe')) then begin MsgBox('Ошибка! Вы должны указать путь до папки Spintires.', mbError, MB_OK); Result := False; end; end; end; [Run] Filename: "https://www.worldofmods.ru"; Description: "Посетить сайт WorldOfMods.ru"; Flags: postinstall shellexec; Filename: "https://www.nsspro.ga"; Description: "«Not So Serious» в Steam"; Flags: postinstall shellexec; Filename: "mailto:support@nsspro.ga"; Description: "Написать в поддержку"; Flags: postinstall shellexec unchecked; |
TheLeon, Временные файлы ставьте вверх списка т.к. инсталлятор выгружает файлы с верху в низ. Из-за этого инсталлятор и тормозит после запуска
|
|
TheLeon, я как понял, чтобы инсталлятор не показывал размеры компонентов?
Поменяйте WizardForm.ComponentsDiskSpaceLabel.Visible := True; на False |
TheLeon, попробуйте поменять WizardForm.ComponentsDiskSpaceLabel.Visible := False; на WizardForm.ComponentsDiskSpaceLabel.Hide;
|
- Да, опять же возник вопрос: возможно ли сдвинуть поле тип установки вверх, а то я пытался, но у меня половина этого элемента перекрывал задний фон. https://c.radikal.ru/c14/1805/73/252847181f0e.png |
TheLeon, ваша ссылка не работает. ПЕРЕЙДИТЕ ПО ССЫЛКЕ НИЖЕ
http://forum.oszone.net/faq.php?faq=...chment_explain Ссылка на прикрепленный файл не работает. Надо прикреплять в свое сообщение или загружать на облако или файлообм.... |
TheLeon, тут без понятия. если был бы полный скрипт со всеми необходимыми файлами для работы инсталлятора, то помог.
|
|
TheLeon, поле тип установки и так находится на 0 отметке WizardForm.TypesCombo.Top := ScaleY(0).
Цитата:
замените
Compression=zip/9
InternalCompressLevel=ultra CompressionThreads=2 SolidCompression=True на
Compression=lzma2/Ultra64
SolidCompression=true InternalCompressLevel=Ultra64 LZMADictionarySize=65536 LZMAMatchFinder=BT LZMANumFastBytes=273 MergeDuplicateFiles=yes |
TheLeon, если вам нужно, чтобы инсталлятор устанавливал допы в папку с игрой, то надо делать через реестр
DefaultDirName={reg:HKxx\SubkeyName,ValueName|Default} для установки в program files добавьте в раздел setup ArchitecturesInstallIn64BitMode=x64 ArchitecturesAllowed=x86 x64 |
1. Как сделать так, чтобы после установки запускался bat файл(в зависимости оттого какой ты компонент выбрал), от имени администратора + скрытая установка(не высвечивалась командная строка)? 2. Как через bat открыть файл(.txt) и в конце дописать строчки(если они отсутствуют, если же нет, то ничего не делать): |
Цитата:
Цитата:
Цитата:
Flags: ShellExec; для скрытой установки добавьте Flags: RunHidden; в зависимости от выбранного компонента добавьте Components: имя компонента; к нужным строкам из раздела run. если вам нужно добавить несколько компонентов к одной строке, то добавляйте имя компонента через пробел Components: AFP\INSTALL\AX AFP\INSTALL\ALL; |
Цитата:
Я и это: [решено] Замена строк в файле формата .xml предлагал, чтобы сделали здесь же на том же самом встроенном Паскале. |
Цитата:
Скрытый текст
Код:
|
Здраствуйте. Помогите пож. объединить два кода.
К инсталятору добавил код фонового изображения используя isgsg.dll: Скрытый текст
[Setup] SourceDir=. OutputDir=Setup AppName=My Program AppVerName=1.0 AppVersion=1.0 DefaultDirName={pf}\My Program DefaultGroupName=My Program DisableWelcomePage=false DisableDirPage=false DisableProgramGroupPage=false [Languages] Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl" [Files] Source: "Fon.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: "isgsg.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs; [UninstallDelete] Type: filesandordirs; Name: "{app}" [_Code] function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload'; function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boo lean; external 'ssInitialize@files:isgsg.dll stdcall delayload'; procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload'; procedure ssSetBkgImage(FileName:PChar); external 'ssSetBkgImage@files:isgsg.dll stdcall delayload'; procedure InitializeWizard; begin ssInitialize(GetWindowLong(MainForm.Handle,-8),0,False,1,$FF000000); ExtractTemporaryFile('Fon.jpg'); ssSetBkgImage(ExpandConstant('{tmp}')+'\Fon.jpg'); end; procedure DeinitializeSetup; begin ssDeInitialize; end; На странице InstallingPage прописал код минимизации окна: Скрытый текст
[_Code] var ResizeButton: TButton; PageResized, Show: Boolean; function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload'; function GetSystemMenu(hWnd: HWND; bRevert: BOOL): LongWord; external 'GetSystemMenu@user32.dll stdcall'; function DeleteMenu(hMenu: LongWord; uPosition, uFlags: UINT): BOOL; external 'DeleteMenu@user32.dll stdcall'; procedure MinimizeInstallPage(); begin WizardForm.MainPanel.Hide; WizardForm.Bevel1.Hide; WizardForm.Width:= ScaleX(395); WizardForm.Height:= ScaleY(142); WizardForm.Left:= GetSystemMetrics(16)-ScaleX(420); WizardForm.Top:= GetSystemMetrics(17)-ScaleX(150); WizardForm.InnerNotebook.Left:= ScaleX(10); WizardForm.InnerNotebook.Top:= ScaleY(10); WizardForm.InnerNotebook.Width:= ScaleX(370); WizardForm.StatusLabel.Left:= ScaleX(0); WizardForm.StatusLabel.Top:= ScaleY(0); WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width; WizardForm.FileNameLabel.Left:= ScaleX(0); WizardForm.FileNameLabel.Top:= ScaleY(20); WizardForm.FileNameLabel.Width:= WizardForm.InnerNotebook.Width; WizardForm.ProgressGauge.Top:= ScaleY(40); WizardForm.ProgressGauge.Width:= WizardForm.InnerNotebook.Width; WizardForm.CancelButton.Left:= ScaleX(220); WizardForm.CancelButton.Top:= ScaleY(80); WizardForm.CancelButton.BringToFront; ResizeButton.Left:= ScaleX(60); ResizeButton.Top:= ScaleY(80); ResizeButton.Caption:= 'Max.'; PageResized:= True; end; procedure ResumeInstallPage(); begin WizardForm.Width:= ScaleX(503); WizardForm.Height:= ScaleY(388); WizardForm.Position:= poScreenCenter; if Show then begin WizardForm.MainPanel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(58)); WizardForm.MainPanel.Show; WizardForm.Bevel1.Show; end; WizardForm.InnerNotebook.SetBounds(ScaleX(40), ScaleY(72), ScaleX(417), ScaleY(237)); WizardForm.StatusLabel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(16)); WizardForm.FilenameLabel.SetBounds(ScaleX(0), ScaleY(16), ScaleX(417), ScaleY(16)); WizardForm.ProgressGauge.SetBounds(ScaleX(0), ScaleY(42), ScaleX(417), ScaleY(21)); WizardForm.CancelButton.SetBounds(ScaleX(412), ScaleY(327), ScaleX(75), ScaleY(23)); ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23)); ResizeButton.Caption:= 'Min.'; PageResized:= False; end; procedure ResizeButtonOnClick(Sender: TObject); begin If PageResized then ResumeInstallPage else MinimizeInstallPage; end; procedure InitializeWizard(); begin ResizeButton:= TButton.Create(WizardForm); ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23)); ResizeButton.OnClick:= @ResizeButtonOnClick; ResizeButton.Caption:= 'Min.'; ResizeButton.Hide; ResizeButton.Parent:= WizardForm; end; procedure CurPageChanged(CurPageID: Integer); begin ResizeButton.Hide; case CurPageID of wpInstalling: begin Show:= true; ResizeButton.Show; end; wpFinished: begin Show:= false; ResumeInstallPage; DeleteMenu(GetSystemMenu(WizardForm.Handle,False),$F060,0); end; end; end; procedure BtnDisable(); begin ResizeButton.Enabled := False; end; Необходимо выполнить следующее: 1. При клике на кнопку "Min" фоновое изображение закрывается 2. При клике на кнопку "Max" фоновое изображение отображается |
Цитата:
|
Цитата:
|
Добрый день, подскажите, возможно ли как-то прикрутить inno download plugin к скрипту "Opera"
чтоб прогресс скачивания нормально отображался перед распаковкой. Сам скрипт ссылка
|
Цитата:
P.S. GetWindowLong(MainForm.Handle,-8) - попытка автора библиотеки Application.Handle получить. Ужас. |
Доброго времени суток. Будьте добры подскажите:
1. Как изменить цвет текста лицензионного соглашения? WizardForm.LicenseMemo.Font.Color не даёт никакого эффекта. 2. Существует ли способ разместить текст на Splash изображении? 3. Можно ли в WizardForm.ComponentsList добавить название колонок (как в таблицах)? По сути над списком чекбоксов должна размещаться линия, поделенная на 3 "колонки", такого вида: [ Пустая ячейка | Компоненты | Размер компонента]. |
Цитата:
Цитата:
Скрытый текст
Код:
[Code] |
El Sanchez, скрипт для ComponentsList работает, но название колонок скрывает первый компонент. Каким образом можно разместить название колонок до первого компонента? Или же сделать отступ определенного размера перед списком компонентов?
|
Цитата:
Скрытый текст
Код:
[Code] |
Всем привет! Есть код:
Код:
procedure RtlMoveMemory(Dest: string; Source: PAnsiChar; Len: Integer); Сама задача решаема через перекодировки в скрипте ConvertString.iss, но в этом примере кода поменьше. // еще одна задача необходимо запустить юникодный батник через функцию Exec или ShellExec (или через api), чтобы внутренние команды выполнились, например, bat-ник с содержимым: copy "c:\嗨 русский.txt" "c:\嗨 русский.txt.bak" в самой Windows, если вставить данную строку в cmd, то, пусть она и не отобразит правильно имена файлов в окне (что не требуется), но зато выполнит операцию корректно с названиями файлов в Unicode кодировке. как добиться этого в Inno, чтобы можно было выполнять юникодные батники? (просьба при возможности сделать пример для стандартной версии IS) |
El Sanchez, у меня всё снова не как у людей. Вместо названий колонок отображается пустое место (зато с отступом). В первой версии скрипта все отображалось корректно. Я обнаружил, что причина проблемы в том, что у меня WizardForm является родительским элементом для ComponentsList (Parent:=WizardForm). Прошу у Вас помощи еще раз, подскажите что нужно изменить, чтобы колонки отображались.
|
Цитата:
|
Здраствуйте. Подскажите, пожалуйста, как создать патч с помощью Inno Setup? Обыкновенный инсталятор непрактичен из-за своего веса. Вчера использовал софтинку Inno Setup XDELTA Patch Maker, но два факта огорчили меня сильно - во первых, файла два (exe и bin), не один, а во вторых, окно инсталла сильно упрощенно по сравнению с инсталлами от самого Inno Setup.
Грубо говоря, есть два архива - оригинальный и модифицированный. Надо, чтобы инсталл содержал только разницу между ними (патч-данные). Тогда он будет весить около всего 40 Мб, чего я и хочу добиться, но чтобы окно инсталла осталось неизменным. |
Coломoн Keйн, можете попробовать Mole`s Smart Version Patch Constructor
|
Цитата:
|
Coломoн Keйн, есть еще патчер Visual Patch от Indigo Rose, там патчи можно создать как мастер со страницами наподобие Inno Setup. А для создания автономного патча в ISXPM нужно убрать галку Create Launcher, если размер патча на выходе небольшой.
А чтобы самому включить в свой инсталлятор патч-файл и применить его при установке, это нужно консольные утилиты использовать, типа xdelta или jojodiff, разбираться, как они работают и использовать их в своем инсталляторе. |
Цитата:
Цитата:
Цитата:
|
Цитата:
https://sourceforge.net/projects/jojodiff/ Для генерации патч-файла запустить из командной строки: jdiff.exe -b "C:\original.file" "C:\modified.file" "C:\resultpatch.file" а для применения, полученный файл с изменениями resultpatch.file включить в установку и после инсталляции выполнить в Exec или RunTask: jptch.exe "C:\original.file" "C:\resultpatch.file" "C:\modified.file" (естественно, с путями константами) в итоге после установки указанный original.file будет пропатчен. но для этого может понадобится манипуляция удаления старого файла с переименованием пропатченного файла в оригинальное имя стандартными средствами Inno. А в ISXPM можно вообще сделать невидимый Silent патч без окна (или SilentForm - маленькая форма с индикатором прогресса выполнения, чтобы пользователю было понятно, что применяется обновление и ничего не зависло) с указанием параметров с путем для применения и запускать его из инсталлятора, вся информация есть в справке, в нем поддерживаются константы Inno Setup. Просто когда нужно будет поставить апдейт с обновлением для сотни файлов, то делать вручную это не очень хорошая идея, поэтому создавалась данная программа, чтобы довести все до полного автоматизма. |
Цитата:
Просто этот файл, по которому патч-данные делаются - единственный, который устанавливается. Можно как то сделать применение патч-данных к оригинальному файлу как раз в момент установки, не после нее? Или я уже слишком требовательный к инсталлятору? И да, я так понимаю, можно же скомбинировать все это дело с существующим скриптом, чтобы не терять его главных функций? |
Цитата:
|
Доброго всем вечера.
|
Цитата:
Скрытый текст
[Setup] AppName=My Application AppVersion=1.5 DefaultDirName={pf}\My Application [code] var Text1: TLabel; Text2: TLabel; Text3: TLabel; procedure InitializeWizard(); begin Text1 := TLabel.Create(WizardForm); with Text1 do begin Parent := WizardForm.SelectDirPage; Alignment := taRightJustify; Caption := 'Текст справа'; Font.Color := clBlue; Font.Height := -13; Font.Name := 'Tahoma'; Font.Style := [fsBold, fsItalic]; SetBounds(ScaleX(0),ScaleY(120),ScaleX(417),ScaleY(16)); end; Text2 := TLabel.Create(WizardForm); with Text2 do begin Parent := WizardForm.SelectDirPage; Alignment := taCenter; Caption := 'Текст по центру'; Font.Color := clBlue; Font.Height := -13; Font.Name := 'Tahoma'; Font.Style := [fsBold, fsItalic]; SetBounds(ScaleX(0),ScaleY(140),ScaleX(417),ScaleY(16)); end; Text3 := TLabel.Create(WizardForm); with Text3 do begin Parent := WizardForm.SelectDirPage; // Alignment := taLeftJustify; Caption := 'Текст слева'; Font.Color := clBlue; Font.Height := -13; Font.Name := 'Tahoma'; Font.Style := [fsBold, fsItalic]; SetBounds(ScaleX(0),ScaleY(160),ScaleX(417),ScaleY(16)); end; end; |
ZVSRus, благодарю. Я понятия не имел, что к taRight и taLeft необходимо добавить Justify.
|
парни что за проблема нажимаю установить вот такая ошибка , но программа устанавливается
|
pollipen, мы по вашему экстрасенсы? скрипт в студию!
|
P.S. Видно плохо искал ответы на вопросы, что не нашёл. |
Цитата:
Текстурирование кнопок через botva2.dll
Код:
[Setup] Цитата:
|
Цитата:
|
Цитата:
|
Sotonisto, спасибо огромное! Вы сделали всё как в моём шаблоне, не видя других страниц инсталлятора, спасибо!
|
TheLeon, не за что. Надеюсь, со скриптом вы разобрались без проблем.
|
парни как избавиться от запроса вот этого
что бы перезаписала сразу Скрытый текст
|
Цитата:
Код:
[Files] |
Ребята, помогите пожалуйста...
Я тут делаю распаковщик для многотомных архивов одной игры. Но пока это дело реализовал через голый 7-Zip. Скачать проект можно здесь: http://rgho.st/7Qx8Zvc7C (в архиве лежат 5 маленьких томов для теста распаковки - 001, 002, 003, 004, 005). Я же хочу сделать распаковку через ISDone по фэншую, чтобы распаковка шла с двумя полосками прогресс-бара, с процентами, временем и всем остальным, но не пойму, какими командами и в каком месте её прикрутить. Я умею её прикручивать, но она у меня работает только в стандартных приложениях после нажатия кнопки "Готово". А здесь у меня кастомный интерфейс и есть кнопка "Распаковать". Помогите пожалуйста... |
Подскажите, пожалуйста, почему установщик инно не может под UAC внести изменения в реестр HLKM
Версия инно 5,5,1 ее2 (а) куски скрипта в части касающейся Код:
[Setup] или не выдать и втихаря все поставить но ключи в реестре HKLM не создать Причем примерно до НГ установщик работал нормально, виню последние обновки безопасности майкрософта Заранее благодарен |
если игра x64 и нужен доступ установщика к 64 бит разделам, то попробуй в секцию [Setup] прописать:
ArchitecturesInstallIn64BitMode=x64 ia64 Цитата:
|
usermode, нет игра х86
|
еще подскажите, пожалуйста, как сделать через bass так чтобы первый мр3 файл проигрался и перешел ко второму, а второй мр3 уже играл в цикле
сейчас в фоне играет только один мр3 в цикле Код:
procedure InitializeWizard(); |
R.i.m.s.k.y.
тогда для записи в реестр использовать windows api. |
Цитата:
|
Не могу выудить переменную из кода GetOpenFileName. Вот пример:
Код:
procedure UnpackButtonClick(Sender: TObject); |
ErikPshat,
Скрытый текст
Код:
[Setup] |
nik1967, Классно, спасибо, отлично работает!!! Понятно, где я допустил ошибку в фигурных скобках.
Можно ещё развить тему?... А теперь я пытаюсь распаковать архивы с мультивыбором GetOpenFileNameMulti. Всё то же самое, в справке Inno Setup есть пример кода. Но почему-то компилятор выдаёт ошибку "Unknown Identifier 'GetOpenFileNameMulti'". Может есть рабочий пример аналогичного кода? |
ErikPshat, скорее всего пользуешься расширенным компилятором. А GetOpenFileNameMulti прикрутили в поздних версиях инно. У меня в 5.5.9 уже не ругается.
Цитата:
|
Ребята помогите пожалуйста, разобратся в скрите. Еле откопал в интернете вот этот скрипт:
скрипт
[Setup]
AppName=My Program AppVersion=1.5 DefaultGroupName=My Program DefaultDirName={pf}\My Program DisableDirPage=yes [Files] Source: "D:\!ZBFlash\!АБУБоекомплект\InnoSetup\Projects\ABU\Core\Myprog1.exe"; DestDir: "C:\ABUTemp" Source: "D:\!ZBFlash\!АБУБоекомплект\InnoSetup\Projects\ABU\Core\Myprog2.exe"; DestDir: "C:\ABUTemp" [code] var MyOptionsPage: TInputOptionWizardPage; procedure InitializeWizard; begin MyOptionsPage := CreateInputOptionPage(wpWelcome, 'Caption', 'Description', 'SubCaption', True, False); MyOptionsPage.Add('install Myprog1'); MyOptionsPage.Add('install Myprog1'); MyOptionsPage.Values[0] := True; end; function ShouldInstallIcon: Boolean; begin Result := MyOptionsPage.Values[0]; end; procedure CurPageChanged(CurPageID: Integer); begin If CurPageID=wpWelcome then begin SendMessage(WizardForm.NEXTBUTTON.Handle, 513, 0, 0) SendMessage(WizardForm.NEXTBUTTON.Handle, 514, 0, 0) end; end; и не могу понят куда и как написать, чтоб при соотвествуюшем выборе радио кнопки запускалась соотвествующий ехешник (Myprog1.exe или Myprog2.exe). |
zbz, читать в справке про секцию components
Код:
[Components] |
Цитата:
|
Да, ошибку выбивает китайский 5.5.1 ee2. Переключился на компилятор 5.6.1, проходит нормально. Но при условии, если я делаю через ExpandConstsnt:
Код:
MsgBox('Выбраны PKG: '+ExpandConstant('FileNameList'), mbInformation, MB_OK); Код:
Выбраны PKG: FileNameList Что-то не так снова в этой конструкции. |
zbz, а) в твоем скрипте я не увидел запуска
б) лучше не использовать модификации инно если можно использовать стандартные средства инно убрать кусок Код:
MyOptionsPage: TInputOptionWizardPage; Код:
[Run] |
Это мой первый пост, я использовал или просматривал OSZONE в течение нескольких месяцев (помог мне много ... :) новичок здесь).
У меня вопрос о наложении Thumbail для панели задач ... в частности, показывается ход установки. Я добавил скриншот, чтобы уточнить. https://imgur.com/a/duLH1r7 Im в настоящее время использует (wintb) .dll для наложения эскизов и работает нормально, но я хочу, чтобы он отображал дополнительную информацию, например. ход установки и оставшееся время. Если это возможно? отправляем. любая помощь оценена. Спасибо! im с использованием inno 5.6.1 (u) и последней улучшенной. |
mubbii, почитай здесь.
|
Относительно недавно начал изучать конструкция написания скрипта для Inno Setup. И тут возникла проблема: На странице, где необходимо выбрать путь, куда будет устанавливаться программа, по умолчанию стоит путь, который прописан в DefaultDirName, к примеру это DefaultDirName={pf}. В том проблема, что если требуется изменить путь в ручную, то все к выставленному пути приписывается значение DefaultDirName, то есть я хочу установить путь на E:\Games, но выставляется в итоге E:\Games\Program Files , мне требуется, чтобы значение DefaultDirName не выставлялось при изменении пути.
В интернете искал как и на этом форуме, особо толку такого не нашёл. Помогите пожалуйста разобраться в данной проблеме. |
ChopMan,
Справочку внимательно изучаем
[Setup]: AppendDefaultDirName Возможные значения: yes или no Значение по умолчанию: yes Описание: По умолчанию при указании пути на странице Выбор папки назначения с помощью кнопки Обзор... (Browse...) инсталлятор автоматически добавляет в конце имя папки, указанной в директиве DefaultDirName, в которую будет установлена программа. Например, если DefaultDirName={pf}\My Program и пользователь выбрал в обзоре диск "Z:\", то программа установится в "Z:\My Program". Если значение директивы no, то папка с указанным DefaultDirName именем в конечном каталоге создаваться не будет. На странице выбора появится кнопка "Создать папку" (Make New Folder). |
Цитата:
PinToTaskbar
Код:
function PinToTaskbar(const FileName: string; IsPin: Boolean): Boolean; PinToStartMenu
Код:
function PinToStartMenu(const FileName: string; const IsPin: Boolean): Boolean; |
Здраствуйте. Помогите пож. разобратся с ярлыком деинсталятора в меню пуск.
Всегда указывал так: [Icons] Name: {group}\{cm:UninstallProgram,{#MyName}}; Filename: {uninstallexe}; Check: CheckError Ярлык деинсталятора в меню пуск Win 7 отображался. Установив прогу в Win 10 ярлык деинсталятора не отображается. Заметил что такая же проблема и в инсталяторах других разработчиков. Запустив установку в Win 10 в режиме совместимости с Win 7 всё нормально, рабочий ярлык на своём месте. Прописал следующее: [Icons] Name: {group}\Деинсталлировать {#MyName}; Filename: {uninstallexe}; Check: CheckError После этого всё норм, рабочий ярлык на своём месте. В чем же проблема в первом случае ? |
Цитата:
Код:
{cm:UninstallProgram} {#MyName}; |
Ребята, нубский вопрос...
Как средствами Inno Setup создать новый пустой текстовой файл? Я знаю только один хак создания через лист: Код:
var Код:
SaveToFile(file.txt); |
Цитата:
Цитата:
Цитата:
Код:
SaveStringToFile(ExpandConstant('{tmp}\file.txt'), '', False); |
El Sanchez, о да, спасибо, проверил работает.
Если указано False, тогда перезаписывает файл, а если указать True, тогда записывает строку в конец файла. А я перелопатил в документации весь хэлп и почему-то пропустил эту команду. Оказывается она там есть ))) Спасибо ещё раз! |
Подскажите пожалуйста, как проверить наличие записи в INI-файле?
У меня в секцию [CONFIG] записывается ключ "InstallDirectory" с путём в параметре. И я делаю отдельную функцию на его считывание: Код:
function InsDir(Default:String):String; Код:
if (ExpandConstant('{code:InsDir}') > 0) then begin DIR:= ExpandConstant('{code:InsDir}') end else Мне нужно на переменную DIR назначить существующий ключ. |
Цитата:
Может есть какойто метод оптимизации секции [Icons] не прибегая к подробному тексту - Name: {group}\Деинсталлировать {#MyName}; Filename: {uninstallexe}; Check: CheckError Уточняю проблему - это только но win 10 и подобное не только у моих инсталяшек |
ROMKA-1977, вам выше совет дал El Sanchez, вы читали?
То есть, вы вписали ключ MyName в файл Russian.isl и теперь хотите вывести его в секции [Icons]? А почему бы в шапке не написать через Код:
#define MyName "Моё Название" Или в секцию CustomMessage через en. и ru. Кстати, нужно бы параметры в кавычки брать, а у вас без кавычек. Просто в Inno Setup иногда запятая всё решает. Из меня правда плохой советчик, кто бы мне самому подсказал, но у меня в секции [Icons] всегда так: Код:
[Icons] |
Ребята, помогите, пожалуйста.
Есть задача, при установке программы создавать нового пользователя windows и добавлять программу в автозагрузку только ему (во время установки программы но не является текущим пользователем.) Пробовала получать SID пользователя после создания, но видимо из-за нехватки опыта получается какая-то ерунда. Выкладываю свои попытки, может подскажете как можно поправить? Код:
[Registry] |
Здравствуйте!
Подскажите пожалуйста, как реализовать, чтобы при запуске инсталятора, например, "Моя_прога", если запущена уже ранее установленная программа "Моя_прога.exe", то сразу же, без вопросов, "Моя_прога.exe" закрывалась? |
Chudmin, вообще-то, в этом случае инсталлятор не должен «сразу же, без вопросов» закрываться.
|
Цитата:
|
Chudmin, и этого быть не должно (разве что «Моя_прога» — это сервис).
|
Цитата:
|
Chudmin,
Код:
[UninstallRun] Код:
[Files] |
Цитата:
И всё-таки, у Elchupacabra этот процесс происходит сразу же после запуска инсталятора, КАК? Конечно и Ваш способ работает и выполняет свою функцию, но хотелось бы знать как сделать в самом начале, чисто академический интерес. |
Цитата:
Код:
[Files] Правильно или не правильно, но если MyProg.exe не служба и нет ключа командной строки для завершения работы, а процесс без вопросов необходимо завершить и по другому ни как, то это единственный вариант, и уже закрываешь глаза на то, что это не правильно. ИМХО. |
Цитата:
Цитата:
Скорее всего ваши файлы смирно сидят в инсталляторе и терпеливо ждут, пока юзер не пройдёт все этапы, проставит галочки, там создавать ярдыки на рабочем столе, выбирает дополнения, путь установки, а тоько в заключении жмёт кнопку "Установить". Вот тогда и активируется ваша "Моя_прога.exe", а перед её запуском и начинается поиск процесса и его уничтожение. Чтобы процесс уничтожался сразу при запуске инсталлятора, нужно чтобы у вас в [Files] был бы назначен на BeforeInstall какой-нибудь файлик, который бы извлекался в %TEMP% именно при запуске инсталлятора, а не по нажатию кнопки "Установить". Для примера, вы можете прикрепить к инсталлятору Сплэш-заставку и заодно на неё повесить убийцу процесса: Код:
[Files] Код:
[ Code ] Код:
{ Splash заставка } Код:
procedure InitializeWizard(); |
Цитата:
1. установить программу 2. создать попутно нового пользователя 3. перезагрузить систему и зайти под новым пользователем 4. запустить bat файл. И это все должен делать инсталлятор. Видела примеры как делают продолжение установки после перезагрузки, но очень слабо понимаю, что куда там нужно вписать ( Буду очень благодарна за советы, примеры, объяснения |
AnastasiyaM, в Вашем случае пользователя мало создать: у новосозданного пользователя отсутствует профиль. Просто запустите программно какое-либо приложение от имени новосозданного пользователя, дождитесь его завершения, и только затем пытайтесь что-либо делать с его разделами реестра или путями в его профиле.
|
Цитата:
|
Цитата:
|
Цитата:
|
Вложений: 1
Цитата:
Вот, нужно ещё код извлечения и активации нужно добавить в подходящее вам место: Код:
{ Splash заставка } |
Цитата:
Дайте совет, что, где почитать в этом направлении, чтобы хоть что-то понимать? |
Chudmin, ну так в Inno Script Studio нажмите в меню Помощь -> Документация Inno Setup и изучайте.
Используется Pascal, простейший язык для изучения. Я именно со справки и начинал. Когда делал свою первую программу, сутки посидел, поискал решения своих задач, так там всё и нашёл, там много примеров практически по всем направлениям, собранных по вопросам и ответам на форумах. Ну и за сутки я практически освоил все приёмы по кодингу в этой программе. Скачайте последнюю версию русской справки: http://krinkels.org/threads/russkaja...no-setup.2083/ Замените CHM в папке с программой C:\Program Files (x86)\Inno Setup 5\ Посмотрите сборник скриптов и примеров: http://krinkels.org/threads/faq-po-inno-setup.7/ Покомпилируйте готовые рабочие скрипты: http://krinkels.org/forums/skripty-dlja-inno-setup.256/ Ну и на их примере попытайтесь сделать что-нибудь своё. |
Цитата:
|
Цитата:
Только bat файл запрашивает пароль нового пользователя, когда запускает что-то от его имени (без пароля отказывается работать). Есть ли способ, как ему его передать в инсталятор? что то вроде Filename: cmd.exe; parameters: "{app}\my.bat %pas"; ? Цитата:
|
Цитата:
Вполне возможно, что команда извлечения ExtractTemporaryFile действует принудительно, в обход стандартного функционала инсталлятора и поэтому флаги из секции [Files] не отрабатывают. По-моему так и есть, флаги там работают только при стандартных действиях инсталлятора, т.е. при нажатии кнопки Install на конечном этапе. А у вас до этого не доходит и вы вызываете Taskkill до запуска инсталлятора из секции [ Code ] программы. Поэтому нужно искать другое решение, т.е. как-то вызывать taskkill из кода программы, либо подключать библиотеку taskkill.dll или KillProc.dll и вызывать его через [external 'KillProcByExeName@files:KillProc.dll stdcall], как недавно выкладывал код boss911 здесь: http://forum.oszone.net/thread-33414...essage_2836987 здесь: http://forum.oszone.net/thread-33414...ml#edit2836987 здесь: http://forum.oszone.net/thread-33414...ml#post2836987 |
Цитата:
|
Цитата:
|
Цитата:
Код:
@echo Добавление нового пользователя |
ErikPshat, чего, кого?
Цитата:
Цитата:
Нужно: реализация на InnoSetup Pascal Scripting функции CreateProcessAsUser/CreateProcessWithLogon. |
Iska, ну я написал код батника, можно всё перенести в код Inno Setup.
А почему тогда, при создании нового пользователя, после запуска батника, требует ввод пароля? Потому что созданный пользователь является просто Гостем и для него всегда будет запршиваться пароль. |
Цитата:
|
AnastasiyaM, ну так я что-то недогоняю. Я же вам и предложил код, который:
1. Создаёт нового пользователя с Именем и Паролем. 2. Настраивает пользователя, т.е. ставит галочку, что Пароль не временный, а "Срок действия пароля не ограничен". 3. Делает пользователя Админом и даёт права на выполнение действий без ввода пароля. Теперь вы можете от его имени запускать необходимые процессы, без запроса пароля. И команду ranas можете выполнять. |
ErikPshat, нужен обязательно бесправный пользователь.
Цитата:
Я пока сделала такой костыль в секции Код:
[Code] |
AnastasiyaM, вам нужно создавать пользователя уже с паролем, иначе на первом же логоне система скажет ни-ни, потом создать профиль и получить SID. Вот пример без автологона и с требованием пароля при первом входе. Пароль и прочие настройки вам все равно придется в учетке пользователя делать.
Скрытый текст
Код:
[Registry] |
Цитата:
|
Цитата:
|
Парни скажите как сделать средствами Inno Setup
короче при распаковки инстал. запускается другой с папки tmp, но он запаролен скажем 12345 так вот как мне сделать что бы он автоматом запускался без вода в ручную пароля |
Цитата:
Цитата:
|
что то ни как ни пойму
wwwww.exe он запаролен Скрытый текст
#define MyAppName "My Program"
#define MyAppVersion "1.5" #define MyAppPublisher "My Company, Inc." #define MyAppURL "http://www.example.com/" #define MyAppExeName "MyProg.exe" [Setup] AppId={{4F1F4C94-0955-42AB-9AEF-23D33908F46C} AppName={#MyAppName} AppVersion={#MyAppVersion} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} DefaultDirName={pf}\{#MyAppName} DefaultGroupName={#MyAppName} OutputBaseFilename=setup Compression=lzma SolidCompression=yes [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Files] Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\Users\ww\Desktop\wwwww.exe"; DestDir: "{tmp}"; Flags: ignoreversion [Icons] Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon [Run] Filename: "{tmp}\wwwww.exe"; Parameters: "/PASSWORD=12345" |
pollipen, чёт мне показалось, что речь шла про секцию [Setup], а не про [RUN].
Хотя и в секции [ Code ] любые параметры запуска приложения имеют возможность выставить параметры запуска. |
ErikPshat
хорошо тогда как через [ Code ] |
pollipen, ну как мы запускаем любые экзешники через "ShellExec" или "Exec". Там на втором месте указываются параметры к экзешнику.
Вот пример извлечения запароленных архивов 7-Zip: Код:
; Дефайним переменные |
как установить punkbuster в тихую? без принятия соглашения и тд?
параметры я нашел в логах... Код:
--install --install-dlls="D:\Games\Battlefield 2" --i-accept-the-pb-eula --no-prompts --no-display пример- Код:
Exec(ExpandConstant ('{src}\punkbuster\redist\pbsvc.exe'), '--install --install-dlls="{src}" --i-accept-the-pb-eula --no-prompts --no-display', '', SW_SHOWNORMAL, ewNoWait, ErrorCode); в логе после этого... |
Цитата:
Скрытый текст
Код:
[Run] |
Здравствуйте! Воспользовался скинами (ISSkinU.dll и *.cjstyle), и заметил, что на странице Лицензионного соглашения, полоса прокрутки не отображается в Win 10 (виртуалка), в Win 7 отображается - как я понял это не лечится?
|
Здравствуйте! Потихоньку (очень потихоньку) пытаюсь вникнуть в Inno Setup, больше методом научного тыка на примерах, из одного примера взял КОД, в меру своих сил подредактировал его.
Скрытый текст
Код:
[Files] А вот как "привязать" чекбоксы к файлам, ума не приложу, что-то мне подсказывает, что через "function" нужно, но вот как, тяму не хватает, картина как разобранная мозаика, там что-то понимаю, здесь о чём-то догадываюсь. Господа, направьте на путь истинный. |
Chudmin,
|
nik1967, большое Вам спасибо! Теперь более менее понятно как оно организовано.
Через секцию Components я это уже организовал по Справке, но мне захотелось понять, как это организовать через чекбоксы. Правда я забыл сказать, что из первых трёх чекбоксов должен быть выбран обязательно только какой-то один, а четвёртый по желанию, без привязки к первым трём. Надеюсь я правильно сделал? Скрытый текст
Код:
[Code_] |
nik1967, и у меня в нагрузку подобный вопрос.
Как вывести эти же чекбоксы, то только не в главное окно, а в MsgBox? Могу ли я использовать вместо этого: Код:
Check[3]:= TCheckBox.Create(WizardForm); Код:
Check[3]:= TCheckBox.Create(MsgBox); |
Вставлю свои пять копеек:)
Цитата:
Цитата:
Example
Код:
[Setup] Цитата:
|
Dodakaedr,
ну если уж сокращать, то
Код:
procedure GetCheck(Sender: TObject); Цитата:
Цитата:
|
Цитата:
А ещё лучше и нагляднее сократить без правок начало кода:
Код:
[ Code ] Цитата:
Код:
if MsgBox(ExpandConstant('Выбрана следующая папка :')+#10#10+FolderName+#10#10+ExpandConstant('Вы хотите упаковать папку в PKG менее 4 ГБ?'), mbInformation, MB_YESNO) = IDYES then Скрин, где вместо 4 ГБ хочу поставить 3 чекбокса:
Есть какой-то готовый вариант для подобного MessageBox? А то у меня уже голова не шарит. |
Цитата:
Набросал на скорую руку пример
Код:
[Setup] И да, зачем ты в MsgBox пихаешь ExpandConstant? Совершенно лишнее. Код:
|
Цитата:
Правда я хотел, чтобы это было именно так, как я указал на скриншоте. Я думал, если не получается вставить чекбоксы напрямую в MsgBox, тогда создать новую форму именно такого же MsgBox под замену с чекбоксами и подменить стандартный. Либо наверное лучше было бы вместо чекбоксов сделать там раскрывающийся список. У вас же выходит кнопкой, опять же на том окне выбора папки. И мне кажется, тогда открывающееся окно по кнопке будет лишним. Я решил тогда уж сразу использовать ранее предложенное решение на окне выбора папки с чекбоксами, так будет более разумнее с меньшим количеством телодвижений. То есть, в своей проге я откачусь назад на один шаг, где идёт выбор папки и там сразу буду отмечать размеры делений по ГБ. А в MsgBox, как на скрине, буду автоматом отображать выбранный ранее размер. Только мне нужно заменить, в окне выбора папки, кнопки "Далее >" и "Отмена" на кнопки "Да" и "Нет", потому что у меня не инсталлятор, а как бы авторан. Может вы мне подскажете, как это нужно организовать? Я просто сам только пару месяцев, как заинтересовался Inno Setup. |
Цитата:
Цитата:
|
nik1967, в ообщем я сделал вот такую реализацию своей идеи, можете заценить и указать на ошибки:
Готовый примар реализации чекбоксов на странице выбора папки:
Код:
#define Name "MyAppName" Только какие потом отлавливать переменные я пока не придумал )))
|
Цитата:
|
Здравствуйте всем! Господа-товарищи, я так понимаю, в таком виде
Скрытый текст
Код:
[Code] чекбоксы прикрутить нельзя к самостоятельно созданной странице, только к стандартным? |
Chudmin,
Типа такого Код:
Check[0].Parent := CustomPage.Surface |
Цитата:
|
Дорогие форумчане, интересует следующий вопрос.
Возможно ли как-нибудь уловить ошибки которые возникают при установке программы? Например: если ставить с пацарапанного или грязного диска получим ошибку "The Source file is corrupted", которая успешно отобразится на экране. Мне же нужно название этой ошибки отправить на сервер (Или возможно есть другой способ). У кого какие мысли возникают? |
Здравствуйте всем! Подскажите пожалуйста, функция UpdateReadyMemo действует только для стандартных страниц, или можно включать сюда и созданные пользователем тоже.
|
Цитата:
Код:
/LOG |
I want create custom setup with inno setup like this:
https://drive.google.com/open?id=1L2...MJ7viq2KvhR6sA Please help for iss code! |
Вложений: 1
Всем привет.
Подскажите пожалуйста, как реализуется рабочий вариант бэкапа и возможность отключать деинсталлятор через task. Прошу готовый пример. Как в этом русификаторе (примеры из справки не очень подходят). Спасибо. |
Доброго,
подскажите, есть ли возможность установить разные значения для VersionInfoDescription (в разделе [Setup]) в зависимости от локализации данное поле отображается в описании установщика, если выбрать "Свойства", по клику ПКМ |
Inno Setup - упаковка папок в архивы, в процессе установки
Здравствуйте!
Прошу прощения если создал тему НЕ в том разделе, просьба перенести её в соответствующий! Подскажите, пожалуйста, аналог кода ниже, с использованием консольных библиотек от 7-Zip, WinRAR? библиотек Inno Setup и т.п. , для упаковки, БОЛЬШОГО количества имеющихся папок, в отдельные архивы ZIP, с заданием ОПРЕДЕЛЁННОГО расширения и обычной степенью сжатия, в процессе установки, с последовательным удалением каждой папки СРАЗУ ЖЕ ПОСЛЕ СОЗДАНИЯ АРХИВА, из секции CODE, в Inno Setup, а НЕ с использованием батника и т.п. из секции RUN! Либо посоветуйте, как модифицировать и доработать данный код, желательно помочь и прислать ПОЛНЫЙ код для секции CODE и Files в Inno Setup: Скрытый текст
Код:
Всё это нужно для создания "игровых" архивов. Все "игровые" - это Архивы ZIP, с переименованным расширением. Сжатие ZIP-архивов - НЕ благодарное дело и НЕ приносит большого выигрыша в весе! Поэтому я распаковал все, в отдельные, одноимённые папки - всё сжал, теперь нужно чтобы в процессе извлечения (копирования) установщиком Inno Setup, этих папок по окончанию копирования каждой папки создавался архив, а эта папка удалялась, потом копировалась следующая - создавался архив и папка после сразу же удалялась! А НЕ в конце всей установки! |
Цитата:
|
Iska, давайте по существу, я же написал для чего!
|
|
Iska, что-то вообще не то! Написал вам в Личку - ваш ящик переполнен, посмотрите, пожалуйста!
|
Цитата:
Цитата:
Скрытый текст
Код:
[Files] Цитата:
|
Цитата:
Кстати, почему не рекомендуете коллеге TROY Diamond Вашу собственную разработку, на которую я ссылался выше?! Цитата:
|
Iska!
Цитата:
Я привёл вам пример рабочего скрипта! НО там используется старый консольный pkzip, который давным-давно НЕ поддерживается и НЕ развивается разработчиками! ((( На некоторых компах он почему-то НЕ "отрабатывает", (видимо из-за старости или какой-то неправильности скрипта), а также некоторые антивирусы на него "ругаются"! (( Я просил усовершенствовать-доработать данный скрипт или предложить аналог вместо pkzip, использовать иные библиотеки от RAR, 7-Zip или ещё откуда-то. Сжать в Zip не так сложно ведь? Просто папок 100-ни! Пример, есть папки Pack01, Pack02, Pack03 - это распакованные одноимённые архивы ZIP (Pack01.pack, Pack02.pack., Pack03.pack) - условно для примера. Нужно чтобы из установщика Inno Setup папка Pack01 - извлеклась скопировалась в папку установки, после чего заархивировалась в необходимый архив ZIP с обычной степенью сжатия - и именем и расширением, какое нужно, например, Pack01.pack, после чего папка Pack01, была сразу же удалена, и только после этого началось копирование Pack02... - создание из неё архива Pack02.pack, удаление папки Pack02 и т.д... |
TROY Diamond, Вам тот же вопрос: «существенно» — это сколько?
|
Цитата:
1. Берем пару папок с файлами, каждую из них пакуем в zip-архив. Полученные архивы пакуем в test01.7z (LZMA2, Ultra). Тут эмулируем инсталлятор с максимальным сжатием с zip-архивами внутри. Размер архива test01.7z - 241141 байт. 2. Эту же пару папок пакуем в test02.7z (LZMA2, Ultra). Тут эмулируем инсталлятор с максимальным сжатием с файлами внутри. Размер архива test02.7z - 193102 байт. Цитата:
|
El Sanchez, Iska, так как сделать-то?
По поводу размера - игра в установленном конечном виде с игровыми ZIP-архивами занимает 15 ГБ, примерно, если ничего НЕ менять и прям так с этими архивами создать установщик в Inno Setup, с максимальным сжатием (LZMA - LZMA2), то получается около 14 -14,5 ГБ. И то там кроме архивов есть ещё и не запакованные файлы, вот они и сжимаются, - от этого и размер уменьшается! Кроме того, если НЕ использовать сжатие LZMA - LZMA2, а выбрать сжатие ZIP, то разница НЕ большая, 14,7 ГБ, зато время на сборку (компиляцию) установщика экономится! А если распаковать все архивы в папки и собрать установщик в Inno Setup, сжав даже просто (LZMA), то получится около 11 ГБ! А если ещё поставить флаги: сортировать по имени, по расширению все файлы, - то получается около 10,5 ГБ! |
TROY Diamond,
Скачай ISDone 0.6 final там есть возможность распаковать архивы 7zip и FreeArc и поддержка упаковки файлов в архивы zip. многое другое ну так распакуй zip архивы и запакуй файлы в архив 7zip или FreeArc после установки укажи за запаковать if not ISPackZIP ( 0, 0, ExpandConstant('{app}\Pack01\*'), ExpandConstant('{app}\Pack01.pack'), 2, false ) then break; if not ISPackZIP ( 0, 0, ExpandConstant('{app}\Pack02\*'), ExpandConstant('{app}\Pack02.pack'), 2, false ) then break; if not ISPackZIP ( 0, 0, ExpandConstant('{app}\Pack03\*'), ExpandConstant('{app}\Pack03.pack'), 2, false ) then break; |
vint56, мне всё это нужно стандартным установщиком Inno Setup, а не чтобы рядом с setup.exe лежали архивы в 7-zip или FreeArc, переименованные в *.bin! И уж НЕ в коем случае (как многие сборщики делают) - сжать всё что нужно внешним архиваторами 7-zip или FreeArc, и другими, потом всё это "загнать" в Inno Setup, потмо в процессе установки игры, всё это начнёт копироваться на ЖД, потом распаковываться, потом перепаковываться в "игровые архивы" и только потом удаляться! ВОТ ЭТОГО НЕ НАДО!
Это во-первых требует на ЖД раза в 2-3 больше свободного места на ЖД и требует намного больше времени на установку! Мне нужно по другому! Пример: В папке Game у меня лежат все файлы игры и все распакованные игровые архивы (по папкам) и я всё это содержимое просто скомпилирую Inno Setup, - стандартного метода сжатия LZMA - вполне хватит! Начнётся ОБЫЧНЫЙ процесс установки игры (копирование файлов), вот всё что мне нужно, чтобы в процессе установки копирования всех файлов игры, каждая скопированная ОПРЕДЕЛЁННАЯ папка, сразу же после копирования - архивировалась в zip, с конкретным названием, после чего сразу же удалялась, потом копировалась следующая папка... |
Цитата:
|
Цитата:
|
Неправильно
Цитата:
|
El Sanchez, вот теперь увидел, благодаря - Iska! Спасибо!
7za.exe - какой брать и ещё вопрос Inno Setup ANSI или Unicode - имеет значение, какой брать? |
|
Iska, с DLL-кой такое прокатит или принципиально 7za.exe?
|
Цитата:
|
Iska, в 7-Zip, нет 7za.exe, есть DLL-ки и 7z.exe...
|
Цитата:
Находится в 7z1806-extra, который также лежит на странице загрузок. |
Цитата:
|
Iska и mwz, я просто уточнил - спасибо за пояснения! Чтобы просто упаковать в обычный zip, нужны такие "заморочки" и "спец-файл"?
|
TROY Diamond, что подразумевается под «заморочками» и под «спец-файлом»?
|
Iska , смайлик забыл поставить - всё в порядке, спасибо!
Iska, mwz и El Sanchez, подскажите, пожалуйста: 1. Как во время архивирования файлов "заставить индикатор процесса двигаться" или хотя бы чтобы было написано создание файла и т.п. Идеально бы ещё с процентами соединить! НОВЫЙ липовый (НЕ настоящий) индикатор процесса НЕ нужен! А то во время упаковки всё замирает, кнопка Отмена НЕ активна, конечный пользователь может решить что всё зависло, а создание некоторых больших архивов может занимает до 5-7 минут! 2. Как внести в список для деинсталляции, эти созданные архивы, установщик ведь о них НЕ знает, при удалении игры все архивы останутся в папки установки? Просто указать все архивы в [UninstallDelete]? 2.1. А если процесс установки, по какой-то причине, будет прерван, тут как сделать? Чтобы ВСЯ папка установки была удалена, если установка завершилась некорректно или вообще была переврана? 3. Есть ещё одна проблема - это те игры, которые хранят свои сейвы, файлы конфигурации и т.п. прям в папке установки, поэтому просто тупо удалить всю папку нельзя, нужно спросить пользователя "Оставить сохранения и т.п.?" |
Цитата:
Разборка с анализом протоколов и дальнейшим "опросом свидетелей" показала, что сын установил пиратскую игру, а затем деинсталлировал её. И всё бы ничего, но установил он её в корень диска Е, а деинсталятор запустил команду, которая в переводе на человеческий язык означала: "Удалить нахрен всю папку установки, и при удалении ни о чём не спрашивать". С Наступающим! |
TROY Diamond, вооот… Теперь Вы видите, что не всё так просто :)?
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
mwz, пираты — они такие :). Любимое дело — попытаться забросить «свои» библиотеки в системный каталог, забросить «свои» шрифты в каталог со шрифтами, нимало не заботясь о том, что не токмо функционал каких-то сторонних приложений, но и сама операционная система от таких вывертов может накрыться медным тазом. |
Iska, ну а липовый индикатор установки во время создания архивов как тогда сделать, или просто в момент создания архива, стандартную надпись "Копирование файлов", заменить на "Создание файла и т.п."?
|
Не надо липовый. Нужны отдельные и реальные. Как — надеюсь, коллеги Вам помогут.
|
Вложений: 1
Цитата:
Скрытый текст
Код:
[Languages] |
Кто платно поможет мне создать инсталлятор?
1) Выбор языка установщика; 2) Проверка на новую версию установщика; 3) Установки некоторых файлов; 4) Тихая установка дополнительных программ и утилит; 5) Установка ярлыков; 6) Показывать описание в отдельной окошке; 7) Интерфейс как на скриншоте. Скрин я сильно фотошопил. |
Цитата El Sanchez:
El Sanchez » Цитата:
2. Также подскажите, пожалуйста, как в этот скрипт добавить проверку ранее установленного приложения, например, по секции Uninstall, по названию и т.п., НО только с предупреждением, что приложение уже было установлено, БЕЗ запрета устанавливать "поверх"! ПРОБЛЕМА В ТОМ, ЧТО ПРИЛОЖЕНИЕ МОЖЕТ НАЗЫВАТЬСЯ ПО РАЗНОМУ и в секции Uninstall, оно может быть в различных разделах! Я готов указать в скрипте ВСЕ ВОЗМОЖНЫЕ варианты, только скажите, куда и как это сделать? |
Цитата:
Цитата:
Скрытый текст
Код:
function InitializeSetup: Boolean; |
El Sanchez вместо "AIMP" и "{FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}" - писать все возможные варианты?
А в MsgBox - написать что приложение уже было ранее установлено? А как соединить с тем скриптом правильно? |
Цитата:
Цитата:
Цитата:
|
El Sanchez, так вот добавить?
Код:
function InitializeSetup(): Boolean; Код:
procedure InitializeWizard; 3. Вы знали, наверное что будет это вопрос? ))) Как теперь подкорректировать размер свободного места на ЖД, который требует установщик? В нём ведь скомпилированы распакованные архивы и он считает их вес, а папки ведь поочередно удаляются после создания архивов, места нужно раза в 2 меньше, чем он хочет! |
Цитата:
|
Цитата:
Цитата:
Цитата:
|
El Sanchez, а если НЕ "забивать"? ))
2. Как сделать чтобы по умолчанию полученный установщик требовал для запуска права Администратора? "PrivilegesRequired=admin", - НЕ даёт нужного эффекта, "значка щита" у полученного setup.exe - нет! Приходится потом редактировать Манифест в полученном файле setup.exe, с помощью редактора ресурсов! Менять на "requireAdministrator". |
Всем привет.
Ищу человека который отлично ладит с inno setup. Задача: сделать стучалку на сервер при установке программы, чтобы можно было подсчитать количество уникальных установок (подсчет уже на уровне сервера и к задаче не имеет отношения). Разумеется "не за спасибо". Скажите пожалуйста в какую тему мне обратиться с этой задачей? Если я по адресу - то пишите в ЛС. Договоримся! |
1specific, «стучалка на сервер» делается в самом приложении, а не в инсталляции. И отрабатывать она должна в момент первого исполнения Вашего приложения. Так что, не страдайте ерундой.
|
1specific, AutoIt в помощь
|
Iska, это вы так решили для своих нужд?
У меня цель - отстучать об успешной установке приложения. Не о запуске, а об установке. В inno это реализуемо. Так к чему вообще ваше замечание не понимаю? habib2302, как autoit связан например с post запросом на сервер после установки приложения? Я не понимаю как он применим к моей задаче. |
1specific, можно добавить проверку на удачную установку инсталлятора и задать запуск autoit скрипта после удачной установки
|
habib2302, ну гуд. Спасибо за идею.
Но в целом вопрос способа реализации не поднимался. Ищется человек который сможет реализовать мою задумку, а как это делать - это ему уже виднее) хоть отдельный софт, хоть vbs, хоть как)) мне главное результат) |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
Iska, спасибо за ответ.
Цитата:
Цитата:
Цитата:
Цитата:
Пояснение к параметрам
|
Цитата:
Inno Setup "MSXML2.XMLHTTP"|"Microsoft.XMLHTTP" POST Send - Поиск в Google. Вот типичный образец использования класса (причём, даже с разбором ответа сервера). Если вместо «Inno Setup» укажете «VBScript», или «VB», или «VBA» — найдёте уйму примеров, которые только и останется, что перевести с VBScript на Pascal. Цитата:
Я бы нацарапал, но думаю, у более опытных в Pascal коллег сие выйдет гораздо лучше. |
Можете подсказать, почему у меня ошибка could not call proc?
Пытаюсь при запуске инсталлятора проверить установленную версию PowerShell и если она меньше 5.1, тогда скачивать и устанавливать её. Вот такой сокращённый код: Код скрипта
Код:
[Setup] Поясняю, ошибка возникает, когда я после скачивания PowerShell вставляю код открытия детализации "Показать" и скрытия кнопки "Скрыть" на странице скачивания. Без этого кода всё работает нормально. А при вставке кода, сразу ошибка, причём только при условия меньше или больше, а при равенстве условия сравнения версий, всё отрабатывает правильно. Вот этот короткий код в скрипте: Код в скрипте, приводящий к ошибке: "could not call proc"
Код:
// Во время показа страницы загрузки открываем по умолчанию скрытые детали загрузки... |
Эмм, попробую перефразировать по другому...
Я делаю установку программы, которая требует PowerShell последней версии 5.1 для Windows 7/8.0/8.1 (на 10-ке она стоит из коробки). Так вот, я хочу в инсталляторе отобразить детализацию скачивания файла обновления и убрать там кнопку "Скрыть/Показать". Но если я добавляю этот код, тогда программа вылетает с ошибкой "could not call proc". Поэтому я прошу помощи - что я делаю не так? Выше наверное никому не понятен мой сокращённый код. Выкладываю готовый код, тоже сокращённый (выкинул все лишние файлы и строки программы), но код компилируемый и рабочий:
Код:
if ExpandConstant(Copy(PSVersion,1,3)) < ExpandConstant('5.1') then А если у вас PowerShell уже обновлена, тогда вам нужно будет поменять на = (равно), иначе ничего происходить не будет. Далее, нужно раскомментировать код отображения детализированных данных между строками 105 - 120: Код:
procedure CurPageChanged(CurPageID: Integer); Что интересно, при условии = (равенства), никакой ошибки при компиляции не происходит. Пожалуйста профи, не игнорируйте, помогите... |
Цитата:
Исключение - изменение названия инсталлятора перед тем как отдать юзеру. Но высока вероятность что юзер его поменяет. Цитата:
Так что буду рад сотрудничеству, если вы готовы. |
Цитата:
Цитата:
Цитата:
Цитата:
|
El Sanchez, ну когда выйдет версия 10, тогда уже меня не будет ))) Да и даже когда она будет, то всё равно она менее сегодняшней 5.1 не станет по условию. Просто прога требует такую версию, но только в меньших версиях её код не срабатывает, поэтому для работы проги требуется не менее 5.1. Я рад, что хоть так работает )). Насчёт 2-го понял, приму к сведению.
Цитата:
Я пихал её и в начало, и в середину, и в конец момента скачивания. Но всё равно одно и то же, либо ошибка, либо никакого эффекта не происходит. Трудно мне до этого догнать, я всего-то пару месяцев как начал осваивать Inno Setup. |
Цитата:
Скрытый текст
Код:
function StrCmpLogicalW(psz1, psz2: string): Integer; external 'StrCmpLogicalW@shlwapi.dll stdcall'; |
Цитата:
Цитата:
Цитата:
|
Цитата:
Чтобы считать количество уникальных скачиваний и знать от какого из партнеров был скачан и установлен файл делается связка md5+hwid Где md5 привязывается к партнеру в БД и генерится на сервере путем добавления байтов, а hwid как показатель уникальности установки. После чего данные проверяются, если установка уникальна (hwid,ip и т п), то партнеру засчитывается +1 установка (партнер определяется по md5). Сгенерировать отдельный установщик под партнера (или как вы говорите GUID) возможно, если бы партнеров было 5-10 или 30. Но партнеров много, и неизвестно сколько. Под каждого генерить установщик это проблемно. Потом их все залить на хост - это уйма места. И далее если программа обновилась, это что каждому партнеру снова собирать и заливать установщик и закреплять руками md5 для каждого? Поэтому было принято такое решение - исходный файл один, а далее под партнера при скачивании по его реф. ссылке генерится md5, который записывается в базу. Надеюсь доступно описал весь процесс) Цитата:
Цитата:
|
El Sanchez, о, спасибо большое! Как просто решаются сложные вопросы )) и как же сложно решить простые задачи ))
Я так понял, эта функция function StrCmpLogicalW - сравнение строк в Unicode-формате встроенными средствами Win API (String Compare Logical Wide). И вы мне подкинули решение сравнения версий. Немного не ясна для меня прозрачность логики работы (я так понял 5.2 была выставлена для теста?): Код:
if not RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine', 'PowerShellVersion', PSVersion) or
Вторым условием производится сравнение версии из реестра с требуемой нами. Но тогда и оно не отрабатывает, тем более, если оставить там 5.2. Или я не правильно эту конструкцию читаю? По-моему, моя прежняя конструкция вполне прозрачна (для меня) и отрабатывает правильно, даже если завтра выйдет версия 10. Этот мой код с учётом вашей поправки насчёт лишнего ExpandConstant: Код:
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine','PowerShellVersion', PSVersion); На самом деле моей программе достаточно и PowerShell v5.0. Это прога по разбивке и упаковке папок на части по 4 Гб/2 Гб/Целиком, а так же, по загрузке файлов из интернета из XML со ссылками, контрольными суммами, и пр. тех. данными, и средствами PowerSell это удачно реализовалось. Для справки: на Win 7 из коробки установлена PS 2.0, на Win 8.0 стоит PS 3.0, на Win 8.1 - PS 4.0, на Win 10 - 5.0. Последняя стабильная 5.1. И больше на Windows 10 мало вероятно что предвидится. |
Цитата:
|
Iska, ну допустим, пусть будет даже и так. Это ядро пока ещё не зарелизено на оффсайте, там давно уже лежит версия 5.1 и она давно не обновляется. Но разве это на что-то влияет? Предположим программе требуется для её стабильной работы версия 5.1, не меньше, но конечно же можно старше и если у юзера установлена меньшая версия, тогда ему предлагается обновиться как минимум на требуемую 5.1. И что это меняет, для работы моей программы, даже если завтра выйдет PS 6,0, потом 7.0 и так далее? Но они же будут не меньше 5.1, а если у юзера установлена более свежая версия, тогда логично ему и не будет предлагаться скачать и установить 5.1.
Ну я так понял, это просто опровержение моих слов типа "мало вероятно что предвидится" :) |
Цитата:
Цитата:
Цитата:
|
ErikPshat, мы уже поимели версию ОС Windows за номером 10.0 сразу после версии 6.3. Так что не зарекайтесь.
|
El Sanchez, ещё раз благодарю за помощь и разъяснения! Потихоньку кое-что проясняется.
Есть ещё один один момент, который я оказывается упустил. Дело в том, что на Windows Vista идёт версия PS 1.0, на Windows 7 идёт из коробки версия PS 2.0 и что самое важное, они прописываются по другому пути в реестре, там разница в цифре 1 в пути: Код:
SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine Тогда получается, нужно добавить условие проверки ключа реестра под 7-ку. Правильно ли будет, если я сделаю так: Код:
if not RegQueryStringValue(HKLM,'SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine','PowerShellVersion',PSVersion) or Цитата:
Цитата:
Тогда при сравнении 10. < 5.1 разве система не поймёт, что нужно сравнивать цифры до точки, а потом после точки. Если стоит точка, тогда думаю система должна определять, что это дробная запятая и, если после точки ничего не стоит, то это означает 0, т.е. 10.0 < 5.1. Это конечно можно проверить на практике, но пока это так, размышления и аналитическая деятельность. |
Цитата:
AutoIt
Код:
AutoItSetOption("MustDeclareVars", 1) Цитата:
Отдельное внимание на последнюю группу. |
Цитата:
Цитата:
Цитата:
|
Iska, El Sanchez, ага, спасибо! Понятно, значит идёт посимвольное сравнение как текст, а не как цифры.
Да, я это на практике проверил, поменял в реестре версию PS, просто добавил 1 спереди, получилось 15.1 ))) Оказывается для 64-битки путь автоматически в реестре меняется на Wow6432Node: Код:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\PowerShell\3\PowerShellEngine Ну и далее пошло скачивание и установка, т.е. условие сравнения не выполнилось правильно. То есть, вы правы, сравнение идёт посимвольно и никакие точки, запятые, дроби тут не учитываются. Ещё нашёл функцию в Inno Preprocessor - DecodeVer и EncodeVer, но не понял, почему она не задействуется сразу, хотя вроде бы функция объявлена изначально по умолчанию. |
Цитата:
Но зато пишут не менее интересное: Цитата:
Цитата:
Скрытый текст
Код:
Windows Registry Editor Version 5.00 |
Iska, ну да, у меня то же самое. Просто я говорю о том, что по обычному пути поменял версию PowerShell, потом удивился, что как на скриншоте выше версия не изменилась. Сначала не понял, что за фокусы, подумал, может быть изменения не применились, перезагрузился, снова скомпилировал и опять показывает мне ответ 5.1, хотя я поменял на 15.1 ))) Потом вспомнил об этой ветке реестра, полез туда и там поменял, тогда оно и показалось во всей красе. Ну это я просто так написал, вдруг кому по ходу дела пригодится. Правда, чтобы сменить версию PS в реестре, пришлось себя владельцем ветки сделать, а потом и права выдать :D.
|
Цитата:
|
Всем привет.
Ищу человека который отлично ладит с inno setup. Задача: сделать стучалку на сервер при установке программы, чтобы можно было подсчитать количество уникальных установок (подсчет уже на уровне сервера и к задаче не имеет отношения). Более подробно писал об этом в этом посте. Разумеется "не за спасибо". Пишите в ЛС. Договоримся! |
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
Мне принципиально нужно чтобы установщик запускался и требовал права Администратора, а тех пользователей у которых нет прав Администратора или которые не хотят запускать с правами Админа установщик - обойдутся! (есть такие даже в 2019 году ещё) странно, - да, что программе которая копирует свои файлы в системные папки, и/или регистрирует какие-то библиотеки, делает записи в реестре - нужны права Администратора? ))) |
Цитата:
Разумеется скачивания и запуски установщика считать бессмысленно. Поэтому нужно считать только успешные установки. И после успешной установки выполнять сценарий отправки на сервер hwid пользователя (как идентификатор уникальной железяки = уникальной установки) и md5 установщика (как идентификатор реферала). Знаю что md5 вариант не самый лучший. Но я исхожу из того, что просто не смогу физически создать и содержать для каждого партнера отдельный установщик, и обновлять его при необходимости. А вот md5 могу генерировать сервером и записывать в базу перед тем как отдать файл на скачивание, практически на лету. Дополнительным преимуществом защиты от накрутки может быть отправка и других данных, например версия OS, локальная дата и время установки и т.п. - тут уже лучше с вами (исполнителем) пообщаться на эту тему лично. Если будут еще вопросы - с радостью отвечу. |
Цитата:
Цитата:
Цитата:
|
Цитата:
+ если сюда включить OS и возможно какие то другие уникальные данные (например дату установки винды, или какие то данные из реестра) то уже можно хоть какой то портрет пользователя получить. Вариантов лучше я придумать не смог. Можете что-то предложить? Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
2. El Sanchez и Iska - НЕ знаю у кого спросить, подскажите, пожалуйста, где можно найти информацию про подписывания цифровой подписью своего дистрибутива? Видел такую реализацию в некоторых репаках сделанных в Inno Setip и аддонах на основе SFX-архивов и Inno Setup. Пусть это будет "НЕ серьезная" цифровая подпись - просто чтобы проверяла целостность и контрольные суммы файла. |
Цитата:
|
Iska, нет это нечто иное сделанное с помощью скрипта, т.к. дальнейшая установка невозможна если места не хватает! А "значения рассчитываются автоматически" - только информирует.
P.S. По второму вопросу кто может помочь? |
Цитата:
|
Цитата:
Цитата:
Цитата:
|
Цитата:
В целом не понятно какие варианты тогда есть чтобы реализовать задумку на уровне inno setup?) |
Цитата:
Требуемое место установки
#Define NeedSize 5000 ;;Если у вас архивы FreeArc, то здесь укажите сколько необходимо места в Мб ;;Иначе просто закоментируйте строку ;;Автор: Shegorat [Setup] AppName=My Program AppVerName=My Program v 1.5 DefaultDirName={pf}\My Program OutputDir=. Compression=lzma/ultra InternalCompressLevel=ultra SolidCompression=yes [Languages] Name: ENG; MessagesFile: "compiler:Default.isl" Name: RUS; MessagesFile: "compiler:Languages\Russian.isl" [Files] Source: {win}\help\*.hlp; DestDir: {app}\Files; Flags: external [CustomMessages] RUS.FreeSpace=Доступно места на диске: RUS.NeedSpace=Требуется места на диске: RUS.MB=Мб RUS.GB=Гб RUS.TB=Тб ENG.FreeSpace=Free space on disk: ENG.NeedSpace=Need space on disk: ENG.MB=Mb ENG.GB=Gb ENG.TB=Tb [code] var NeedSpaceLabel,FreeSpaceLabel: TLabel; FreeMB, TotalMB: Cardinal; SizeStr: String; SizeInt: Integer; SymbolNumber: Integer; function GetSize(): Integer; begin SizeStr:= WizardForm.DiskSpaceLabel.Caption; for SymbolNumber:= 97 to 122 do begin while (Pos(Chr(SymbolNumber), SizeStr) > 0) do Delete(SizeStr, Pos(Chr(SymbolNumber), SizeStr),1); while (Pos(AnsiUppercase(Chr(SymbolNumber)), SizeStr) > 0) do Delete(SizeStr, Pos(AnsiUppercase(Chr(SymbolNumber)), SizeStr),1); end; for SymbolNumber:= 192 to 255 do begin while (Pos(Chr(SymbolNumber), SizeStr) > 0) do Delete(SizeStr, Pos(Chr(SymbolNumber), SizeStr),1); end; while (Pos('.', SizeStr) > 0) do Delete(SizeStr, Pos('.', SizeStr), 1); Delete(SizeStr, Pos(',', SizeStr), 5) Result:= StrToInt(Trim(SizeStr)); end; function CompareNum(FirstNum, SecondNum: Integer): Boolean; begin if FirstNum < SecondNum then Result:= False else Result:= True; end; function NumToStr(Float: Extended): String; begin Result:= Format('%.2f', [Float]); StringChange(Result, ',', '.'); while ( Pos('.', Result) > 0 ) and ( (Result[Length(Result)] = '0') or (Result[Length(Result)] = '.') ) do SetLength(Result, Length(Result) - 1); end; function MbOrTb(Float: Extended): String; begin if Float < 1024 then Result:= NumToStr(Float)+ExpandConstant(' {cm:MB}') else if Float/1024 < 1024 then Result:= NumToStr(Float/1024)+ExpandConstant(' {cm:GB}') else Result:= NumToStr(Float/(1024*1024))+ExpandConstant(' {cm:TB}'); end; procedure GetFreeSpaceCaption(Sender: TObject); var Path: String; begin Path:= ExtractFileDrive(WizardForm.DirEdit.Text); GetSpaceOnDisk(Path, True, FreeMB, TotalMB); FreeSpaceLabel.Caption:= ExpandConstant('{cm:FreeSpace} ') + MbOrTb(FreeMB); NeedSpaceLabel.Caption:= ExpandConstant('{cm:NeedSpace} ') + MbOrTb(SizeInt); if WizardForm.CurPageID = wpSelectDir then begin WizardForm.NextButton.Enabled:= CompareNum(FreeMB, SizeInt); end; end; procedure InitializeWizard(); begin WizardForm.DiskSpaceLabel.Hide; #ifdef NeedSize SizeInt:= {#NeedSize} #else SizeInt:= GetSize; #endif NeedSpaceLabel:= TLabel.Create(WizardForm); NeedSpaceLabel.SetBounds(ScaleX(0), ScaleY(198), ScaleX(209), ScaleY(13)) NeedSpaceLabel.Parent:= WizardForm.SelectDirPage; NeedSpaceLabel.Transparent:= true; FreeSpaceLabel:= TLabel.Create(WizardForm); FreeSpaceLabel.SetBounds(ScaleX(0), ScaleY(216), ScaleX(209), ScaleY(13)) FreeSpaceLabel.Parent:= WizardForm.SelectDirPage; FreeSpaceLabel.Transparent:= true; WizardForm.DirEdit.OnChange:= @GetFreeSpaceCaption; WizardForm.DirEdit.Text:= WizardForm.DirEdit.Text + #0; end; procedure CurPageChanged(CurPageID: Integer); begin if CurPageID = wpSelectDir then GetFreeSpaceCaption(nil); end; |
Цитата:
Цитата:
Цитата:
|
Цитата:
Значит делаем как можем. Кто готов - пожалуйста, буду рад обсудить детали и приступить. На данный момент нужно хоть какое то решение, дальше уже можно будет переделывать и улучшать. |
Цитата:
|
TROY Diamond, значит, я был не прав. Однако сие никак не поможет изменить ситуацию, если места действительно не хватает.
|
Цитата:
1. Компилируется мастер-копия установщика. 2. Клиент по партнерской ссылке запрашивает файл. 3. Сервер делает копию мастер-файла, генерирует GUID и записывает его в конец копии. 4. Копия отдается клиенту. 5. Если ошибок при приеме-передаче не было, GUID заносится в таблицу партнера в БД. 6. Сервер удаляет копию. 7. Установщик в конце установки считывает GUID и посылает его на сервер GET-запросом в параметрах. 8. Сервер проверяет GUID в БД. Если есть, то гут, партнеру +1, GUID удаляется из БД. Если нет, то попытка накрутки, баловство и прочие ништяки, с которыми скоро придется познакомиться. Цитата:
|
Цитата:
Цитата:
По сути вся схема реализации уже понятна. От инсталлятора просто требуется отправить нужные данные на сервер и всё (+ возможно добавление контрольной суммы к каким то данным) . Это небольшой кусок кода. Возьметесь? |
Цитата:
Например, один архив (УСЛОВНО) весит в упакованном виде 700 МБ, распакованная папка, которая будет скопирована в процессе установки, будет занимать на ЖД 1,5 ГБ (условно), через 1-2 минуты ЭТА ПАПКА, будет упакована в архив и СРАЖУ ЖЕ УДАЛЕНА, останется только 700 МБ архив на ЖД пользователя, начнётся копирование следующей папки, которая также упакуется в архив и удалится. Поэтому 15 ГБ, с запасом хватит, а если бы папки НЕ удалялись бы сразу же, то тогда нужно было бы как раз 30 ГБ места на ЖД. Игра в конечном итоге (в готовом к "употреблению" виде), по окончании установки, занимает на ЖД - всего 12 ГБ (условно) - я хочу задать 15 ГБ, с запасом, вместо 20-25 ГБ, сколько хочет Inno Setip из расчёта скомпилированного... El Sanchez, мы друг друга правильно поняли? Теперь когда всё ясно можете, помочь? |
Цитата:
Цитата:
Цитата:
Скрытый текст
Код:
[Code] Цитата:
Цитата:
|
El Sanchez и что никак не решаемо?
|
Привет! Сразу скажу, что очень плохо разбираюсь в коде.
В общем, делаю установщик модификации для игры GTA и при установке данной игры в реестре создаётся путь к файлу gta_sa.exe(исполняемый файл). Я указываю в установщик путь к данному значению в реестр, чтобы в установщике автоматически указалась папка с игрой в качестве пути, но так как значение в реестре ведет прямо к exe файлу - он указывается в пути по умолчанию. Вопрос: как исключить этот файл из значения, чтобы указывалась только папка с игрой? Код:
DefaultDirName={reg:HKCU\Software\SAMP,gta_sa_exe|} |
Цитата:
Код:
DefaultDirName={code:ExtractFileDir|{reg:HKCU\Software\SAMP,gta_sa_exe|}} |
Цитата:
|
Здравствуйте!
Помогите, пожалуйста, разобраться с функцией AnimateWindow+прозрачностью окна при перемещении. Проблема в следующем: 1) Плавное закрытие инсталлятора при выходе - работает (или работало) на отлично! 2) Добавил прозрачность окна при перемещении - работает, но плавное закрытие окна инсталлятора при нажатии на кнопку "Отмена" работать перестаёт. Заранее Большое Спасибо!!! Скрипт:
Код:
const |
парни подскажите, как сделать что бы после установки в тихом режиме с ключом (/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP-) программа не запускалась?
потому что там стоит галачка Скрытый текст
|
Цитата:
|
нет всё равно запуск идёт программы
|
Есть пример скрипта для обработки своих параметров при установке через /silent?
Скажем /1 задает одни умолчальные параметры чекбоксов, /2 другие. Давно уже не занимался Inno |
Всем привет. Кто может помочь, как снять обводку с кнопок. В скриптинге нуб:)
Вот архив с скриптом. http://rgho.st/6hwhMlbnC |
FiRmaN, значит, пора учиться.
|
Цитата:
|
Цитата:
Код:
[Code] Код:
[Code] |
Доброе время суток. Нужно, чтобы при выборе или отмене компонента и задачи добавлялась или удалялась часть команды из секции run?
Например: При выборе задачи "Создать ярлык на РС" добавлялась команда SHORTCUT_DESKTOP=1. Код:
[Run] |
habib2302, нет, нельзя. Файл инсталляции формируется в момент его создания. Работайте с набором задач, для которых будут разные параметры у исполняемой команды, либо работайте непосредственно в коде.
P.S. Я надеюсь, Ваша инсталляция не состоит только из одного этого файла? |
|
Цитата:
Код:
[Tasks] |
boss911, помимо ярлыков на рс есть 4 компонента и ярлык в пуск
|
Начинают выясняться интересные подробности…
Цитата:
|
Iska, уже сделал. посредством записи команд в ini файл через секцию [Ini] и чтение из ini файла через код
|
Вложений: 1
Ребята, подскажите пожалуйста, как можно изменить стандартное окно с выбором языков установки?
Чтобы было похоже на то, что во вложении. |
помогите забороть странный колбек:
Скрытый текст
[Setup] AppName=DeltaMAX AppVerName=DeltaMAX 2.0.1.0 DefaultDirName={tmp} OutputDir=c:\Files\ [code] type EnumCallback=procedure(retcode: integer;lpUser:Longint); function WrapMyCallback(callback:EnumCallback; paramcount:integer):longword; external 'wrapcallback@{sd}\Files\innocallback.dll stdcall'; type DELTAMAX_ENCODE_OPTIONS = record lpszLicensedTo: ansistring; lpszLicenseKey: ansistring; nMemoryMax: Integer; nMemoryMaxPercent: Integer; nFreeMemoryMin: Integer; nLowMemMode: Integer; nFootprintSize: Integer; bAutoIncreaseFootprintSize: bool; bEnableMultiPass: bool; nMultiPassThreshold: Integer; nMultiPassMaxAdditionalPasses: Integer; pProgressCallback: longword; lpUserData: integer; end; procedure DeltaMAXInitEncodeOptions(pOptions: DELTAMAX_ENCODE_OPTIONS); external 'DeltaMAXInitEncodeOptions@{sd}\Files\DeltaMAX.dll cdecl'; function DeltaMAXEncode(szSource: ansistring; szTarget: ansistring; szDiff: ansistring; pOptions: DELTAMAX_ENCODE_OPTIONS): Integer; external 'DeltaMAXEncode@{sd}\Files\DeltaMAX.dll cdecl'; procedure ProcessDiff(code: integer; lpUser:Longint); begin MsgBox('data', mbError, MB_OK); end; var Data: PAnsiChar; Options: DELTAMAX_ENCODE_OPTIONS; callback:longword; userdata:ansistring; function initializesetup():boolean; var err: Integer; n,s: ansistring; begin callback:=WrapMyCallback(@ProcessDiff,2); n := 'DEMO'; s := 'DEMO'; DeltaMAXInitEncodeOptions(Options); Options.lpszLicensedTo := n; Options.lpszLicenseKey := s; Options.nMemoryMax := 0; Options.nMemoryMaxPercent := 80; Options.nFreeMemoryMin := 8; Options.nLowMemMode := 1; Options.nFootprintSize := 0; Options.bAutoIncreaseFootprintSize := true; Options.bEnableMultiPass := false; Options.nMultiPassThreshold := 0; Options.nMultiPassMaxAdditionalPasses := 1; //Options.lpUserData := 0; //Options.pProgressCallback := callback; err := DeltaMAXEncode('D:\1.txt', 'D:\2.txt', 'D:\patch.diff', Options); if err <> 0 then MsgBox('Bad! ' + IntToStr(err), mbError, MB_OK) else MsgBox('Success! ' + IntToStr(err), mbError, MB_OK); end; сам sdk в аттаче. нужно, чтобы в структуре параметр pProgressCallback корректно исполнял колбек для обсчета процентов согласно документации SDK. полагаю, у меня ошибка в данных lpUserData, я не знаю какой указатель и куда должен быть использован. для использования надо из папки SDK\Redist скопировать ANSI версию DeltaMAX.dll в C:\Files, туда же InnoCallback.dll. также нужно поместить 1.txt и 2.txt с различающимися данными. D:\patch.diff - сюда будут записаны файл с изменениями. из соображений копирайтов, серийный номер не прикладываю, нужно будет подождать пять секунд и нажать OK для запуска процесса. |
Цитата:
Скрытый текст
Код:
[Setup] |
El Sanchez, благодарю! :victory:
Давно не кодил и ошибка основная у меня была в том, что я полностью не описал структуру, почему то решил, что можно некоторые параметры не описывать и оставить себе только нужные - а так делать нельзя, такое можно только в коде функции. К тому же не выполнил главного условия True функции колбека, без которого это дело тоже не заведется. Также прошляпил var в прототипах, хотя использовал почему-то out и работало.. Вопрос у меня следующий, проценты выполнения привязаны только к прогресс бару? Вообще я хотел бы адаптировать под консольное приложение на дельфи и мне там было бы неплохо прогресс выполнения привязать к строке, отображающей проценты в числовом виде. Пока не могу придумать как описать проценты от 0 до 100 в ProgressCallback, ибо даже если вручную указать min 0, max 100, step 1, то общее количество вызовов в колбеке мы не знаем, их может быть 250, 400 и т.д. по идее в dPercentDone должно лежать число максимального цикла колбека, чтобы выполнить обсчет процентов? может быть потому что другой тип данных Single, а не Double? а с Double работать не хочет. надо будет с дельфи повозиться, посмотреть как там дела будут обстоять с Double. добавлено вобщем, проблема решена на дельфи: Скрытый текст
function DiffProgressCallback(nn:double; lpUserData:pointer): bool; stdcall;
begin Application.ProcessMessages; Form1.edt1.Text := IntToStr(round(nn)); Form1.pb1.position:=round(nn); Result:=True; end; double нормально отрабатывает, только сначала не понял, почему по третьему кругу прогресс бар и проценты идут. оказалось, так надо :) разные этапы так разделяются. я проверил код на Inno и на Delphi, что-то типа: ppos:=0; ... в колбеке: inc(ppos); и считаем проценты по ppos, минусуя 100 процентов при превышении интервала. сравнив выполнение с double на дельфи и там же рядом inc кода на Inno - абсолютно одинаково считает, единственное на Inno надо учитывать "переполнение" счетчика процентов, когда идет вторая и третяя стадия выполнения. извращаться с Single в данном случае не обязательно :) |
Цитата:
Цитата:
Цитата:
|
El Sanchez, да, я это уловил и отредактировал предыдущее сообщение, вопрос полностью решен, спасибо еще раз!
там кстати на количество проходов влияют параметры: LOptions.bEnableMultiPass := true; LOptions.nMultiPassThreshold := 0; LOptions.nMultiPassMaxAdditionalPasses := 3; если мультипроходы отключены или выставлены в 1, то только один раз до 100 процентов выполняется. а на образце по дефолту 3 прохода выставляется, поэтому чуть не запутался с этим, думал глюки снова :) |
Подскажите каким способом можно скрыть кнопку Inno Setup из панели задач ? Окно я скрываю, а кнопка остается и показывает прогресс распаковки, мне это не нужно.
SetWindowLong пробовал, не помогает. |
Цитата:
|
Цитата:
Код:
#ifndef IS_ENHANCED |
Вложений: 1
Добрый день!
Помогите решить проблему сохранения файлов SlideShow в память и последующей их воспроизведения из памяти: Код:
#ifndef IS_ENHANCED |
Цитата:
|
El Sanchez
Понял. Спасибо за ответ... |
Здравствуйте! Есть ли способ извлечения файлов из инсталлятора во время запуска не в папку {tmp)?
Предположим в секции [Files] помещаю файл: Код:
[Files] Код:
ExtractTemporaryFile('utility.exe'); Пока ничего не приходит в голову, как копировать файл из временной папки, типа так: Код:
ExtractTemporaryFile('utility.exe'); |
Добрый день. Подскажите пожалуйста, как сделать так, чтоб при установке приложения, на рабочем столе создавался ярлык со ссылкой, которую можно открыть через указанный браузер?
Например, чтоб сайт yandex.ru открывался через Explorer, нужно создать на рабочем столе такой ярлык «C:\Program Files\Internet Explorer\iexplore.exe» //yandex.ru Можно ли в inno setyp сделать подобное, чтоб создавался ярлык со ссылкой, которая открывалась бы через указанный браузер? |
ErikPshat, а с помощью ExtractTemporaryFiles(s) никак это не сделаешь. Если посмотреть исходники, то там код для этих функций работает только в пределах временной папки.
Так что способ копирования вполне себе, только не забудь перед копированием файла создать нужные папки, если они не существуют, например: ForceDirectories(ExpandConstant('{sd}\Tools')) |
Цитата:
|
Цитата:
|
Цитата:
Правда я создаю папку такой командой: CreateDir(ExpandConstant('{src}\Tools')); Цитата:
А используемая конфиденциальная утилита, от именитого производителя Sony, не понимает кириллицу и аналогов не имеет. Так вот такие юзеры постоянно жалуются, типа нифига не работает ваша прога. И это довольно частая проблема. Надоело каждый день по 10 раз объяснять, что не надо называть комп и имя профиля, создавать почтовые ящики, исполььзовать пароли - на кириллице. |
Цитата:
Выводите просто ярлык интернета на рабрчий стол. А при его запуске, будет у юзера открываться его браузер, выставленный у него по умолчанию. Воспользуйтесь официальной функцией Inno Setup по созданию ярлыков. Укажите секцию [Icons] и выводите URL-ярлык, например так: Код:
[Icons] |
Цитата:
Цитата:
Как вариант
Код:
[Setup] Цитата:
Скрытый текст
Код:
[Setup] |
Цитата:
|
Цитата:
|
Irenis, Только если через планировщик. Но вообще такое не рекомендуется.
|
Всем привет! На работе дали задание сделать сборник инсталляторов. Этим я никогда не занимался. Есть 2 основные программы и 2 файла которые устанавливают службы (ярлыки). Можно ли сделать с помощью этой программы сборник, чтобы открывалось окно и я мог выбрать, что хочу установить?
|
Цитата:
|
Спасибо! Попробую
|
Цитата:
Сделано на Inno Setup |
Здраствуйте. Подскажите пож. константу папки Сохраненные игры (C:\Users\XXX\Saved Games). В справке такой нет.
|
ROMKA-1977, как вариант
Код:
{sd}\Users\{username}\Saved Games Код:
[Code] Код:
{reg:HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders,%7B{4C5C32FF-BB9D-43B0-B5B4-2D72E54EAAA4}} |
ROMKA-1977, или же
%USERPROFILE%\Saved Games |
Цитата:
IsAnsi
Наверху кода создаю такую функцию:
Код:
function IsAnsi(S: String): Boolean; var S1, S2: string; Код:
if not (IsAnsi(ExpandConstant('{src}'))) then В инете нашёл такую интересную процедуру определения символов по их номерам и даже по диапазонам номеров в десятичном виде: Код:
procedure justNumbers(Sender: TObject; var Key: Char); Либо отказаться от первой функции и сделать определение символов по их номерам? Чую собака неглубоко зарыта, но что-то у меня пока не получается никак. |
Для одного из проектов искал самый быстрый подсчет crc32 для файлов и решил сделать dll, кому интересно забирайте в аттаче.
подробнее...
Алгоритм работает так: если поддержку SSE 4.2 процессор имеет, срабатывает аппаратный подсчет crc32c (с - использование Intel полинома: $1EDC6F41), в противном случае, если процессор слишком старый и не имеет поддержку SSE 4.2, то срабатывает crc32cfast с оптимизацией на ассемблере (имеет тот же результат подсчета). отличие результата подсчета от стандартного crc32 только из-за использования другого инициализационного полинома.
По заверению авторов кода, результаты подсчета следующие: - Our optimized unrolled x86 version - aka crc32cfast() - performs the test at a very good pace of 1.7 GB/s; - SSE 4.2 version - aka crc32csse42() - gives an amazing 3.7 GB/s speed (on both Win32 and Win64 platforms); - simple rolled version of the algorithm (similar to the one in Delphi zlib unit) runs at 330 MB/s. Основано на: https://synopse.info/fossil/info/8fe7cc53b7 |
usermode, ещё одна DLL конечно никогда не помешает. Только в наши времена подсчёт CRC32 имеет актуальность на маленьких файлах, пускай даже самый быстрый подсчёт CRC32. По крайней мере даже MD5 быстрее подсчитывается стандартной функцией препроцессора GetMD5OfFile, не говоря уже про более точный SHA-1 и более быстрый подсчёт больших файлов по 1-4-10-20 Гига стандартной функцией препроцессора GetSHA1OfFile. Может быть я ошибаюсь, вашу утилиту не пробовал, но на практике часто приходится подсчитывать файлы по 4 и более Гб, так вот, какой бы быстрый не был бы CRC32, так это можно уснуть надолго, тогда как SHA-1 обычно замечено мною, что на несколько махов быстрее подсчитывается :)
Кстати, стоит мне изменить путь s:='D:\somebigfile.dat'; или подсунуть по этому пути реальный файл, как прога тут же выдаёт ошибку: Ну а мне никто так и не поможет? |
ErikPshat, у меня dll на всех ОС, включая Windows 10, работает нормально. Может причина в "неуниверсальных" параметрах выделения или освобождения памяти.
Можно попросить протестировать "болванку" на дельфи? Нужно прописать путь к существующему файлу, нажать каждую кнопку и сообщить, на каких будут ошибки. Заодно сравните на гигабайтных файлах скорость подсчета сравнительно md5 и sha-1 (предпочтительно на ssd при наличии) и убедитесь в обратном :) У меня на ssd подсчитывает фильм 2.22 Gb стандартной системной реализацией за 4.8sec, sse4.2 за 0.8sec, fast assembler за 1.2 sec. Цитата:
Скрытый текст
Код:
procedure InitializeWizard; лучше учесть те символы, что можно, чем учитывать все, что нельзя. add причина ошибки dll в некорректном определении технологии SSE 4.2, там где ее нет, например на CPU с SSE 4.1, она определяется что есть. |
Цитата:
За код спасибо, правда я видел подобные варианты, но видимо это самый универсальный вариант, правда я хотел бы взять диапазон через Key: Char по нумерации в таблице ASCII-символов. |
Вложений: 1
CRC32-C Ansi/Unicode Dlls *fixed*
Пришлось исправлять косяки разработчиков, плохо работало определение наличия технологии SSE 4.2 (кто ж мог подумать :) ) в оригинале: test edx,$100000 // перепутали регистр, по которому берется информация для SSE 4.2 setz al // неправильная установка флага исправленный: test ecx,$100000 // fix setne al // fix фикс основан на интеловских доках, где достаточно сделать проверку только на поддержку SSE 4.2: https://software.intel.com/en-us/art...struction-sets |
usermode, окей, теперь работает. Но так не честно. Чтобы быть объективным, тогда уж надо подсчитать время и потом сравнивать посекундно, какая функция ведёт подсчёт быстрее. Вот так я подсчитал время перед стартом подсчёта контрольной суммы и после, заодно можно сравить по времени подсчёт MD5 и SHA-1 того же файла:
Скрипт
Код:
;InnoSetupVersion=5.6.1 (Unicode) Лучше видно будет на больших файлах, где-то 2-4 Гб, чем больше - тем очевиднее. Вот тогда можно и рассудить. Вот пример вычисления чек-сумм файла 3,80 ГБ:
|
Цитата:
Скрытый текст
Код:
function IsAnsiOrSym(S: String): Boolean; |
ErikPshat, а у меня такие результаты на ssd на файле в 2.22Gb:
Скрытый текст
Код:
#define CP = (Defined UNICODE) ? "unicode" : "ansi" C5433036 Time: 00h:00m:00s:842ms --------------------------- 9e7592826a085607311cd0a38f17ef19 Time: 00h:00m:04s:602ms p.s. там еще может быть момент "первого чтения". когда доступ к диску замедлен, либо тот же диск интенсивно задействован прриложениями, тогда изначально может показаться что CRC32 "тормозит", но на самом деле оно всяко быстрее md5, по крайней мере на моем Core i7 процессоре. |
Цитата:
Цитата:
А у меня, как я ранее выкладывал скриншот своего процессора на нетбуке Asus Eee PC 1215N Intel Atom D525, то у него SSE3 максимум, поэтому MD5 вычисляется намного быстрее. Вот результаты на файле 3,77 ГБ:
|
Цитата:
А попробуйте еще виндовый апишный подсчет crc32, будет ли он у вас быстрее, чем подсчет в dll (у меня виндовый подсчет медленнее в 10 раз): Скрытый текст
Код:
#define CP = (Defined UNICODE) ? "unicode" : "ansi" В интернетах должна быть реализация md5 под sse2, хотя некоторые разработчики для своих брутилок тоже делали на ассемблере очень быстрые алгоритмы :) |
Цитата:
Цитата:
|
Цитата:
Цитата:
|
usermode, переместил MD5 на первое место, то же самое: 00:15:678
А вот API CRC32: 00:00:015 - как так возможно? :) А Fast CRC-32C: 00:00:000 :) В общем, на первом результате происходит долгое ожидание, такое впечатление, что файл просто сначала кэшируется во временную память, ну и на раскрутку цилиндров видимо тратится время. А второй и третий результат выдаётся практически тут же. |
Цитата:
Скрытый текст
Код:
#define CP = (Defined UNICODE) ? "unicode" : "ansi" ErikPshat, http://qaru.site/questions/332124/crc32-vs-crc32c |
Цитата:
Цитата:
Попробуйте еще так: Скрытый текст
Код:
[Setup] |
Цитата:
Я разделил ту функцию на 2 отдельные функции. Ну там переменную "n" поменял на "m", т.к. первая у меня уже используется в коде. Вот моя химия:
Код:
function IsAnsi(S: String): Boolean; Проверил ваш код. Всё отлично работает! Из функции exit; перенёс в исполняемый код, т.к. мне нужно, чтобы после оповещения, окно закрывалось и прекращало работу. Спасибо большое!!! |
Народ, у меня вопрос по секции [UninstallDelete]. При удалении приложения нужно так же удалять конфиг приложения. Но можно ли сделать, что б уинсталлер просил подтверждение при удалении?
|
Цитата:
Код:
[Setup] |
Dodakaedr, лучше бы вопрос задавался в самом начале процесса деинсталляции, а не в конце (если я правильно понял логику кода).
|
Цитата:
И наверно нужно было уточнять, что конфиг не один а несколько. И достоверно известна только папка в которой они находятся, но не их названия... Изменил код на как мне казалось рабочий вариант. [code] Код:
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); |
Цитата:
Цитата:
И судя по ответу Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
Народ. Есть игра, в корне которой лежит текстовый файл config.ksc, с текстом
Код:
(const) %[ Так вот как бы настроить создание этого файла в установщике? Нужно что б на странице выбора папки установки игры, или на следующей после этой странице можно было выбрать путь к папке сохранения (и создание этой папки если ее нет). И после завершения установки этот путь должен прописаться в файле config.ksc Как бы это провернуть? Надеюсь на вашу помощь... |
Цитата:
Скрытый текст
Код:
[Code] |
Цитата:
|
Dodakaedr, никаких. Для ANSI и OEM нет BOM.
|
El Sanchez, к сожалению твой код не работает. Или правильнее будет сказать, работает не до конца. Страница в выбором папки установки и правда появилась.
https://i106.fastpic.ru/big/2019/061...eabf7dd4c8.png Вот только файл config.ksc с текстом Код:
(const) %[ Скрытый текст
Код:
; Скрипт создан при помощи мастера создания скриптов. А еще, можно как то разобрать уже созданный установщик что б узнать исходный код? Я не знаю в какой программе он был создан, но очень бы хотелось его разобрать... |
vk_k14m@vk, ну свою прогу вы можете распаковать этим: Inno Setup Unpacker
Секцию Code вы конечно не дизассемблируете, т.к. она в бинарном виде изначально будет упакована, но всё остальное прекрасно извлекается. А вот надо сначала узнать, в какой программе был создан экзешник, потом извлекать соответствующим софтом. |
Цитата:
А можно как то узнать в какой программе был создан установщик? |
Цитата:
Ну или вот вам пару ресурсов: |
Цитата:
Код:
[Files] |
Цитата:
Создается файл с таким содержимым Код:
%["saveDataLocation" => "file://./D/Games/Fate/Stay Night [Realta Nua] - Ultimate Edition/fateavedata"] Код:
(const) %[ |
Цитата:
|
Цитата:
Код:
S1 := '(const) %['+#13' "saveDataLocation" => "file://./' + S1 + '"'+#13+']'; Код:
if not DirExists(s1) then ForceDirectories(s1); Код:
S1 := SaveDataLocationPage.Values[0]; |
Здравствуйте!
Есть небольшой простой скрипт для установки мода в игру. Он делает бекап оригинальных файлов, копирует новые и создает деинсталлятор. Его необходимо немного усовершенствовать: 1. Создать резервную копию файлов Game.dll и Game_DX11.dll. 2. Скопировать в корень игры 4 файла XVI32 .cmd/.exe/.ini/.xsc 3. Выполнить XVI32.cmd 4. Удалить эти 4 файла. 5. При деинсталляции вернуть исходные Game.dll и Game_DX11.dll. Можете помочь с такой задачей? P.S. с Inno Setup (да и в принципе с программированием) не дружу совсем. Файл 158063 |
Bio_Hazard, а пункты 2-4 это и есть усовершенствования по сравнению с "копирует новые"?
Скрытый текст
Код:
#define AppName "Game Name" |
Цитата:
Я не знаю, почему мой архив не подгрузился (Файл 158063), но взяв большую часть Вашего кода, совместил его со "своим" и немного доработав XVI32.cmd, я получил рабочий, полностью удовлетворяющий мои цели скрипт. Может получилось немного топорно, но работает. Вот что получилось:
Код:
#define ModName "TQRagnarökMod by BioHazardN7" Спасибо за помощь! |
Цитата:
|
Цитата:
|
Здравствуйте. Обнаружился косяк при установке на 32-х битных системах (обнаружилось на Windows 7)
Ошибка
Код инсталлятора:
Код:
#define ModName "TQRagnarökMod by BioHazardN7" Можете подсказать как исправить? |
Цитата:
Скрытый текст
Код:
function GetInstallationPath(Param: string): string; |
Цитата:
|
Цитата:
Все ссылки, в прочем как и имеющиеся советы - устарели. Может ли кто нибудь подсказать - как в инсталлятор вставить фоновое видео, вместо картинки? ******************************************** И ещё вопрос - как можно нормально проверить системные требования? - Уже третьи сутки ищу по форумам, везде попадается старый код для проверки XPюши или ниже, найти бы способ проверки современных ОС, а так же разрядность системы. Ну и не помешало бы адекватно проверить и остальные сис. требования, а то я нашёл старенький скрипт инсталлятора с проверкой - у меня стоит видюха на 6Гб, а проверка на 1024 - а пишет, что моего видео не достаточно, только на ОЗУ нормально работает. |
Цитата:
Код:
|
Romann_, можете еще проштудировать форум http://krinkels.org/
|
Цитата:
Скрипт полный
Код:
;InnoSetupVersion=5.6.1 (Unicode) |
Цитата:
Код:
|
Цитата:
В общем вот вам чистый код по определению разрядности с подробными комментариями "//", строки с комментариями можете после осознования удалить, простая функция Inno Setup: Код:
// До секции CODE прописываем свои текстовые сообщения, чтобы не отнимать место в коде программы в секции CODE: |
Здраствуйте. Подскажите пожалуйста, как добавить программу в автозагрузку так, чтобы аваст не ругался?
Сейчас используется строка Name: "{commonstartup}\Активація перекладу"; Filename: "{app}\ua_lang\Активація перекладу.exe"; Components: translate\auto; AfterInstall: ExecStartupFile() Находит IDP.Generic. Сама программа абсолютно безвредна. Даже если новосозданный текстовик переименовать в "Активація перекладу.exe" и скомпилировать скрипт, реакция аваста всё та же - IDP.Generic. Это однозначно должно как-то исправляться. Очень прошу вашего совета. |
Карась з Днiпра,
Аваст, видимо, параноит на слово "Активація" в сочетании с расширением/типом исполняемого файла. Попробовать исправить это можно: 1. изменением имени файла, если это допустимо 2. хранением внутри установщика файла под другим именем с переименовыванием после копирования в место назначения. 3. защитой паролем/шифрование имён внутри архива/установщика, чтобы антивирус не видел имён файлов. 4. обращением к разработчикам Аваста, чтобы они после проверки добавили этот .exe в исключения. 5. <что-нибудь связанное с заменой этого параноика на более адекватное решение>. 6. .... |
Спасибо за совет. Но вот пятый вариант решения точно не подходит. Я пишу программу для всех, не только для себя, и важно, чтобы антивири не пугали народ.
|
Цитата:
|
Да уже 4 антивируса убрали ложные детекты после отправки им этого файла. 2 на очереди, рассматривают, и к одному еще не достучался.
Аваст полностью успокоился, чего я, сказать честно, не ожидал. Он 1 из 4. |
дел
|
Raymans, попробуйте перевести поток Вашего сознания в более осмысленный вид.
|
дел
|
Raymans, пингуются не сайты, пингуются доменные имена и соответствующие им адреса. Сайты же могут быть либо доступны, либо недоступны — по совершенно другому протоколу.
|
дел
|
Цитата:
|
Цитата:
Скрытый текст
Код:
function InitializeSetup: Boolean; |
El Sanchez огромное вам спасибо вы очень сильно мне помогли :) Низкий вам поклон :clapping:
|
А я не понимаю, какой смысл был помогать индивидууму, который, больше трёх букв "дел", составить предложение не в состоянии?
И зачем вести беседу с такими, у которых даже не хватает мозгов, чтобы хоть как-то уяснить, что такое запятая, не говоря уже о сочетаниях слов, а тем-более - о синтаксисе кода. Сорри. |
Цитата:
а по части мозгов я больше чем уверен что у вас намного меньше их чем у меня!то что я немного не знаю в программе не значит что я тупой!хотите дальше крякайте сколько вам влезет! |
Цитата:
То что вы сделали является не только дурным тоном, но и ставите человека который вам помог в неловкое положение (Для общего понимания). Также создаст неприятное мнение о вопрошающем - Которому в будущем не захочется помочь. Вы сделали очень некрасивый жест тем, что удалили предложения в своих сообщениях: От чего смысл для некоторых "зачем это" - Теряется. Также в действующей информации, точнее в пункте 2.4 объясняется что к сожалению "для вас (как бы вам хотелось)" - Это форум, это не чат. И вы пишите: Цитата:
А также стоит обратить внимание на раздел Помощь, там есть пункт Как я могу отметить сообщение полезным? - Отметив сообщение соответствующим образом вы не только скажите "Спасибо", но и подтвердите что вам решение помогло. |
хорошо теперь я понял. прошу прощение за мои действия .
просто я подумал что цитат вполне хватит чтоб понять суть. "при запуске скрипт проверяет сайт и если он пингуется то не установится программа.ну а если пинга нет то устанавливается программа." больше такого не повторится . |
Цитата:
Цитата:
Спасибо за понимание. |
Всем доброго времени суток :) В инсталляторе создаётся окно, оно имеет идентификатор HWND. К этому окну подключается .dll, в котором показывается информация. Скажите, пожалуйста, можно ли изменить цвет этого окна? Просто по умолчанию оно белое, а на тёмном дизайне, это выглядит, мягко говоря, стрёмно :sorry:
|
Доброе время суток.
Разобрался. Осталось отключить эту страницу, чтобы сразу начиналась распаковка файлов Это не помогает
[Setup] DisableReadyPage=yes [Code] function ShouldSkipPage(PageID: Integer): Boolean; begin if (PageID = 10) then Result:= True; end; |
habib2302, воспользоваться советом LexBell с krinkels'а
Как скрыть все страницы инсталлятора?
http://krinkels.org/threads/faq-po-i...ge-2#post-6193
Код:
[Setup] |
Добрый день.
Нужно при компиляции скрипта через командную строку передать параметр с путем к файлам, который использовать в разделе Files, н-р: compil32 "script.iss" -CmdPath "D:\Samples" script.iss: #define DefPath "D:\Install" [Files] Source: {param:CmdPath|DefPath}\Install\App.exe; DestDir: {app}; В документации не нашел, как такое реализовать? |
Необходимо чтобы инсталлер, после хотя бы одной установки, в дальнейшем предлагал установку в тот же каталог, что, и ранее, подскажите как это можно организовать?;)
|
niksan29,
Необходимо чтобы инсталлер, после хотя бы одной установки, в дальнейшем предлагал установку в тот же каталог, что, и ранее, подскажите как это можно организовать
Код:
[Setup] |
Цитата:
Все, что я вам порекомендую сделать, это включить постоянное отображение страницы выбора папки назначения: Код:
[Setup] |
nik1967, как сказал товарищ
boss911, inno путь по умолчанию,вроде как и так запоминает, позвольте узнать,в чем отличие кода который привели Вы? И ещё вопрос, а если перед установкой новой версии(того что ставим инсталлером, созданным с помощью inno), старую удаляем, то Inno в таком случае будет помнить путь, или нет? И, спасибо за быстрые ответы;) |
Цитата:
Цитата:
|
Цитата:
По сути как раз, это самая важная задача: это чтобы этого не происходило, т.к перед установкой обновления, обязательно надо удалять старую версию... А т.к обновления будут выходить досточно часто, то каждый раз выбирать каталог установки по новой будет не совсем удобно, тем более инсталлеров при обновлении будет около 5-7 разово(данные разбиты по регионам, каждый устанавливает необходимые по одному, или же по очереди все). |
Цитата:
|
База данных для ПО, отдельные инсталляционные пакеты около 7(число может меняться) штук , количество необходимых пакетов выбирает пользователь(исходя из его требований/желаний), может быть и 1 из 7 а может и все 7...
Уделяется старые версии с той целью, чтобы каталог очищался и не было конфликтов после установки новой версии , т.к некоторые файлы просто могут отсутствовать в новой версии, соответственно если перед обновлением не почистить каталог, то они(старые старые файлы, которых теперь в обновление нет) останутся и будут мешать... Обновление может ставиться в любой каталог и уже потом, в самом ПО указывается путь до базы и сохраняется... |
niksan29
На всякий случай уточню, вам нужно, чтобы при установке очередного обновления (отдельный инсталляционный пакет), путь для установки был аналогичен тому, куда было установлено предыдущее обновление, при этом, каталог назначения должен быть очищен перед установкой нового обновления? Тогда пропишите в скрипте обновления следующие: Код:
[InstallDelete] |
Доброе время суток. Может будет у кого нибудь желание и время переделать скрипт сделанный под IS Ultra под стандартную версию IS v6.x
https://drive.google.com/file/d/1OJG...ew?usp=sharing Просто хочу перейти на стандартную версию, а чтобы довести до рабочего состояния ума не хватает |
Цитата:
Скрытый текст
Код:
#define AppName "HxD Hex Editor" |
Подскажите, а можно при написании Inno-установщика как-нибудь импортировать .inf-файл (установка драйвера) для своего инсталлятора?
|
generator324, читаем шапку
|
habib2302,
Благодарю, вы имеете ввиду это: http://forum.oszone.net/post-1674976-1599.html ? Уж очень много всего в шапку понатолкано, глаза смыливаются :( Про devcon знаю, но если есть devcon, то зачем тогда вообще Inno Setup? Драйвера через devcon просто ставятся из командной строки (если знать HWID устройства), никакой Inno Setup не нужен. Вопрос-то был именно в том, что я, допустим, HWID не знаю совсем (только семейство), но есть .inf-файл в котором это всё перечисленно. И можно ли инжектировать этот .inf напрямую в Inno Setup. Как, например, древний ISTool делал с .reg-файлами - просто добавлял в инсталлятор... |
generator324, только через innoide в разделе ini есть кнопка импорта ini файлов
|
Так я, вроде про .inf писал. ini - совсем "другие яйца", не?
|
|
habib2302,
Ну, хорошо - он (innoide) походу разницу между .inf / . ini не делает, импортирует "всё, что дают" :ok: . А работать-то это как будет? И будет ли ВООБЩЕ? All Files *.* я могу выбрать и в ISTool - вообще, "затолкать чего-то куда-то" - дело не хитрое... Меня интересует, если так можно выразится, "обработчик" .inf-файла, прописывающий в скрипт .iss (коль уж тут мы ведём речь о Inno Setup) правильный порядок работы с тем же .inf-файлом. Скажем, если ISTool производит импорт .reg-файла, она его и прописывает в скрипт .iss соответственно; значения потом при установке добавляются в реестр. А тут чего? |
Цитата:
|
Цитата:
Цитата:
А так, повторюсь опять же: и Inno Setup не нужен - просто командная строка (devcon). Но это если знать HWID, что известно не всегда... ЗЫ. InnoIDE - коммерческий продукт? Что-то я не понял: при попытке скачать перекидывают куда-то :o |
generator324, попробуйте обратиться в
Ссылка
http://autoit-script.ru/
|
Цитата:
Что до AutoIt, я знаю про систему автоматизации на его основе, но зачем вплетать сюда что третье? Всё равно без знания HWID ничего не получится (он меняется, так как меняется железка), а реализовать установку посредством devcon мне проще через тот же WSH, чем использовать сэконд стафф... Вы лучше скажите, где InnoIDE взять ? |
Цитата:
Скрытый текст
Цитата:
|
Цитата:
А импорт .ini та же древняя ISTool умеет делать - вспомнил сейчас ;) |
HKEY_CURRENT_USER\Software\MyProgram
HKEY_LOCAL_MACHINE\SOFTWARE\MyProgram HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MyProgram Как удалить ветки реестра во время и после установки? |
Цитата:
Скрытый текст
Код:
[Registry] |
Буквально дублирую предыдущий вопрос:
Как удалить ветку реестра во время и после установки? Код:
[HKEY_USERS\S-1-5-21-3472633682-696082676-122184224-500\Software\MyProgramr] Если прописать так: Код:
Root: HKU; Subkey: "S-1-5-21-3472633682-696082676-122184224-500\Software\MyProgramr"; MinVersion: 0.0,5.0; Flags: uninsdeletekey Насколько я понимаю значимость в этой ветке несёт только значение S-1-5-21, а остальное это путь к профилю и он отличается у всех на ПК. Заранее благодарен за любую помощь. |
Цитата:
Код:
Root: HKU; Subkey: "S-1-5-21-3472633682-696082676-122184224-500\Software\MyProgramr"; Flags: deletekey uninsdeletekey dontcreatekey |
Цитата:
Код:
HKEY_CURRENT_USER\Software\MyProgramr Цитата:
В HKEY_USERS соответствующий подраздел S-1-5-21-XXX другого профиля будет присутствовать в реестре лишь тогда, когда в профиль будет произведён вход. |
До кучи: S-1-5-21-*-500 — это SID встроенной административной учётной записи (Administrator/Администратор/… etc.). Его RID на машинах ОС Windows всегда равен 500:
Код:
wmic.exe UserAccount where "SID like 'S-1-5-21-%%-500'" Get Name, SID |
Цитата:
Код:
[Registry] |
Спасибо — boss911, Nordek, Iska и Dodakaedr за отзыв, разъяснение и помощь!
Через HKCU удаляется отлично. Вопрос закрыт, ВСЕМ добра! |
Цитата:
При установке/деинсталляции из текущего пользователя (A) - Полезен только для текущего пользователя (A). При установке/деинсталляции из текущего пользователя (A) - Для других пользователей (B, C, D) бесполезен. В будущем: Для преобразования файлов *.reg - Используйте Converter или ISTool. Inno Script Studio также как ISTool умеет импортировать файлы *.reg, но не всегда корректно. |
Привет всем,
пытаюсь вызвать функцию ShellExecute из подключенной библиотеки, результате выдает что файл не найден. Что я делаю не так? Код:
|
web_form, если честно не знаю т.к эти страницы создавались с ноля
|
Цитата:
на соответствующих страницах указать родителя (Parent:= ) лого |
nik1967, в curPageChanged можно добавить только для финишной страницы. А как быть с cancel page?
module\page.iss
procedure CurPageChanged(CurPageID: integer);
begin #ifdef WinTB case CurPageID of wpWelcome: begin TaskBarButtonEnabled(hback, false); end; wpSelectDir: begin TaskBarButtonEnabled(hback, true); TaskBarButtonImage(hnext, hImg2, IMAGE_ICON); end; wpInstalling: begin TaskBarButtonEnabled(hback, false); TaskBarButtonEnabled(hnext, false); end; wpFinished: begin TaskBarButtonEnabled(hnext, true); TaskBarButtonEnabled(hcancel, false); end; end; #endif if CurPageID=wpWelcome then begin HideComponents; Bevel2.show; Bevel3.show; TextLabel[6].show; TextLabel[1].show; WizardForm.BackButton.Caption:= CustomMessage(lang+'ButtonBack'); WizardForm.CancelButton.Caption:= CustomMessage(lang+'ButtonCancel'); WizardForm.NextButton.Caption:= CustomMessage(lang+'Buttonnext'); Background.Show; WizardForm.CancelButton.Left:=ScaleX(5332); end; #ifdef InfoBefore if CurPageID=wpInfoBefore then begin HideComponents; WizardForm.BackButton.Caption:= CustomMessage(lang+'ButtonBack'); WizardForm.CancelButton.Caption:= CustomMessage(lang+'ButtonCancel'); WizardForm.NextButton.Caption:= CustomMessage(lang+'Buttonnext'); TextLabel[38].show; TextLabel[39].show; WizardForm.InfoBeforeMemo.Show; TextLabel[40].show; Bevel3.Show; Bevel2.Show; Bevel4.Show; Bevel5.Show; Bevel6.Show; Bevel7.Show; Bevel8.Show; WizardForm.Bevel1.Show; WizardForm.Bevel1.SetBounds(0,90,WizardForm.ClientWidth,2); end; #endif if CurPageID=wpSelectcomponents then begin HideComponents; case ActiveLanguage of 'eng': Application.Title := 'Setup —- « {#GameName} »'; 'rus': Application.Title := 'Óñòàíîâêà —- « {#GameName} »'; end; TextLabel[26].show; WizardForm.BackButton.Caption:= CustomMessage(lang+'ButtonBack'); WizardForm.CancelButton.Caption:= CustomMessage(lang+'ButtonCancel'); WizardForm.NextButton.Caption:= CustomMessage(lang+'ButtonInstall'); WizardForm.SelectComponentsLabel.show; //TextLabel[2].show; TextLabel[7].Show; Bevel3.Show; Bevel2.Show; Background.Hide Bevel4.Show; Bevel5.Show; Bevel6.Show; Bevel7.Show; Bevel8.Show; TextLabel[28].show; WizardForm.CancelButton.Left:=ScaleX(5332); WizardForm.Bevel1.Show; WizardForm.Bevel1.SetBounds(0,90,WizardForm.ClientWidth,2); WizardForm.ComponentsList.Show; end; //-------- Second Page --------\\ if CurPageID=wpSelectDir then begin HideComponents; case ActiveLanguage of 'eng': Application.Title := 'Setup —- « {#GameName} »'; 'rus': Application.Title := 'Óñòàíîâêà —- « {#GameName} »'; end; TextLabel[13].show; TextLabel[29].show; TextLabel[8].show; TextLabel[2].show; TextLabel[14].show; TextLabel[15].show; TextLabel[16].show; TextLabel[17].show; TextLabel[18].show; TextLabel[19].show; TextLabel[20].show; TextLabel[21].show; TextLabel[22].show; WizardForm.CancelButton.Left:=ScaleX(5332); WizardForm.BackButton.Caption:= CustomMessage(lang+'ButtonBack'); WizardForm.CancelButton.Caption:= CustomMessage(lang+'ButtonCancel'); WizardForm.NextButton.Caption:= CustomMessage(lang+'Buttonnext'); Bevel3.Show; Bevel2.Show; Background.hide; Bevel4.Show; Bevel5.Show; Bevel6.Show; bevel7.Show; Bevel8.Show; WizardForm.GroupBrowseButton.Show; WizardForm.GroupEdit.Show; WizardForm.DirEdit.Show; WizardForm.SelectDirLabel.Show; WizardForm.DirBrowseButton.Show; GetFreeSpaceCaption(nil); end; if CurPageID=wpInstalling then begin HideComponents; TextLabel[33].hide; TextLabel[11].show; TextLabel[12].show; TextLabel[3].show; PauseButton1.show; WizardForm.CancelButton.Caption:= CustomMessage(lang+'ButtonCancel'); TextLabel[30].show; Bevel3.Show; Bevel2.Show; wizardform.cancelbutton.show; TextLabel[9].show; Bevel4.Show; Bevel5.Show; Bevel6.Show; Bevel6.Height:=210; WizardForm.ProgressGauge.Show; WizardForm.StatusLabel.Show; WizardForm.CancelButton.Hide; WizardForm.CancelButton.Left:=WizardForm.NextButton.Left; CompactButton.Show; end; //--------Game was successfully installed PAGE--------\\ if CurPageID=wpFinished then begin #ifdef WinTB WintbStart(); #endif #ifdef WinTB Win6TaskBarV1_2(WizardForm.Handle, MainForm.Handle, 0); #endif case ActiveLanguage of 'eng': Application.Title := 'Setup —- « {#GameName} »'; 'rus': Application.Title := 'Óñòàíîâêà —- « {#GameName} »'; end; with WizardForm do begin AutoScroll := False; ClientHeight := ScaleY(411); ClientWidth := ScaleX(584); Position := poScreenCenter; lPLogo:= ImgLoad(WizardForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(214), ScaleY(368), ScaleX(158), ScaleY(37), True, True); ImgApplyChanges(WizardForm.Handle); end; WizardForm.NextButton.Caption:= CustomMessage(lang+'Buttonfinish'); with langBtn do begin Height := ScaleY(30); Left := ScaleX(5); Top := ScaleY(372); Width := ScaleX(31) OnClick:= @LangBtnClick; Parent:= WizardForm; end; HideComponents; TextLabel[5].show; TextLabel[10].show; Bevel2.Show; Bevel3.Show; Background.Show; Runbtn.show; end; //--------Game Fail To Install PAGE--------\\ if (CurPageID = wpFinished) and (ISDoneError=True) then begin case ActiveLanguage of 'eng': Application.Title := 'Setup —- « {#GameName} »'; 'rus': Application.Title := 'Óñòàíîâêà —- « {#GameName} »'; end; #ifdef WinTB SetTaskBarProgressState(TBPF_ERROR); WintbStart(); Win6TaskBarV1_2(WizardForm.Handle, MainForm.Handle, 0); #endif Runbtn.hide; WizardForm.NextButton.Caption:= CustomMessage(lang+'Buttonfinish'); with langBtn do begin Height := ScaleY(30); Left := ScaleX(5); Top := ScaleY(372); Width := ScaleX(31) OnClick:= @LangBtnClick; Parent:= WizardForm; end; with WizardForm do begin AutoScroll := False; ClientHeight := ScaleY(411); ClientWidth := ScaleX(584); Position := poScreenCenter; lPLogo:= ImgLoad(WizardForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(214), ScaleY(368), ScaleX(158), ScaleY(37), True, True); ImgApplyChanges(WizardForm.Handle); end; HideComponents; TextLabel[4].show; TextLabel[10].show; Bevel2.Show; Bevel3.Show; Background.Show; end; end; function ShouldSkipPage(PageID: Integer): Boolean; begin if (PageID=wpSelectProgramGroup) then Result:=true; end; |
Цитата:
|
nik1967, sorry
https://drive.google.com/file/d/1s9e...2SmLK-AR6FMe2h |
habib2302, как-то так :)
https://drive.google.com/open?id=1Wj...tYnwNK7Cexa4my Все под меня косите :) |
web_form, В Main.iss - 711 строка, В module\cancel form.iss - 200 строка, В module\page.iss - 169 и 220 строки
|
web_form, В module\cancel form.iss чуть ниже 160 строки есть строки Left и Top отвечающие за координаты этого текста
Если хотите отцентровать добавьте Alignment := taCenter; над строкой left |
web_form, 160 строка №8 не 18, а 8
|
web_form, держите https://drive.google.com/file/d/1A5J...bdg69DyT4G01Fc
количество задач меняется в параметре #define TaskCheckBox. |
web_form, Будьте добры загружайте скрины через данную прогу с миниатюрами
По поводу миниатюры в панели задач есть библиотека WinTB, но проблема в том, что данная библиотека не работает на десятке Хотя вот нашел. https://drive.google.com/file/d/1GmI...fwDcsd73KLr33x |
web_form, в example.iss удалите раздел [setup] и все что в нем прописано. В main.iss над разделом setup с новой строки пропишите #include "example.iss". Файлы будут прописаны в example. И в конце example.iss не забудьте раскомментировать последние строки. А файл source.cpp вам не нужен т.к это исходник
|
web_form, можно ваш скрипт с которым вы работайте
|
web_form, проблема в том, что там придется перебирать и адаптировать скрипты под новый wintb т.к там изначально стоит старый
|
Здравствуйте!
Не распаковывается 7zip архив, если в пути есть пробелы. Подскажите пожалуйста как исправить. [Run] Filename: {app}\7z.exe; Parameters: "x {src}\data1.7z-y" |
Tiarn, Пути с пробелами берутся в кавычки, а азы из документации гласят, что символ кавычкек " вставляется в строку как удвоенная кавычка "". Итого получаем
Код:
Filename: {app}\7z.exe; Parameters: "x ""{src}\data1.7z-y""" |
web_form, там заморочек много. С переключением языка на лету.
|
Доброе время суток. Необходимо удалить настройки проги во время деинсталляции через код с выводом MsgBox, но проблема в том, что в пути к настройкам есть символ "одинарная кавычка" или ' . Как можно обойти ошибку из-за этой кавычки? Пример Friday's program
Код:
[Code] |
habib2302, использовать "" для " и '' для ', то бишь удваивать кавычку в строке.
|
Цитата:
1. По коду скрипта: Скрытый текст
Код:
function InitializeSetup(): Boolean; 2. Отступы - полезная штука для улучшения читаемости кодаю |
iglezz
Зделал так, все работает, тока теперь при разных хеш, програма закрывается :help: code
Код:
function InitializeSetup(): Boolean; как его побороть? |
Beavimo, код оформляется тэгом «code». И уже потом его можно дополнительно обрамить тэгом «spoiler».
|
Beavimo, может я не в теме, но попробуйте так:
Скрытый текст
Код:
#define NeedSHA "ad030d5606a2dcfa75ebc425a70730f23e7f07ab" |
Цитата:
|
Цитата:
|
Nemko, спасибо, тока как убрать предупреждение о несовпадении сум, что бы сразу устанавливалась прога
Код:
else Result:=MsgBox('Программы не совпадают!', mbCriticalError, MB_OK) = IDOK; // если надо чтоб программа запускалось при не соответствии, сменить знак на "=" |
Iska,
Всё куда проще
Таким образом [color=none][/color] подставляется автоматически: [Code][color=none][[/color]Code] procedure RedesignWizardForm; begin with WizardForm.CancelButton do begin Left := ScaleX(364); end; end; procedure InitializeWizard(); begin RedesignWizardForm; end; [/Code] Итог: Код:
[Code] |
Beavimo, думаю так:
Скрытый текст
#define NeedSHA "ad030d5606a2dcfa75ebc425a70730f23e7f07ab"
[Setup] AppName=My Application AppVersion=1.5 CreateAppDir=no [code] function InitializeSetup: Boolean; var FileName: PAnsiChar; begin FileName:=ExpandConstant('{reg:HKLM\SOFTWARE\Code, PATH_APPLICATION}')+'\Test.exe'; if not FileExists(FileName) then begin MsgBox('Установка Прекращена' #13#13 'Установите сначала Программу!', mbCriticalError, MB_OK); Result:=False; end else begin if (GetSHA1OFFile(FileName) = Lowercase('{#NeedSHA}')) then Result:=MsgBox('Программа уже Установлена' #13#13 'Продолжить Установить?', mbInformation, MB_YESNO) = IDYES else Result:=True; end; end; Если нужно скипнуть готовность
#define NeedSHA "ad030d5606a2dcfa75ebc425a70730f23e7f07ab"
[Setup] AppName=My Application AppVersion=1.5 DefaultDirName={pf}\My Application [code] var StartImstall: Boolean; function InitializeSetup: Boolean; var FileName: PAnsiChar; begin FileName:=ExpandConstant('{reg:HKLM\SOFTWARE\Code, PATH_APPLICATION}')+'\Test.exe'; if not FileExists(FileName) then begin MsgBox('Установка Прекращена' #13#13 'Установите сначала Программу!', mbCriticalError, MB_OK); Result:=False; end else begin if (GetSHA1OFFile(FileName) = Lowercase('{#NeedSHA}')) then Result:=MsgBox('Программа уже Установлена' #13#13 'Продолжить Установить?', mbInformation, MB_YESNO) = IDYES else begin StartImstall:=True; Result:=StartImstall; end; end; end; procedure InitializeWizard; begin WizardForm.Show; //без этой строчки не фунциклирует end; function ShouldSkipPage(CurPageID: Integer): Boolean; begin case CurPageID of wpReady,wpInstalling,wpFinished: Result:=False; // если надо, можно пропустить все страницы else Result:=True; end; end; procedure CurPageChanged(CurPageID: Integer); begin if (CurPageID = wpReady) and StartImstall then WizardForm.NextButton.OnClick(nil); end; |
Цитата:
|
Nemko, а как склеить два разных CODE???
Code
Код:
function InitializeSetup(): Boolean; + Code
// Подключаем внешнюю библиотеку: #include "FileVersion.iss" Код:
function InitializeSetup(): Boolean; сама библиотека тут |
Beavimo, держите, модуль FileVersion.iss нужно класть рядом:
Скрытый текст
Код:
[Setup] |
Nemko,
Спасибо братюня.... Как думаешь с чего стоить начать изучать программирование? Если начать с Паскаля потом на С+ или сразу с С+? Просто я самоучка, и метод у меня всегда с конца, я буду сравнивать примеры дабы понять смысл, а уже потом полезу в документацию, потому как значения меня пугают, а так если пойму суть как оно работает тогда зацеп пойдет, так вот собствинно дилема в том что суть языков Паскаль и С+ одна, токо значение разные, или принцыпи работы разные? А чуть не забыл! Дело в том что в своем примере, я мого задавать порог минимальной и максимальной версии, а тут банально устанавливается, только на заданую версию. |
Цитата:
|
Beavimo, теперь FileVersion.iss можно выкинуть в урну, он не нужен, плюс прикрутил проверку на соответствие PE-формату (типа если открывать не .exe). Так же диапазон версий настраивается в начале, хеш там же.
Скрытый текст
Код:
#define AppHash "ad030d5606a2dcfa75ebc425a70730f23e7f07ab"; хэш P.S.: на счет языков программирования, решайте сами, но ИМХО лучше (проще) забить на это дело и пойти проветритьса на улицу. |
Цитата:
|
Nemko, код кривой полюбому.... если у файла Test.exe атрибут только чтение начинается бред, никакие флаги не помогают.
|
Вот так все робит :yahoo:
code
Код:
function InitializeSetup(): Boolean; |
Цитата:
CODE
Приводим код в порядок и сразу видим место где косяк зарыт:
Код:
function InitializeSetup(): Boolean; Напоминание №2 о форматировании: В каталоге установленного Inno Setup есть каталог Examples. Там в примерах стоит посмотреть как надо форматировать код, чтобы у него читабельность была на таком уровне, когда структура видна беглым взглядом. |
|
Beavimo, хотите бесплатный совет? Чем меньше Вы будете заморачиваться подобными, никому не нужными,
|
Цитата:
Скрытый текст
Пробовал 6.0.3 - Что-то совсем не проникся.
По сравнению с 6.0.2 - Расширенная Inno 5.5.1 так не уязвима к взломам/распаковке. 6.0.3 кривая, раз 5 перекомпилировал чтоб собрать пакет - Иначе на выходе готового пакета в разных местах выводило ошибку. И т.д. Лучше NSIS использовать чем Inno 6, ещё лучше на делфи инсталлятор писать. |
Цитата:
Nordek, даже не знал, что уже шестая вышла. |
Вложений: 1
Цитата:
Скрытый текст
ispack-5.5.1.exe и ispack-5.5.1-unicode.exe + инструкция из сообщения темы
Или информация во вложении. Цитата:
|
Добрый день, такая строка делает ярлык с параметром на рабочем столе:
код
Код:
[Icons] получается в графе Обьект Обьект: "C:\Program Files\BASE\BASE.bat" test а как зделать чтоб было вот так Обьект: test "C:\Program Files\BASE\BASE.bat" |
Отключил все страницы, кроме SelectDirPage, на SelectDirPege вынес ProgressGauge (прогресс бар). Как отключить страницу установки (wpInstalling) и возможно ли? Задача оставить только SelectDirPage и прогресс бар на ней.
|
Цитата:
Код:
procedure CurStepChanged(CurStep: TSetupStep); |
|
habib2302,
Каждое из четырёх чисел в VersionInfoVersion имеет максимальное значение равное 65535, отсюда и ошибка. Для больших чисел применяется текстовый атрибут FileVersion, устанавливаемый через VersionInfoTextVersion="6.1.2.135662" Таким же образом это сделано и для оригинального установщика. Подробности здесь: VERSIONINFO resource |
|
Цитата:
Код:
[Messages] Код:
[Languages] Код:
[Messages] |
Проблема, есть игра "The lord of the rings the history of ages 1.3.7.1" так вот, известный факт что если установить игру, то есть при установке где нужно выбрать путь, мы пропишем свой путь, то соответственно игра не запустится, но если путь создать заранее, через ПКМ и новая папка, затем дать ей имя, то без проблем игра запустится после установки.
Вопрос таков, я сегодня уже ну просто целый день бьюсь-бьюсь и никак не могу добиться, как мне можно в Inno Setup ключи реестра сделать так чтобы они менялись и вообще чтобы они добавлялись при установке в любую папку? подскажи пожалуйста |
Цитата:
Например игра установилась в: C:\Program Files\Name\ Исходные уже внесённые данные в реестр будут выглядеть так: Root: "HKCU"; Subkey: "Software\Name"; ValueType: string; ValueName: "Path"; ValueData: "C:\Program Files\Name\"; Flags: uninsdeletekey Теперь обратите внимание на секцию [Setup] Код:
DefaultDirName={pf}\Name {app} - Это есть {pf}\Name Например по умолчанию у вас будет {pf}\Name т.е C:\Program Files\Name\, то {app} передаст этот путь. Всякий раз когда уже в инсталляторе вы будете выбирать каталог, будь это C:\Game или D:\Game - {app} передаст этот путь. Смотрите пример: Секция [Files]: Код:
Source: "D:\Source\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs Код:
Root: "HKCU"; Subkey: "Software\Name"; ValueType: string; ValueName: "Path"; ValueData: "{app}"; Flags: uninsdeletekey На будущее: Если в секции [Files], в DestDir вы решите жестко привязать каталог по каким-то причинам: Код:
Source: "D:\Source\*"; DestDir: "{app}\bin"; Flags: ignoreversion recursesubdirs Код:
Source: "D:\Source\*"; DestDir: "{app}\bin"; Flags: ignoreversion recursesubdirs createallsubdirs |
Цитата:
Пример понятен, но я никогда не сталкивался с ситуацией когда игра так яро реагирует на ключи реестра (наверное из 8 игр это первая) можете уточнить? по примерам D:\Games\The Lord а сам дистрибутив находится в D:\Games\LOTR он создаёт несколько ключей в реестре допустим 6 мне каждый писать используя {pf}\The Lord? Я так понял что {pf} копирует путь игры без имени папки, а {app} копирует абсолютно весь путь но без входящих в него папок я правильно понял??? У меня есть код 1 - сама игра, а второй не важен (так как это смена ключа) Код:
Source: "D:\Games\Lord of the Rings - The History of Ages\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension Код:
Description: "{cm:LaunchProgram, The Lord Of The Rings - The Onset Of Darkness}"; Filename: "{app}\Ep1\CDKeyFixer.exe"; WorkingDir: "{app}\Ep1"; Flags: Код:
Удаленные разделы: 21 Код:
DefaultDirName={pf}\Name |
Цитата:
Цитата:
Предположим вы хотите сделать папкой по умолчанию не C:\Program Files\LOTR, а C:\Games\LOTR - То в DefaultDirName достаточно указать {sd}\Games\LOTR. В реестре, в ярлыках указываете {app}. Цитата:
Код:
[Setup] |
Спасибо большое
|
Здравствуйте, проблема такая
Код:
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\lotrbfme2.exe; ValueType: string; ValueName: Game Registry; ValueData: SOFTWARE\Electronic Arts\The Battle for Middle-earth II; Flags: uninsdeletevalue uninsdeletekeyifempty это нужные коды для игры |
сейчас будет абсолютно весь код для игры имеется в виду реестр
Код:
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\lotrbfme2.exe; ValueType: string; ValueName: Game Registry; ValueData: SOFTWARE\Electronic Arts\The Battle for Middle-earth II; Flags: uninsdeletevalue uninsdeletekeyifempty |
Код:
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows NT\CurrentVersion\VolatileNotifications; ValueType: binary; ValueName: 41C64E6DA3BD4855; ValueData: 01 00 04 80 00 00 00 00 00 00 00 00 00 00 00 00 14 00 00 00 02 00 1c 00 01 00 00 00 00 00 14 00 03 00 00 00 01 01 00 00 00 00 00 05 0b 00 00 00 04 00 00 00; Flags: uninsdeletevalue uninsdeletekeyifempty |
Код:
Root: HKCU; SubKey: Software\Classes\VirtualStore\MACHINE\SOFTWARE\WOW6432Node\Electronic Arts\Electronic Arts\The Lord of the Rings, The Rise of the Witch-king; ValueType: string; ValueName: InstallPath; ValueData: "{app}"; Flags: uninsdeletevalue uninsdeletekeyifempty |
Всё что идёт:
Код:
Root: HKLM; SubKey: SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\... Это также не нужно: Код:
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows NT\CurrentVersion\VolatileNotifications\... Это не нужно: Код:
HKLM\SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules\... По поводу [Registry] в x86 инсталляторе к x64 ОС: Всё что идёт такое: Код:
Root: HKLM; SubKey: SOFTWARE\Electronic Arts делаете такое: Код:
Root: HKLM64; SubKey: SOFTWARE\Electronic Arts а всё что идёт такое: Код:
Root: HKLM; SubKey: SOFTWARE\WOW6432Node\Electronic Arts делаете такое: Код:
Root: HKLM; SubKey: SOFTWARE\Electronic Arts |
Сейчас попробую, я убрал все ветви которые вы мне сказали и оставил ветки где прописан путь к экзешникам
Код:
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\lotrbfme2.exe; ValueType: string; ValueName: Path; ValueData: "{app}"; Flags: uninsdeletevalue uninsdeletekeyifempty Код:
Root: HKLM; SubKey: SOFTWARE\WOW6432Node\Electronic Arts\Electronic Arts\The Battle for Middle-earth II\ergc; ValueType: string; ValueData: J7F79F9MHXQFBFKGHKAW; Flags: uninsdeletevalue uninsdeletekeyifempty Код:
Root: HKLM; SubKey: SOFTWARE\WOW6432Node\Electronic Arts\The Battle for Middle-earth II; ValueType: string; ValueName: DisplayName; ValueData: Битва за Средиземье™ II; Flags: uninsdeletevalue uninsdeletekeyifempty Вы мне сказали что 32 инсталяторы к 64 битным системам обращаются иначе где стоит HKLM нужно сделать HKLM64 и где присутствует WOW6432Node убрать его и оставить Код:
SOFTWARE\Electronic Arts Можно уточнить? Код:
Root: HKLM; SubKey: SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\App Paths\lotrbfme2.exe; ValueType: string; ValueName: Game Registry; ValueData: SOFTWARE\Electronic Arts\The Battle for Middle-earth II; Flags: uninsdeletevalue uninsdeletekeyifempty Код:
Root: HKLM; SubKey: SOFTWARE\WOW6432Node\Electronic Arts...... не Код:
Root: HKLM64; SubKey: SOFTWARE\Electronic Arts...... Код:
Root: HKLM; SubKey: SOFTWARE\Electronic Arts...... и ещё... у меня нет таких кодов Код:
Root: HKLM; SubKey: SOFTWARE\Electronic Arts Я сделал как было сказано, но вылезает ошибка о не хватке dll |
Цитата:
Код:
HKEY_LOCAL_MACHINE\SOFTWARE\ - Для x64 параметров Цитата:
|
Nordek,
Код:
Root: HKLM64; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\lotrbfme2.exe; ValueType: string; ValueName: Game Registry; ValueData: SOFTWARE\Electronic Arts\The Battle for Middle-earth II; Flags: uninsdeletevalue uninsdeletekeyifempty SEGosnits #3242 А если само приложение 32bit но мы ставим в реестре 64 так как система, ничего не будет? |
Простите что надоедаю, но жутко хочется сделать именно эту игру(((( это безвыходная ситуация, я не знаю уже что и как добавлять чтобы заработало, ужас.
|
Цитата:
Скрытый текст
Код:
[Registry] |
Цитата:
Заинтересовало что вы там слепить пытаетесь. На сколько я понял вы хотите 2 игры в одну собрать. Скачал одну, поработал 5, от силы 10 минут, итог: Скрытый текст
Код:
[Setup] |
хех, господи, да, вы правы. Я хочу в игру которую вы скачали, установить мод
HTML код:
https://drive.google.com/file/d/1c91cQ9-C8up6Oiis7E3wSVjt4rrKXCLx/view Код:
C:\Users\Gosni\AppData\Roaming\Властелин Колец, Под знаменем Короля-чародея - Мои файлы\Options.ini -без этого игра работать не будет если его удалить, я коде я указал чтобы он его копировал вместе с папкой HTML код:
https://drive.google.com/file/d/1c91cQ9-C8up6Oiis7E3wSVjt4rrKXCLx/view |
Nordek, El Sanchez, спасибо вам за помощь, я благодаря вам понял какие ключи в реестр в случае чего писать, реально спасибо вам за огромнейшую помощь и за терпение меня аутиста)))) я вам очень многим обязан, я понимаю что до вашего интелекта мне далеко, что я вам помочь подобным не с могу, но всё равно - просите у меня что угодно, денег ну по 500 каждому сброшу чтоб не обидно было, я правда благодарен.
P.S: не в обиду но всё же открывайте полные курсы и гайды чтобы обучать ребят бесплатно или за деньги решайте сами, ваши видосики на ютубе очень помогут у меня последний вопрос остался, вот есть репаки от ХАТТАБА, От МЕХАННИКОВ а так же есть вот реально красиво оформленные другие репаки, к примеру фат гирл и хаттаб, вот на какой программе они делали это??? не подскажите ещё более топовую прогу???? где клепают они. Вы уж обучайте так кого-нибудь, если вдруг в случае вашей смерти так сказать уже всё... не будет больше таких светлых умов. Спасибо вам ребятки. Можно ну и ещё 1 вопрос, при выборе языка если нажать отмену, то выскакивает ошибка и установщик без диспетчера задач уже не убрать, что делать с этим? ВСЁ ЧТО БЫЛО СКАЗАНО МНОЙ - НЕ В ОБИДУ. |
Свсем забыл, а как правильно выцепить ключи реестра которая игра требует?
|
Цитата:
Цитата:
Форум » Ресурсы Несколько примеров:
R.G. Catalyst (GOG) 1.0
R.G. ReCoding 1.0 R.G. Игроманы 1.1 (16042014) Dead Space 3 Splinter Cell Blacklist Metro 2033 Need for Speed: The Run 1.0 Need for Speed: Hot Pursuit 1.5 Need for Speed: ProStreet 1.1 Need For Speed Underground 2 + ISDone 0.5 1.2 Call of Duty Ghosts King's Bounty - The Legend 2015-03-23 PDA - S.T.A.L.K.E.R. 1.1b Diablo 3 Install 1.5.8 Kaspersky Anti-Virus 1.0.0.3 Opera Software Installer 1.0 Adobe Flash Installer 1.0 Цитата:
RegFromApp Примеры мониторинга системного реестра |
Цитата:
|
Цитата:
Когда последует вывод ошибки, и после продолжения инсталлятор не завершится - Просто продолжите нажав (Обвёл красным) эту кнопку (Учитывайте, что это на время тестирования): - Ошибка проигнорируется и инсталлятор будет завершён. Далее смотрите ответ от nik1967. |
Спасибо
|
Добрый день!
Может у когото есть пример для добавления правила в Брандмауэр Windows, потому как все ссылки на примеры битые? Нужно заблокировать устанавливаемой программе доступ в интернет, относительно выбраного пути при установке. Пока что пользую такой пример блокирует вход через хост, ну тогда на сайт не зайти. CODE
Код:
function InitializeSetup(): Boolean; |
Beavimo, у меня такой код завалялся.
Добавить в исключения брандмаура
Код:
#define Exe "ashsnap.exe" |
nik1967, большое спасибо робит. как бы теперь его отучить не создавать правило повторно, ссылаясь на name=ashsnapinst?
|
Может кто подскажет как проще реализовать задуманное. Есть батник, перед запуском программы он удаляет ветку реестра, и файл, но ярлык для батника не крепится на панель задач. Как зделать программу (.exe) которая бы удаляла ветку реестра, и некий файл который имеет конкретный путь, а потом запустила бы другую программу, и дела бы это в скритом режыме.
(bat to exe) не предлагать там одни вирусы, может на PascalABCNET можна реализовать задуманое? |
Beavimo, на C/C++. Без .Net.
|
Beavimo, AutoIt в помощь. Могу помочь если надо
|
Цитата:
Или так: Код:
Font.Style := []; Код:
fsBold - Жирный Код:
Font.Style := []; Код:
Font.Style := [fsItalic]; Код:
Font.Style := [fsItalic, fsUnderline]; |
Рабочий пример добавления в Брандмауэр Виндовс, если можна проверьте работоспособность на Виндовс 10
Скрытый текст
Код:
procedure CurStepChanged(CurStep: TSetupStep); var |
Цитата:
Скрытый текст
При первичной установке добавляет во входящие и исходящие.
При повторной установке: - Удаляет правила: Цитата:
Цитата:
Цитата:
Далее: Цитата:
Итог:
Код:
[Setup] |
Хто подскажет почему, вот так работает
CODE
Код:
procedure InitializeWizard(); а вот так не работает CODE
Код:
procedure InitializeWizard(); то есть в курент усер удаляет значение, а в локал лезет в Wow6432Node, как удалить значение в HKEY_LOCAL_MACHINE\SOFTWARE? |
|
спасибо всем кто помог.. есть еще один вопрос как удалить файл при установке
CODE
]
Код:
procedure CurStepChanged(CurStep: TSetupStep); Это работает. А как удалить файл по пути USER\AppData\Roaming\TEST\run.pid? |
Цитата:
Скрытый текст
Константы специальных папок {userappdata} & {commonappdata} Путь к папке с данными приложения (Application Data). Код:
procedure CurStepChanged(CurStep: TSetupStep); |
nik1967, что {userappdata}\Roaming\Roaming\TEST\run.pid что {commonappdata}\Roaming\Roaming\TEST\run.pid файл run.pid как был так и остался на своем месте.
И так тоже ниче не удаляется Удаление Файла
Код:
[InstallDelete] Файл обычный, без каких либо атрибутов. |
Вложений: 1
Beavimo, Смотрите прикреплённый файл.
|
Nordek, :clapping: :closed-to
|
Beavimo, В справке аналогично написано, что собственно nik1967: Вам предложил сделать.
Можно иначе - Проявить смекалку и подсмотреть путь: Код:
[Code] |
Beavimo,
Код:
[InstallDelete] Код:
[InstallDelete] |
Вопрос Знатокам :search:! Дошел до деинсталлятора, я так понимаю переименовать (unins000.exe) не получится, и есть ли возможность не создавать (unins000.dat)? Также интересует, можно ли в файле (unins000.exe) поменять описание файла, и его версию?
|
Цитата:
Скрытый текст
[Setup]: Uninstallable Возможные значения: yes или no, или логические выражения Значение по умолчанию: yes Описание: Inno Setup определяет, создавать ли автоматический деинсталлятор. При значении yes или логического выражения True он создается. Иначе автоматическое удаление будет невозможно, так что пользователь должен будет вручную удалять программу. Например: [Setup] Uninstallable=not IsTaskSelected('portablemode') [Tasks] Name: portablemode; Описание: "Portable Mode" |
nik1967, это совсем не то. у файла (unins000.exe) есть описание файла, в моем случае (Setup/Unistall), и версия (51.1052.0.0), возможно ли подставить свои значения.
|
|
ZVSRus, :lol: спасибо разсмешыл, вот я спаршую возможно сделать так как у вас на картинке из под Инно, я только учусь, есть люди которые знают намного больше, и просто ответят нет низя потому что знают это, и мне день сохранят на изучение, потому как поиск не дает положытельного результата по этой теме.
|
мож подскажыте как довести этот код до ума
CODE
Код:
procedure CurStepChanged(CurStep: TSetupStep); var он удаляет правило при повторной установке, думаю не надо объяснять для чего я так сделал... а как зделать так чтобы при повторной установке он искал правило по имени, и в случае если оно уже есть то if........then Result:=True, в противном случае else устанавливал правило в брандмауэр? а так он постоянно удаляет и ставит по новой из за чего инсталятор подтупливает |
Beavimo, Директив для деинстоллятора, таких например как для инсталлятора
PHP код:
Если уж делать то только ручками на редакторах ресурсов. Ну просто любопытство распирает, для каких надобностей сие художества? |
ZVSRus, да дурак я просто вот и все, наверное поговорить охота :tongue:
|
Beavimo, Вы напрасно ёрничаете — тезис «задача может не нуждаться в выбранном решении»™ никто не отменял.
|
|
вот так выехал на инно вместо батника
Скрытый текст
Код:
[Setup] теперь з данным батником можна крепить ярлыки на панель задач, сбрасывать триал програм и самое важное вирус тотал молчит тока интересно как поведет себя сее творение на 32-х битных системах |
Цитата:
P.S В настройках Inno Script Studio, не забудьте указать путь к компилятору Inno Setup. Цитата:
|
Можно просто поиграться флагами в секции Registry
Думаю, эти флаги вам помогут
deletekey
Когда установлен этот флаг, инсталлятор сначала попытается удалить ключ, если он существует, со всеми его параметрами и разделами. Если ValueType=none, после этого он создаст новый ключ и параметр. Для предотвращения негативных последствий, этот флаг игнорируется при установке, если Subkey пустой или состоит только из бэкслешей. deletevalue Когда установлен этот флаг, инсталлятор сначала попытается удалить параметр, если он существует. Если параметр ValueType не равен none, после этого он создаст ключ, если он не существует, и новый параметр. dontcreatekey Когда установлен этот флаг, инсталлятор не будет пытаться создать ключ или любой параметр, если ключ уже не существует в системе пользователя. Инсталлятор не выдаст сообщений об ошобке, если ключ не существует. Обычно этот флаг используется в комбинации с флагом uninsdeletekey для удаления ключей во время установки, но не создания их в течение установки. |
Nordek
Проверку нужно добавить чтоб ошибку не выводил на "HKLM64,'SOFTWARE...". Вы имеете в виду, проверку на битность системы? |
Nordek,
CODE
Код:
вот так, потому как нету в наличии 32-ой системы? Зарание Благодарю! |
Beavimo, Направление верное. Только вам достаточно проверки для HKLM64. Для HKLM не нужна - Учитывая что работа с HKLM вам будет необходима и в 64-разрядной операционной системе, иначе в 64-разрядной операционной системе HKLM будет пропускаться.
Цитата:
P.S. У меня на реальной машине осталась только Windows 7 32-разрядная. Из под Linux в виртуальной машине только Windows 10 обеих разрядностей (32-разрядная и 64-разрядная). |
Выручайте, башка кипит! :drug: Как решить не пойму, примеров найти не могу? Некая программа работает на Виндовс 7 некорректно. Опытным путем :), после установки обновления KB2533623, программа начала работать как надо. Так вот в момент установки моего приложения, надо проверить установлено ли обновление KB2533623 в системе, или нет. Если установлено то просто установить приложение, в противном случае, спросить у пользователя, мол :) хотите установить или нет? Как проверить наличие KB2533623 за что цеплятся? Короч насочинял чот но как быть с 32-бит системой, как запустить само обновление при нажатии "да" непойму.
Скрытый текст
Код:
[Setup] шуршу страницы в поисках истины, реально прогрес бар, ботва... короче дети засрали все со своими репаками ПОМОГИТЕ |
Цитата:
Например в [Files] добавить обновления: Код:
[Files] Код:
[Run] Код:
[Components] Код:
[Components] Проверку обновлений осуществить через реестр, например: Код:
HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\Package_for_KB2533623_SP1~31bf3856ad364e35~x86~~6.1.1.2 Код:
HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\Package_for_KB2533623_SP1~31bf3856ad364e35~amd64~~6.1.1.2 Цитата:
|
Nordek, огромное спасибо что откликнулся... буду разбиратся :kiss:
|
Nordek, когда я делаю вот так:
CODE
Код:
[Components] инсталлятор ругается на "ab_x86", я так понимаю в секции {Code} нужно что то сделать с этим именем... меня мучает момент а можно ли вот тут? CODE
Код:
[Setup] опять я уперся в запуск. как из секции [code] автоматически ставить флагжки на checkbox??? я просто задолбался искать пример, хотя бы один пример :angry2::angry2::angry2: все иду гулять башка взрывается. как всегда на последнем рывке я не знаю что делать |
Цитата:
Вот сляпал что-то: Скрытый текст
Код:
[Code] Смысл думаю понятен. |
Nordek, Пока думаю как правильно организовать сие творение, но оно ска работает именно так как мне надо:jump::jump::jump:. ОГРОМНОЕ тебе человеческое СПАСИБО.... Я давно мечтал сделать подобного рода инсталлер (как с магазина), без этих картинок музыки в меню, но чтобы умный был :) Думал что Инно не потянет, а по nsis очень мало доходчивого материала в сети, забил на это дело. Пользовал Smart Install Maker, но он до ужаса кастрирован, ждал обновы, но безрезультатно, прошло много лет а обновы нет. И тут опять решил попробовать, давно мечтал научить инсталлер автоматически опредилять путь для установки, мне подсказали выход, и понеслась я зацепилса за это дело. Не знаю правильно ли но я привик изучять дело с конца, а не с начала. Потому как начинаэш сначала в момент когда ты чегото не понимаешь ты просто здаешся. А так ты ничего не понимаешь вопще но постепенно у тебя чтото получается. Ладно чот меня на творчество понесло. Спасибо за то что пошел на встречу сейчас это редкость... + Из тебя может быть не плохой учитель, умеешь заинтриговать.
|
Цитата:
Например нужно чтоб установилось в определённой версии (Например Windows 7) и определённой разрядности (Например 32-разрядной ОС): Код:
[Components] Или как ваш случай: Необходимо определять наличие компонента по наличию файла (или реестр). + Нужно определение вресии Windows + Разрядности = То почему бы не организовать что-то через код. В определённых случаях "IsWin64" в коде всё-равно нужен. Если "IsWin64" туда, то почему бы туда же не переместить и определение версии. Получается: Проще сделать 1 "; Check: xxx" чем для каждого городить по несколько. - Из серии (если не имеется возможности) |
Здравствуйте Уважаемые. начинаю изучать, 3 день сижу читаю, башка закипает, и что то не выходит. Не откажите помочь.
Задача простейшая (ИМХО) Наверно у меня проблема с RegQueryStringValue или головой ))) 1. Есть папка 1 с файлами (как добавлять файлы - разобрался)) ее надо скопировать в папку которая указана в реестре по пути 1. HKEY_LOCAL_MACHINE\SOFTWARE\Avid\Studio\Main Path путь № 1 прописан (т.е он есть в наличии 100%) 2. Есть папка 2 с файлами ее надо скопировать в папку которая указана в реестре по пути 2. HKEY_LOCAL_MACHINE\SOFTWARE\Avid\Content\Content Path путь № 2 прописан (т.е он есть в наличии 100%) Вот в принципе пока задача в этом. если нужен скрипт того что я наваял. могу представить. Заранее спасибо. Питерцам могу пива налить ))) Удачи. |
VLADEV
Используйте константу {reg:HKxx\SubkeyName,ValueName|DefaultValue}. Код:
[Files] |
Nordek,
code
Код:
[Setup] вот сочинил пьеску, это четверть от всего кода, на моем ФХ-се инсталятор летает, уже сутки колдую, и все время хочется больше... разговаривать его научить))) непонятно тока как организовать установку при установленом уже на ПК обновлении KB2533623, и выключеном Центре Обновления Windows, чтобы не прекращалась установка MsgBox-ом (Центр Обновления Windows 7 Отключен <<<для продолжения установки>>>)...бла...бла...бла... но то такое надо поспать и в бой потому как я уже просто схожу с ума. идей как говорится полно тока ришения подавай)))) как думаешь реально не прибегая к сторонниму софту на Инно сделать такой инсталлер? |
Цитата:
Запросто
|
nik1967, вы хотите сказать я качаю з оф сайта Инно 6.0.3, и на нем делаю такой инсталлер, музыка меня не интересует это для детей... я говорю о чистом дистрибутиве безо всяких ботв и прочей лабуды. реально зделать такой как у меня на картинке, ну хотя бы похожый?
Nordek, дружыще мож подскажешь как в один вопрс поместить сразу два или три, ну ето как "if ...... then" выходит типа "если.......тогда" я лично понимаю так а мне нужно зделать так "if яблук=5 и груш=5 then" только тогда выполнять условие.... тоисть два условия в одном вопросе.... надеюсь я понятно выражаюсь :not-me: , я когда смотрел уроки по паскалю там мелькало что то типа "case" но я так и не вребился..... нельзя ограничиватся одним if.......then |
Цитата:
Цитата:
|
иконка на панели задач Виндовс 7 без проблем, а на 10-ке никак. как решыть?
Скрытый текст
Код:
[Setup] уже все перерыл :beta: |
кто в курсе, у меня на 10-ке в виртуальной машыне пропадает иконка удалятора из меню пуск, мож кто знает в реальной винде такая же ерунда происходит.... думаю писать из инсталлера удалятор кто таким извращался?
|
так никто и не ответил на счет ярлыка на панели задач в Windows 10, самое главное что если закрепить ярлык после инсталляции программы в ручную, то при ее удалении ярлык деинсталлируется... а на 7-ке все прекрасно работает
|
Beavimo,
Код:
Код:
[code] |
Beavimo, Папка панели задач Windows 10 находится в папке
Код:
% AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar |
habib2302, я и говорю что не работает на 10-ке функция PinToTaskbar зато на 7-ке все хорошо... а вот PinToStartMenu работает прекрасно
548пост |
Gnom_aka_Lexander, перед тем как писать проверьте ваш совет на работоспособность
|
|
не работает он на 10-ке
Скрытый текст
Код:
[Setup] любой "ICONKA.exe" файл рядом положыте, на семерке без проблем а на десятке не робить зато процедура "CurUninstallStepChanged" прекрасно работает даже на десятке а это крепит ярлик в меню пуск и оно работает нормально что на 7-ке что на 10-ке Скрытый текст
Код:
[Setup] |
Цитата:
Код:
[CustomMessages] |
Nordek, мне нужно прикрепить значок на панель задач в Windows 10, я не могу понять как оно работает Process Monitor не помогает. ПАНЕЛЬ ЗАДАЧ...
Скрытый текст
Код:
[Setup] на 7-ке работает как надо, а на 10-ке тока открепить может если я вручную прикреплю иконку к панели задач то при диинсталляции она удалится.... а прикрепить ее окромя ручками у меня не выходит может я просто туплю уже 3-ю сутку не сплю |
Цитата:
PinToTaskbar
Код:
const PinToStartMenu
Код:
function PinToStartMenu(const AFilename: string; AIsPin: Boolean): Boolean; |
Цитата:
|
1) так для справки я (трахну) ето ПИНО однозначно, не верю что не прикручю эту приблуду автоматом к панели на 10-ке, третьи сутки боя идут. 2) устанавливаю виндовс 10-ть раз в год уже 4-ый год подряд, пользуюсь примерно неделю-две, и возвращаюсь назад на 7-ку. решыл попробывать скачать образ 10-ки с оф сайта для тестирования своих наработок в ИННО на перспективной ОС :lol: - опирация прошла успешно, дата последнего обновления (09_01_2020) + онлайн ключики лежат на (philka.ru). 3) у меня на ПК стоит два ссд + винчестер. установил на второй зарание отформатированый ссд Windows 10 Pro. парни скажу чесно я будто обратно на хард пересел, а по сравнению с прошлогодней (08_01_2019) она стала еще больше походить все добро на одной полке, причем все в одном цвете хрен разбиреш что где, интуетивно нихера не понятно (нада учить всьо на изусть), короче бардак полнейшый. от душы лично мое мнение круче ХР по доступу к ресурсам я винды не встречал. а хто говорит мол 7-ка шлак, давно на 10-ке и не жалею, я просто промолчю (ДА ЗДРАВСТВУЕТ РЕКЛАМА в кожну хату)
|
Цитата:
Цитата:
Кстати начиная с 6.0.0-beta:
|
Nordek, да я не собырался на автомате ярлык лепить, просто код старался упрость для понимания. а так меня всегда раздажали картинки из игр в ирталлерах, заставки перед запуском, путь для игры с именем репакера или папка в меню пуск с его именем, установка софта поверх уже установленого .... короче кучя дерьма сжатия до придела что уснуть при установке можна, лутше время потратить на коректное извлечение ключей и путей из оригинального дистрибутива, чем ети репаки с музыкой и прочей лабудой клепать. а тут ярлык бог сека открепил и все
Nordek, ладно дружыще я просто немного ни в сибе третью сутку без сна, если что не так в правописании я со Львова, Руского никогда не изучал |
Цитата:
|
Iska, :not-me: я просто хотел сделать свою форму для всех инсталлеров, одну форму оригинальную как на фото что я приводил, без музыки без кучи переходов с разными картинками, без своего имени у названия инсталятора и темболие папок со своим именем, без галочок доп софта взял все кредисты от 2010 запихнул в инсталлер он проверил если есть то не устанавливал, чтобы потом не висело по неськолько деинсталяторов в компонентах, минимум галочек вкладок ненужного текста максимальная скорость установки, пускай и проиграю в весе, все что от себя ето например малинький штамп на форме гдето в уголке но если устанавливается например Aster-V7 со встроиным сбросом триала, то папка без возможности изменений во (все программы) так и називалась Aster-V7, а не Beavimo :moderator, если я случайно удалю ярлык с робочего стола я полезу в все программы искать программу а не автора инсталлера. ладно думаю более мение доходчиво обяснил. и вопше сначала мотор тормоза колеса рулевая.... а покраска в конце, а не код на десять страниц + куча дллок, пожал до усрачки качаешь быстрей чем устанавливаешь, а самые больные бывает в игру при запуске свое лого запихнут это придел совершенства, не в обиду, просто достали типа блогеры. щенки мамины текст зазубрил а сам нуб в теме... нет я не говорю что я программер но я не пригаю выше головы ладно я завелся фен пошла четвертая сутка и самое главное ети все виртуалки и прочее мне до етого не были знакомы, так что бесят поиски однострочного ответа часами, блохеры мать их :tongue:
|
Цитата:
Цитата:
Простота - Это высшее достижение в искусстве. |
Доброе время суток. Надо доработать кусок скрипта. Хочу, чтобы при нажатии кнопки нет на msgbox'е инсталлятор завершил работу, но не через task kill, а чтобы была полная имитация кнопки отмены.
Скрытый текст
Код:
[Code] |
habib2302,
Так?
Код:
function NextButtonClick(CurPageID: Integer): Boolean; Не везде сработает корректно, нужно пробовать |
Gnom_aka_Lexander, Вы не правильно поняли.
Цитата:
MsgBox
Код:
if not Result then if MsgBox('Перед установкой необходимо удалить предыдущую версию {#Name}. Продолжить?', mbError, MB_YESNO) = IDYES then |
habib2302, Ну так.
Код:
then Кнопка Нет - IDNO Я так понимаю, нужен готовый код такого вида?
Код:
function UninstallMyApp(): Boolean; Меня не было целых 8 лет, а так ничего не изменилось. указать направление помощью не считается, только готовое, только хардкор ) |
Gnom_aka_Lexander, пример с моим кодом можно
|
Вложений: 2
Inno Setup registry finder Накорябал уже сто лет тому назад, да вот все как-то недосуг выложить было. Программа делает поиск в реестре по заданной маске и форматирует найденное в записи, пригодные для использования в скрипте, с конвертацией путей в переменные Inno Setup, алгоритм конвертации предоставил Serega. По сути, это GUI для его конвертера с добавленной возможностью автоматизировать поиск нужных ключей. Так-же есть возможность указать путь, который нужно заменить на {app}. Так-же прилагаю библиотеку по поиску Sid. Не помню зачем, но она вроде нужна ) |
а можно из секции [code] запустить службу, например службу Центр обновления Windows?
|
Люди помогите решить проблему. Что то я никак не вкурю, как удалить из строки символ? Рабочего примера найти не могу, и догнать не могу. Может я не там копаю, может мне не из строки удалять нужно? Подскажите, а то опять сутку убил а решения все нету. Вот пример берет из реестра путь для установки.
CODE
Код:
Path=C:\Program Files (x86)\Internet Explorer\IEXPLORE.EXE; но в реестре, в конце пути стоит символ {;} как его удалить? что бы было вот так Path=C:\Program Files (x86)\Internet Explorer\IEXPLORE.EXE а еще лутше так C:\Program Files (x86)\Internet Explorer тоисть удалить все что идет посте последнего \ |
Цитата:
Цитата:
Код:
[Setup] |
Beavimo, самое простое, использовать в такой ситуации функцию
Код:
ExtractFilePath(const FileName: string):string Код:
ExtractFilePath(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\IEXPLORE.EXE,Path}')); Если нужно без косой черты, то ExtractFileDir - она возвращает тоже самое, но без слеша |
наконец то....:shot:..... целую ночь провозился, с этой кажись - такой мелочью. :vampire:
CODE
Код:
Теперь другов вопрос, как его этот путь "(FileName)+'Internet Explorer'", сохранить в например в дириктиву #define, или например в {app} неважно куда и как важно чтобы в (DestDir) каталог установки брался автоматом, так как пишеться апдейт а не полноценный софт. |
Beavimo,
Код:
DefaultDirName={code:ExtractFilePath|{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\IEXPLORE.EXE,|}} |
Привет. что я делаю не так? Помогите новичку. Винда 10-64
Код:
Root: HKLM; SubKey: SOFTWARE\Boris FX, Inc.\Boris Graffiti 6.6; ValueType: string; ValueName: DefaultLibraryPath; ValueData: {pf64}\Boris FX, Inc\Keyframe Libraries 6; Flags: uninsdeletevalue uninsdeletekeyifempty HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\WOW6432Node Спасибо. |
VLADEV, Замените HKLM на HKLM64
|
habib2302,
Спасибо я конечно это сделал. я использовал конвертер реестра Converter.exe и он не проставляет мне HKLM64 Вот я и не понял почему . |
Цитата:
Там, где предполагается несовпадение разрядности программы и системы, пути в реестре и на диске надо самому проверять. |
Цитата:
1. Справка (Пожалуй это самое важное правило.). 2. Поиск (Это самое важное правило после первого пункта). Далее: Совсем недавно было: Сообщение #487. Далее: Цитата:
Читайте сообщение #530 о Inno Script Studio. Работа с Inno Script Studio:
Вам нужно импортировать данные реестра.
Экспортируете необходимый подраздел реестра из RegEdit сохранив в файл *.reg. Открываете Inno Script Studio, или скрипт в нём. Переводите фокус на Registry и щёлкаете по нему левой кнопкой мыши. Вы в секции Registry: Далее щёлкаете левой кнопкой мыши по подготовленному файлу *.reg и не отпуская кнопки перетаскиваете в область Registry: Замечательно, данные импортировались: Вам нужно изменить список строк. Делаете как я (Делаю везде где только вздумается, не только в Inno): Выделяете необходимые данные для копирования: Нажимаете комбинацию клавиш CTRL+C чтоб скопировать выделенное. Переводите фокус к началу первой строки: Нажимаете комбинацию клавиш CTRL+H чтоб начать работу с заменой текста. В первом поле вставляете (CTRL+V) скопированный текст, который будет заменён: Во втором вводите данные для замены: Щёлкаете клавишу Replace All чтоб заменить все заданные условия: затем подтверждаете щёлкнув клавишу All: Как видите необходимые данные были заменены: Эти данные в 64-разрядной ОС будут внесены в WOW6432Node. Для x64 аналогично. Выделяете необходимые данные для копирования: Нажимаете комбинацию клавиш CTRL+C чтоб скопировать выделенное. Переводите фокус не к началу как ранее, а куда-нибудь в коментарии: Нажимаете комбинацию клавиш CTRL+H чтоб начать работу с заменой текста. В первом поле вставляете (CTRL+V) скопированный текст, который будет заменён: Во втором вводите данные для замены: Щёлкаете клавишу Replace All чтоб заменить все заданные условия: затем подтверждаете щёлкнув клавишу All: Как видите и в этом случае необходимые данные были заменены: Всё, теперь вы умеете импортировать *.reg и заменять некорректные данные на необходимые! Хочу заметить: Всё в одной программе. |
Nordek, Низкий поклон. Голова пока кипит ))) Взял на вооружение. Никаких конвертеров теперь
|
Вложений: 1
Старинный проект. Пришлось немного переписать, на win10 работать не хотел.
Поиск и закрытие определенного процесса. В теории, при запуске от имени админа, убивает даже системные процессы, поэтому использовать с осторожностью, имя процесса указывать максимально точно. |
может кто знает как сделать чтобы сетап, удалял самого себя после инсталляции? пробовал батником но не получается, вообщем не могу выполнить батник после закрытия инсталлятора. может у кого есть идеи на сей щет... хочу сделать удалятор из инсталлятора, чтобы не было етого unins000, файла unins000.dat рядом, и была возможность редактировать описание файла.
|
Цитата:
|
Iska, :) боюсь даже спрашивать почему...
|
Beavimo, потому что для пользователя будет нелепо выглядеть удаление инсталляционного пакета после инсталляции и не вызовет ничего, кроме ругани в адрес автора.
|
Iska, ты наверное не понял я хочу удалятор на основе инсталлятора построить
Скрытый текст
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Test] "DisplayName"="Test" "Publisher"="Test.com" "DisplayVersion"="1.0.0.0" "DisplayIcon"="C:\\Test\\Test.exe" "InstallLocation"="C:\\Test\\" "UninstallString"="C:\\Test\\Test.exe" "NoModify"=dword:00000001 это поможет организовать иконку в программы и компоненты |
Цитата:
|
|
Beavimo, Есть объект UninstallProgressForm, тоже самое, что и Wizardform, делать с ним можно тоже все, что душе заблагорассудиться - менять размеры, накладывать картинки, добавлять объекты, в том числе и NoteboockPage, соответственно и страницы. Нет нужды делать отдельный деинсталлятор, все можно сделать и на оригинальном.
|
Цитата:
|
Nordek, Я видел "532" пост, когда искал решение "удаление перед установкой" несколько раз.
Не понимая заданного вопроса "TROY Diamond" (Мне нужно, чтобы мой установщик при запуске находил уже ранее установленное приложение, НЕ только моим, НО и другими установщиками) - просто проходил мимо. Теперь понял, спасибо за наводку :hi: Но мне не то нужно, может есть возможность выполнить батник, или же конслольные команды после нажатия на финиш инсталлятора? Банально мне нужно чтобы мой инсталятор само уничтожался после выполнения, как это делает unins000.exe... |
Инсталлятор самоуничтожится после выполнения!
procedure CurStepChanged(CurStep: TSetupStep); var ResultCode: Integer; begin if CurStep = ssDone then begin SaveStringToFile(ExpandConstant('{userappdata}\del.bat'), '@echo off' +#13#10+ ':trydel' +#13#10+ 'del "' + ExpandConstant('{srcexe}') + '"' +#13#10+ 'if exist "' + ExpandConstant('{srcexe}') + '" goto trydel' +#13#10+ 'del "' + ExpandConstant('{userappdata}\del.bat') + '"', False); Exec(ExpandConstant('{userappdata}\del.bat'), '', '', SW_HIDE, ewNoWait, ResultCode); end; end; |
Буду признателен. Не нашел (плохо искал наверно)
у меня папка установки берется из реестра. ={reg:HKLM64\SOFTWARE\Avid\install,Main Path} (как пример) Все нормально никаких проблем. Мне просто нужно чтобы при установке этот путь показывался но НЕ давал сменить. в Inno Script Studio пробовал. или не нашел или просто не появляется путь вообще. Спасибо заранее. |
Цитата:
код
Код:
procedure InitializeWizard(); |
Tco 03, робит :clapping:
|
Всем доброго вечера! Давненько я думал избавиться от длинного ключа тихой установки (/verysilent) и заменить его коротким (/S) как у других аналогов InnoSetup.
Читая архив наткнулся на уже готовое решение... Взял на испытание. В целом код с задачей справляется хорошо, но нашёл одно НО. Заключается оно в регистре. Ключ в нижнем регистре отрабатывает хорошо, а в верхнем не хочет. Долго уже чешу бестолковку :clever-ma , но решить задачу не могу. Прошу помощи в решении задачи с верхним регистром или может у кого-нибудь есть другое решение замены длинного ключа на короткий. |
Вопрос снимаю. Опробовал на другом компьютере и всё работает в верхнем и нижнем регистре.
Видать у меня в системе проблемы... Хотя, если есть у кого-нибудь альтернативные решения буду рад взглянуть!!! |
Новая проблема с этим кодом (писал о нем несколькими сообщениями ранее).
Добавил языки в инсталлятор и тихая установка при помощи этого кода не работает. При запуске с коротким ключом "/S" выводит окно выбора языка (чего не должно быть), жму "Ок" и дальше устанавливает тихо. Если в функции InitializeSetup параллельно происходят еще какие-то операции (в моем случае это распаковка некоторых *.bmp во временную папку), то при запуске с коротким ключом выводит окно выбора языка, после нажатия "Ок" и установка проходит в обычном режиме с показом всех последующих окон. В общем так уже не работает:
[Setup]
AppName=Silent Install Key AppVerName=Silent Install Key v 1.0 OutputBaseFilename=SilentInstallKey_setup DefaultDirName={pf}\SilentInstallKey CreateAppDir=no [Languages] Name: "english"; MessagesFile: "compiler:Languages\English.isl" Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl" [code] function InitializeSetup(): Boolean; var i, ResultCode: Integer; begin for i := 1 to ParamCount do if LowerCase(ParamStr(i)) = '/S' then begin Exec(ExtractFileName(ExpandConstant('{srcexe}')), '/verysilent', ExtractFileDir(ExpandConstant('{srcexe}')), SW_SHOWNORMAL, ewNoWait, ResultCode); Exit; end; Result := True; end; Прошу помощи в решении задачи... |
Alex S, Так не пробовал?
код
Код:
[Setup] Можно еще такой вариант попробовать: код
Код:
[Setup] Так, возможно, более правильно:
Код:
[Setup] |
Gnom_aka_Lexander, спасибо большое!
Приклеил к исходному коду Вашу функцию InitializeLanguageDialog и всё стало работать нормально. В InitializeSetup ключ /LANG не понадобился... Первые тесты пока без глюков. |
Alex S,
Вот так, теоретически, тоже должно сработать
Код:
function InitializeLanguageDialog(): Boolean; Вспомнил, есть еще WizardSilent: Код:
function InitializeLanguageDialog(): Boolean; |
Всё верно, работает.
При таком варианте тихая установка проходит успешно, а вот при запуске установщика в обычном режиме не отображается окно выбора языка... Предыдущий вариант пока работает нормально. Тестирую дальше... Спасибо за помощь! :bow: |
Здравствуйте знатоки. Вопросик.
Есть папки (source) например Папка1, Папка2 Что нужно сделать чтобы после компиляции был не общий BIN а папка1.bin папка2.bin ну и общий exe. Т.е что бы в случае их изменения менялись только они . Надеюсь понятно пояснил. Спасибо. и еще Возможно ли это есть код заменяющий строчку в текстовом файле. Нужно чтобы поменялся на ссылку {app} Код:
procedure CurStepChanged(CurStep: TSetupStep); |
VLADEV, первое - невозможно без применения внешних архиваторов вместо встроенного сжатия . по второму -DSTCOPY = "{app}" нужно заключить в ExpandConstant. либо, как на другом форуме подсказали, использовать WizardDirValue
|
Спасибо огромное.
WizardDirValue действительно отлично помог. только мне надо ссылку в кавычки. а знаний не хватает т.е у меня щаз предположим C:\Program Files (x86) а нужно "C:\Program Files (x86)" Gnom_aka_Lexander, 1 вопрос это больше хотелка. поиском пробовал ничего вразумительного не нашел. Если это сложно для новичка , то пока хотелку закрою. |
VLADEV, Сам файл случайно не ини?
Код:
StringChangeEx(UnicodeStr, 'DSTCOPY', 'DSTCOPY = "'+ExpandConstant('{app}')+'"', False) |
ФЛУД.
От всей души желаю тебе сисястую любовницу. )))) Нет файл простой текст |
VLADEV,
Цитата:
Как-то так :)
Способ 1: папка1.bin папка2.bin как архивы
Включаем в состав установщика распаковщик (7-Zip, UnRAR, ...) Через ExtractTemporaryFile() извлекаем распаковщик Через Exec() его запускаем для распаковки архива папка1.bin Через Exec() его запускаем для распаковки архива папка2.bin Способ 2: папка1.bin папка2.bin как inno-установщики // Прокатит или нет - не знаю, надо проверять. Но теоретически вместо .exe можно использовать любое расширение. Через Exec() запускаем для распаковки архивов inno-установщик с именем папка1.bin Через Exec() запускаем для распаковки архивов inno-установщик с именем папка2.bin В целом: Точкой входа в запуск всего этого шаманства может быть либо скрипт (bat/wsh/ps/...), либо базовый .iss-скрипт с использованием директив препроцессора. Как сравнивать соответствие папки и готового bin? Можно на стадии сборки (например, препроцессором) читать файл со списком файлов и свойствами, по которым будет детектиться соответствие/различие и сравнивать, параллельно писать новый файл (для целей замены, если понадобится собирать новый *.bin) С виду это может показаться лютым шаманством, но на самом деле, применив простенький скилл "Декомпозиция", задача решится, пусть и не за два клика. Всё это теория, но практика будет с конкретным ТЗ |
|
Цитата:
|
|
ZVSRus, да так, а как ето сделать?
|
Цитата:
|
ZVSRus, я так и думал, но не пробовал, щас попробую
|
Здравствуйте!
Мне не нужна помощь. Дело такое, создаю ярлык в папке Автозагрузка Name: "{userstartup}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; WorkingDir: "{app}" Программа запускается в развёрнутом виде, каждый раз её приходится сворачивать в трей. А если в свойствах ярлыка сделать так Программа призапуске будет сама своррачиваться в трей. Вопрос такой как это сделать в скрипте Name: "{userstartup}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; WorkingDir: "{app}" |
Цитата:
Код:
Flags: runminimized |
Цитата:
|
|
Обнаружил проблему. Во время запуска Обновления.
Отображения окна - "Клиент игры не найден! Обновление не может быть установлено!" Нажимаю ОК И идёт продолжение запуска обновления, а должно закрыть окно Обновления. В чем может быть проблема? Код: Скрытый текст
Код:
//Процедура, Оформление окон |
Цитата:
|
Цитата:
Может как то переделать код, или объеденить 2 функции по другому? ПопробЫвал вызвать через procedure Получилось что-то такое: Скрытый текст
Код:
Procedure Skins(); Но скин срабатывает только после Splash, тоисть окна проверки (Обновления) без оформления. Тоисть нужна procedura наоборот, вроде такого: Скрытый текст
Код:
Procedure Update(); Но она отказывается работать. |
passstrada,
Например так
Код:
function CheckInstalled(): Boolean; Хотя непонятно зачем дополнительно спрашивать про "Продолжить установку?", если гуй всё равно используется. add: Чтобы не лепить "Result := True;" где попало неплохо бы справку почитать по Inno и Pascal |
Цитата:
Скрытый текст
Код:
function InitializeSetup: Boolean; |
passstrada,
А так не катит?
//Читаем значение параметра Version из реестра и присваиваем его переменной ResultStr //Если значение параметра Version равно 1.0, обновление устанавливается, если не равно или не существует – установка прекращается Function InitializeSetup(): Boolean; var ResultStr: String; begin ExtractTemporaryFile('Amakrits.vsf'); LoadVCLStyle(ExpandConstant('{tmp}\Amakrits.vsf')); RegQueryStringValue(HKCU, 'Software\WoTBlitz', 'Version', ResultStr); if ResultStr='{#AppVer}' then begin Result:= MsgBox('Поиск клиента игры...' #13#13 'Клиент игры найден. Продолжить установку?', mbConfirmation, MB_YESNO) = idYes; if not Result then MsgBox('Поиск клиента игры...' #13#13 'Обновление клиента прервано.', mbInformation, MB_OK); end else MsgBox('Поиск клиента игры...' #13 'Клиент игры не найден!' #13#13 'Обновление не может быть установлено!', mbConfirmation, MB_OK) end; |
Цитата:
|
Цитата:
|
Цитата:
Теперь сделаем ее вызываемой: переименуем ее в InitializeSetup2, например, и вызовем ее из InitializeSetup следующим образом:
Код:
function InitializeSetup2: Boolean; При входе в InitializeSetup2 после begin Result равен True и в случае невыполнения ResultStr = '{#AppVer}' пользователь увидит сообщение "Клиент игры не найден" и установка продолжится, что есть непредвиденное поведение. В данном случае Result не инициализируется в InitializeSetup2, это было сделано раньше, в InitializeSetup после begin. Потом в строке Result := True переменной присвоено значение True и дальше передана по ссылке в InitializeSetup2. Функции на самом деле являются процедурами, где первым параметром идет переменная c именем Result и которая передается по ссылке. Так что пример выше на самом деле выглядит так:
Код:
procedure InitializeSetup2(var Result: Boolean); Чтобы избежать подобных случаев, нужно либо явно в теле функции присваивать Result значение по умолчанию первой строкой, либо строить логику так, чтобы Result в любых случаях был переназначен. |
Здравствуйте! Мне нужна помощь.
Есть рабочий скрипт (его код ниже), который должен создать ярлык на папку. Ярлык создается, но если искать этот ярлык через программу, то программа его не видит. (Даже в Экселе - Файл/Открыть - ярлык не виден). 1.Что в скрипте не так? 2.Как в конце установки вывести галку с предложением открыть папку с настройками (из "{commonappdata}\Inno\Программа") после окончания установки? Код:
[Setup] |
Друзья, может кто знает, как решается этот вопрос? (см. предыдущее сообщение)
|
Log 101, У меня все ярлыки создаются как на рабочем столе так и в меню пуск.
Цитата:
Цитата:
Код:
[Run] |
Цитата:
На рабочем столе ярлык папки создается, формулировка ярлык через программу, если вы имеете ввиду Пуск > Программы > Inno 5 > Настройки > Настройки, тогда последняя папка и есть ярлык. Других ярлыков согласно скрипта нет. Цитата:
|
Цитата:
Цитата:
Можно ли создать ярлык все-таки для всех пользователей? И чтобы он был видим и через программы тоже. Цитата:
|
Цитата:
Если вы имеете ввиду Microsoft Excel то ярлык на рабочем столе виден Файл > Открыть > Рабочий стол (типы файлов: Все файлы) |
Цитата:
Может ярлыку для всех пользователей не хватает какого-то атрибута?.. |
Цитата:
Создал ещё одну учетную запись (обычные права, не админ), зашел от имени зтого пользователя, ярлык на рабочем столе виден. Создал Microsoft Excel Файл > Открыть > Рабочий стол (типы файлов: Все файлы) ярлык на рабочем столе виден. Win7 Максимальная, Win10 нет. PS: Во всех ваших вопросах есть какая то недосказанность. |
Вложений: 1
Цитата:
|
|
Цитата:
P.S. Win10 стоит лицензионная. |
Цитата:
|
Цитата:
|
Цитата:
Для информации: ОС, на которой проверялся скрипт, "Win10 Домашняя" лицензионная. Может кто-то сталкивался с подобного рода проблемой? |
Цитата:
|
Если проблему не обойти, подскажите, пожалуйста, как в скрипте зашить проверку на версию Windows. И если Win7/ХР, то чтобы установка сама шла в {commondesktop}, если же Win10, то в {userdesktop}. Остается тогда вопрос: куда отнести Win8...
Но тогда предвижу еще одну проблему: если ставить будет Админ под своим логином, а не Пользователь, то ярлык будет у Админа, а у Пользователя (для которого вся установка) ярлыка не будет. |
Возможно открою Африку, но именно в Win10 ярлык именно на Панели задач создать пока невозможно. Остальные ярлыки создаются без вопросов хоть где на любой ОС, исключая Панель задач Win10.
|
Цитата:
|
Как сделать, чтобы при повторной установке из созданного инсталлятора, если папка с файлами существует, в папке куда программу устанавливаю, то файлы во вложенной папке не перезаписывались? Но только в этой папке, а другие файлы и папки не заменялись при установке.
Спасибо. |
Как убрать кнопку с выбором типа установки?
Полная установка Компактная установка Выборочная установка |
passstrada, в скрипте в разделе Types уберите все кроме "Полная установка" и поставьте флаг Flags: iscustom
Код:
[Types] |
Вложений: 1
Резервное копирование изменяемых оригинальных файлов для последующего восстановления. Решил удалить свои старые сообщения, связать их в кучу, и прикрепить сюда (что бы не мусорить). Здесь пытался найти ответ на: 13.06.2020 в 12:39
Хочу создать модпак, и столкнулся с такой вот идеей Нужно что бы во время установки мода в указанную папку, и выборе модификаций, делалось backup оригинальных файлов в папку backup с bat файлом, который отправится на рабочий стол. Допустим я выбираю Мод1 в котором файлы: Скрытый текст
*\Data\Gfx2\UI\BattleScreenHUD\Arrow.txt *\Data\Gfx2\UI\BattleScreenHUD\capturebaseicon.txt *\Data\Gfx2\UI\BattleScreenHUD\ChatCommandsOuterSectorBg.txt *\Data\Gfx2\UI\BattleScreenHUD\markers\explosion_bk.txt *\Data\Gfx2\UI\BattleScreenHUD\markers\standart_damage_marker.txt И оригинал этих файлов отправился в папку backup: Скрытый текст
*\Data\Gfx2\UI\BattleScreenHUD\Arrow.txt *\Data\Gfx2\UI\BattleScreenHUD\capturebaseicon.txt *\Data\Gfx2\UI\BattleScreenHUD\ChatCommandsOuterSectorBg.txt *\Data\Gfx2\UI\BattleScreenHUD\markers\explosion_bk.txt *\Data\Gfx2\UI\BattleScreenHUD\markers\standart_damage_marker.txt И так далее, при выборе Мод2 копия оригинала в backup... Зачем это делать? На рабочем столе будет создан ярлык bat файла, который при открытии будет делать замену файлов, на оригинальные файлы (которые и будут храниться в папке backup) Или не батник, а допустим какой-то exe файл. Не чего особо не нагуглил, что подскажите? 13.06.2020 в 19:45
Подскажите пожалуйста Я всё же интересуюсь сделать backup файлов, которые заменяет, это так скажем "обновление" Нашел такой вот код? Что скажите? Скрытый текст
Код:
[Files] Мой код: Скрытый текст
Код:
#define AppName "Modpack" 13.06.2020 в 21:08
Есть вторая идея которую довольно реально решить. При установке, старые файлы переименовать. А в батнике сделать наоборот, удалять новый файл, а старый переименовать обратно. Что думаете? Как лучше? 14.06.2020 в 10:41
Нашел такой вот код, на просторах интернета. Помогите втулить в свой код, а то у меня ошибки, то на PChar в первом случаи, то на MoveFile во втором. При инсталляции, в "бэкап" сохраняются (перемещением) только те файлы,которые инсталлятор заменяет. При удалении, эти же файлы восстанавливаются (тоже перемещением). Скрытый текст
Код:
function MoveFile(const srcFile, destFile: PChar): Integer; Скрытый текст
Код:
procedure CreateBackup; 13.06.2020 в 21:08
Что-то вышло, с вот таким вот кодом: Скрытый текст
Код:
//Backup Что думаете? Вроде работает Ну и я нашел ответ на этот вопрос, и решил поделится с вами: Моя проблема решилась. Код программы работает отлично. Для лучшего понимания как работает и для чего нужен: Допустим вы устанавливаете модификации или обновление на программу или игру, и вам нужно что бы старые файлы сохранились, а в последующем вернулись, если что-то пойдёт не так. (По началу я думал создать Батник для восстановления файлов, но лучшим способом всё-таки получилось через uninstall). При установке, в корне программы/игры, создается папка "Backup", туда же помещается наш uninstall. В итоге при удалении "обновления" старые файлы возвращаются на своё место, новые же удаляются + папка Backup удаляется. Так как у меня вызывало ошибки на "PChar", я уже прочитав руководство, и изменил на "PAnsiChar", в SHFileOperation.iss: Руководство: Unicode Pascal Scripting notes: The Unicode compiler sees type 'String' as a Unicode string, and 'Char' as a Unicode character. Its 'AnsiString' type hasn't changed and still is an ANSI string. Its 'PChar' type has been renamed to 'PAnsiChar'. Для тех кто сюда зайдёт, прикладываю файл и код, может пригодится кому-то в будущем. Код который вы будите использовать в своем коде: Скрытый текст
Код:
;Подключаем и выполняем указанный файл + прилаживаю файл в архиве, который нужен для подключения: Файл 161699 Надеюсь я кому-то помог :happy: |
Помогите пожалуйста как прописать два раза команду:procedure InitializeWizard();
procedure InitializeWizard(); begin RedesignWizardForm; end; procedure InitializeWizard(); begin ExtractTemporaryFile('bass.dll'); ExtractTemporaryFile('CallbackCtrl.dll'); ExtractTemporaryFile('botva2.dll'); ExtractTemporaryFile('volmax.png'); ExtractTemporaryFile('volmin.png'); ExtractTemporaryFile('voldote.png') ExtractTemporaryFile('volpb.png') ExtractTemporaryFile('MusicButton.png'); ExtractTemporaryFile('music.mp3'); BASS_Init('{tmp}\music.mp3') BASS_CreateMediaPlayer(WizardForm, '{tmp}\volmax.png', '{tmp}\volmin.png', '{tmp}\volpb.png', '{tmp}\voldote.png', 70, 325) end; procedure DeinitializeSetup(); begin Bass_DeInit; gdipShutdown end; |
Цитата:
Код:
begin Скрытый текст
Код:
procedure InitializeWizard(); |
Код:
procedure InitializeWizard(); |
Здравствуйте, помогите, пожалуйста, делаю игровой инсталлятор и нужно внедрить в него доп. по с Яндекса, могу оплатить работу. Уже голову сломал не чего не выходит, пишите, кто знает, как сделать мне в лс
|
Ispanets, Что именно хотите сделать? Какое дополнительное ПО? Браузер от Яндекса? Поиск от Яндекса? Или какую-нибудь другую хрень от Яндекса? ПО в самом инсталляторе или нужно скачать и потом установить?
|
в лс скинул
|
Да мне нужно доп по поставить в инсталятор, не могу найти специалиста по Inno Setup
|
Доброе время суток. Нужна помощь. Нужно получить версию программы из реестра, сравнить версию указанную в скрипте и выдать msgbox старая версия или свежая.
|
Как сделать ассоциацию файлов установить драйвер UltraISO ?
|
Root: HKCR; Subkey: ".iso"; ValueData: "{#AppName}"; Flags: uninsdeletevalue; ValueType: string; ValueName: ""
Root: HKCR; Subkey: "{#AppName}"; ValueData: "Program {#AppName}"; Flags: uninsdeletekey; ValueType: string; ValueName: "" Root: HKCR; Subkey: "{#AppName}\DefaultIcon"; ValueData: "{app}\{#AppExeName},0"; ValueType: string; ValueName: "" Root: HKCR; Subkey: "{#AppName}\shell\open\command"; ValueData: """{app}\{#AppExeName}"" ""%1"""; ValueType: string; ValueName: "" Так ли? Что с драйвером делать и как добавить пункты в контекстное меню? |
Парни добавление Брандмауэр
А, если надо добавить 2 программы то как сделать? [code][Setup] #define AppName "My Program" #define AppExeName "MyProg.exe" Код:
|
Как правильно делить и обновлять файловое содержимое без необходимости замены большинства bin-архивов по паре гигов весом? (к примеру, чтобы пользователь скачивал не весь мод, а только апдейт раздачи с новым setup.exe и bin-архивом на 100 мегабайт, который быд подходил уже к имеющимся архивам?
|
Два вопроса.
1. Как сделать, чтобы основной файл приложение (exe) сохранялся, где положено. По умолчанию он сохраняется в корне папки Crusader Kings 3\*, вместо Crusader Kings 3\launcher\*. 2. Как у ярлыка изменить (добавить свою) иконку? Скрытый текст
; Скрипт создан через Мастер Inno Setup Script. ; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP! [Setup] ; Примечание: Значение AppId идентифицирует это приложение. ; Не используйте одно и тоже значение в разных установках. ; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.) AppId={{B6002F96-06E4-4939-9EAB-AA961EB7EF1A} AppName=My Program AppVersion=1.5 ;AppVerName=My Program 1.5 AppPublisher=My Company, Inc. AppPublisherURL=http://www.example.com/ AppSupportURL=http://www.example.com/ AppUpdatesURL=http://www.example.com/ DefaultDirName={pf}\My Program DefaultGroupName=My Program AllowNoIcons=yes OutputBaseFilename=setup Compression=lzma SolidCompression=yes [Languages] Name: "default"; MessagesFile: "compiler:Default.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: "e:\Test\Crusader Kings 3\launcher\"; DestDir: "{app}"; Flags: ignoreversion Source: "E:\Test\Crusader Kings 3\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs ; Примечание: Не используйте "Flags: ignoreversion" для системных файлов [Icons] Name: "{group}\My Program"; Filename: "{app}\" Name: "{group}\{cm:ProgramOnTheWeb,My Program}"; Filename: "http://www.example.com/" Name: "{group}\{cm:UninstallProgram,My Program}"; Filename: "{uninstallexe}" Name: "{commondesktop}\My Program"; Filename: "{app}\"; Tasks: desktopicon Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\My Program"; Filename: "{app}\"; Tasks: quicklaunchicon [Run] Filename: "{app}\"; Description: "{cm:LaunchProgram,My Program}"; Flags: shellexec postinstall skipifsilent |
Цитата:
Код:
[Setup] Код:
[Icons] |
Цитата:
Цитата:
это Код:
Source: "e:\Test\Crusader Kings 3\launcher\"; DestDir: "{app}"; Flags: ignoreversion Код:
Source: "E:\Test\Crusader Kings 3\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs Если в e:\Test\Crusader Kings 3\ содержится папка launcher, и соблюдены все условия - Не вижу препятствий, т.к. на выходе при установке будет такая же структура, которая попала в инсталлятор. Попало например в инсталлятор Crusader Kings 3\* - В инсталляторе будет структура вида: Код:
\ Код:
MyApp\ Также для ярлыков и задач укажите распололожение к файлу для выполнения, например вместо этого: Код:
[Icons] Код:
[Icons] Не забудьте задать расположение к файлу для выполнения после установки: Код:
[Run] В другом случае вам предётся отдельно добавлять исполняемый файл, например: Код:
Source: e:\Test\Crusader Kings 3\launcher\start.exe; DestDir: {app}\launcher; Flags: ignoreversion |
Как привести к удобоваримому виду выбор компонентов, имеющими перекрестные файлы и уменьшить количество используемых строк (у меня просто много таких опций будет?
Имеется ini файл, который принадлежит нескольким компонентами, первый влияет на множитель высоты, вторые два изменяют цвет. Код:
[settings] Как есть: Как хотелось бы Наверное надо писать условие, но я в паскале не бум-бум. |
Код:
[Setup] Я не могу понять в чем именно причина... |
Всем привет, ответьте пожалуйста на вопрос:
Имеется рабочий скрипт, после успешной работы, в список "Программы и компоненты" в Win10, добавляется установленная программа. Мне не нужно чтоб туда что-то добавлялось. Ни туда, ни в реестр, никуда. Чтоб ничего не создвалось никакого uninstall.exe, никаких папок вообще. Мой скрипт, просто подцепляет по выбору файлы типа setup.exe, которые сами устанавливают все нужное и вносят в ОС все изменения. Что нужно прописать в скрипте и где? Напишите пожалуйста нужные строчки кода. |
Цитата:
Код:
[Setup] |
del
|
Спасибо, разобрался и добавил вашу строку. Появились еще вопросы:
Есть готовый скрипт(инсталятор), он сперва запускает без диалогов главный файл - setup.exe, потом на выбор предлагает установить доп. компоненты(тоже отдельные сетапы). Все установочные файлы находятся в папках, рядом с инсталятором. То есть сам инсталятор пустой, и без файлов ничего не установит. Я не знаю, как мне запаковать эти установочные файлы в сам инсталятор. Чтобы при запуске, он распаковывал их во временную папку, а после окончания работы инсталятора, удалял их. Подскажите пожалуйста как можно так сделать? Вот скрипт: Скрытый текст
Код:
; Script generated by the Inno Setup Script Wizard. |
Цитата:
Цитата:
Код:
[Setup] Только учтите, в вашем скрипте отключен прогресс распаковки файлов, если на их распаковку (во временную папку) нужно время (большой объем), то визуально это будет смотреться, как будто ничего не происходит. |
Цитата:
Спасибо за подсказку, все получилось, все устанавливается. Но есть маленькое НО. Код, который должен запускать в самом начале главный сетап, почему то не срабатывает. Пришлось его закомментировать и добавить запуск в секцию [run]. В общем вот такой скрипт получился: Скрытый текст
Код:
#define MyAppName "AOE" Слегка сбита последовательность установки, то есть сначала выбираются доп.компоненты, а потом начинает установка главной программы, затем установка допов. |
Можно ли делать DiskSpanning для отдельных файлов, т.е. паковать в .bin не обязательные для скачивания конкретные файлы типа озвучки?
|
решил копнуть глубже и новая заморочка с удалением:
По умолчанию при установке создается унинстал, который удаляет приложение, но не удаляет "мусор", который оставляет приложение в процессе работы и саму папку. Как сделать, чтоб при удалении был запрос типа: удалять все полностью, или оставить папку с мусором? |
pzadrotov@vk
Цитата:
Цитата:
в которой прописываются все "мусорные" папки с адресами к ним. Как то так: [UninstallDelete] Type: files; Name: "{win}\MYPROG.INI" = Параметр Name указывает имя отдельного файла или маску Type: filesandordirs; Name: ""{pf}\4KDownload\4kvideodownloader"; = Функции те же, что и у files за исключением, что также может задавать имя папки, в этом случае удаляются все ее файлы и подпапки. Type: dirifempty; Name: "{localappdata}\4kdownload.com" = При использовании этого типа параметр Name должен задавать папку, но не содержать масок. Папка будет удалена только если она пустая. Цитата:
И второй вариант разместить свои компоненты непосредственно на странице с прогресс баром деинсталлятора, в данном случае удалятся будет в реальном времени, то есть только чекбокс отметили сразу все удалилось. При нажатии "Далее" начнется удаление основной папки программы. |
ZVSRus, boss911, спасибо, очень помогли, все работает и удаляется правильно.
Возможно ли еще как то убрать последнее окно оповещения "Завершение установки" с кнопочкой <Завершить>? Потому что последний файл инсталятора, после установки автоматически запускает приложение, которое порой(не всегда), закрывает окно "Завершение установки". В итоге это окно продолжает висеть, на заднем фоне. Постарался расписать подробно. :unsure: Да, еще вот что. Я сделал запись в реестр, чтоб инсталятор делал проверку на наличие установленной программы и в успешном случае, не устанавливал повторно. Писал по стандарту Root: HKLM.... и далеее, но посмотрел в реестр, почему то запись идетне в HKEY_LOCAL_MACHINE, а в HKEY_CURRENT_USER. Можете сказать почему так? |
Цитата:
Код:
[Setup] Цитата:
|
За "завершение установки", спасибо, не показывается больше.
Цитата:
Более того, я сделал проверку на наличие установки Код:
[code] |
pzadrotov@vk
Цитата:
Второе, может сделали запись не в реестр, а в скрипт прописали какой то код чтобы шла проверка на наличие записей в реестре, и далее устанавливать программу или нет. И еще, если вы доводите до ума тот скрипт что выкладывали выше (пост #676) где у вас в секции [RUN] идет запуск 3 отдельных сетапников, а сам ваш инстал пустой, как вы описывали ранее, тогда просто нужно смотреть скрипт, что, куда и как. |
Цитата:
|
Цитата boss911:
смотрите и в \SOFTWARE\Wow6432Node » Точно, так и есть, спасибо, помогли разобраться. Вот полная строка: Код:
Root: HKLM; Subkey: "SOFTWARE\Microsoft\Games\Age of Empires\1.00"; ValueName: "CDPath"; ValueType: String; ValueData: "{src}"; Flags: uninsdeletekey |
И еще, по поводу HKEY_CURRENT_USER, чтоб вы не удивлялись почему там появляется запись в реестре, туда тоже прописывается куча чего то:
Скрытый текст
Код:
[Registry] |
Здраствуйте. Подскажите пожалуйста, как прописать в скрипте проверку MD5 определенного файла по пути "корневая папка"/dta/languagecore.pbo.dayz.bisign. Если MD5 совпало - устанавливать. Не совпало - не устанавливать и показать экран с ошибкой. С другом соорудили вот такой скрипт. Проблема в том, что даже когда ошибка показывается, установка всё равно продолжается. Помогите пожалуйста решить проблему.
Скрытый текст
[code] Function GetInstallDir(Dir: String): String; var Win64: String; begin Dir := ''; case IsWin64 of True: Win64 := '\Wow6432Node'; False: Win64 := ''; end; RegQueryStringValue(HKLM, 'Software' + Win64 + '\bohemia interactive\dayz','main', Dir); Result := Dir; end; [Languages] Name: "english"; MessagesFile: "compiler:Languages\English.isl" [Files] Source: "D:\Дейз\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs [code] function PrepareToInstall(var NeedsRestart: Boolean): String; var MD5: String; LanguagecorepbodayzbisignDirectory: String; MD5_NEEDED: String; begin LanguagecorepbodayzbisignDirectory:= WizardDirValue() + '\dta\languagecore.pbo.dayz.bisign'; MD5_NEEDED:= '472DB8D2BD38B235D9B4CCE7AF3B063B7C5A9F41'; Log('File path:' + LanguagecorepbodayzbisignDirectory); MD5 := GetMD5OfFile(LanguagecorepbodayzbisignDirectory); Log('MD5: ' + MD5); if not (MD5 = Lowercase(MD5_NEEDED)) then begin MsgBox('Текст', mbError, mb_Ok); end; end; end. |
Цитата:
|
Вложений: 1
Я возможно конкретно запоздал с темой.Я новичок в данной теме и напоролся на один баг,на который не смог найти исправление.Дело в скине а точнее в белой полоске.Перерыл многие сайты и гайды заметил,что даже в них эта полоска не фиксировалась,можно ли ее закрасить?Сам скин идеален.Даже пробовал замену ISSkinU.dll, не помогает. Версии Inno тоже пробовал разные, помогите,если не трудно)Исходник тоже прикреплю.
|
DirtyJohny, это нормальное явление. используйте vlc стили
|
habib2302, Воу, а как можно заюзать, не подскажешь?
|
|
Вложений: 1
habib2302, Огромное спасибо за наводку. Единственное,что осталось так это цвет шрифта в основном окне, как можно исправить?)Я думаю полезно будет для других оставить акутальные ссылки на компоненты VCL, потому прилагаю ссылку на Inno setup https://yadi.sk/d/aIme10_Lk0z1mQ и на последнюю версию Setup VCL Styles Inno https://github.com/RRUZ/vcl-styles-p...es/tag/1.5.4.1
|
DirtyJohny, для каждого элемента надо указывать цвет
Код:
procedure InitializeWizard(); |
Помогите:
1. Скопировать папку с файлами (+ скрытые) в папку C:\Users\Users\Dropbox (не знаю какая константа) 2. В конце установки запустить dropbox_offline.exe с ключами /S /SP- (правильно ли указано?) [Files] Source: "C:\Users\vladi\Desktop\Dudonchik\fold\*"; DestDir: "{USERPROFILE?}"; Flags: recursesubdirs Source: "C:\Users\vladi\Desktop\Dudonchik\dropbox_offline.exe"; DestDir: "{tmp}\Dropbox\"; [Run] Filename: "{tmp}\Dropbox\dropbox_offline.exe"; Parameters: "/S /SP-" |
Цитата:
Цитата:
|
Вложений: 1
habib2302, у меня установка должна быть так:
Я пришел к такому выводу, после того, как увидел что после установки Dropbox. В папке синхронизации создается файл с параметрами конфигурации. Я ее скопировал. И если просто создать папку Dropbox, то после установки, Dropbox скажет, что он захочет переименовать ее. А с этими параметрами, просто останется в ней. Тоисть с этими параметрами сразу начнется синхронизация после установки Dropbox (ну, после входа конечно же ж) Поэтому: Скопировать папку Dropbox с параметрами конфигурации, что бы сразу после установки Dropbox он их подцепил, и после входа в аккаунт сразу начал синхронизацию. Так что мне нужно сначала копирование папки, со всем содержимым (и скрытыми файлами), а после выполняется установка Dropbox. Но я не знаю какая константа пути C:\Users\Users\Dropbox, разве USERPROFILE ? У меня ошибка, а в документации не нашел правильной константы, помогите. Последовательность будет такая: 1. Копирование файлов для последующей синхронизации. 2. Установка Дропбокса. 3. Конец. *файл с конфигурацией dropbox прикреплю, для наглядности |
Цитата:
|
Цитата:
|
passstrada, в новой версии нет такой константы,а эта константа %USERPROFILE% виндовая. Для инно используйте {sd}\Users\{username}
|
Цитата:
|
Iska, понятно, но можно указать мин и мак версию или использовать эту константу %USERPROFILE%
|
Цитата:
Цитата:
Код:
{%USERPROFILE} Откройте справку из первого сообщения и почитайте про Константы, даже на русском есть. P.S. К слову. Ещё ютуберы жалуются на линуксоидов, что они такие злые, и почему на LORе новичков тролят. Вы даже не удосуживаетесь справку открыть (тем более на русском), так ещё на "простецкой" Windows. |
Здравствуйте опять.
Помогите расставить кавычки в параметрах запуска. Всю голову сломал. Оригинал запуска файла с параметрами. Код:
sqlite3.exe local.ssdb "SELECT Path from Locations where LocationID == (SELECT Data from Misc where Code == 'DefaultLocation') and Trim(Path) != '' and Trim(RefName) != '';" > 1.log Код:
[Run] |
Цитата:
Код:
[Run] |
Правильно вроде так (учитавая ЛОГ инно)
Код:
Parameters: "local.ssdb ""SELECT Path from Locations where LocationID == (SELECT Data from Misc where Code == 'DefaultLocation') and Trim(Path) != '' and Trim(RefName) != '';"" > 1.log"; |
Вообщем пока переделал батник в exe , с ним все работает. Мистика....
|
Цитата:
|
Цитата:
|
Все заработало, еще раз низкий поклон ответившему. Правда осталось одно неприятное явление. При запуске инсталлятора, приветственное окно не двигается, думаю это последняя просьба помочь мне XD Сердечно прошу помощи)
|
Цитата:
я не правильно написал , я хотел запустить sqlite3.exe с параметрами. Вот они и не пошли -(2ое сообщение) воспользовался BAT to exe и получил exe который уже запускал в ИС (без проблем) вместе с Gnom_aka_Lexander, мы уже все сделали. Из ЛОГ файла вытащили путь установки. Если хотите могу кинуть вам исходник всего этого. |
Цитата:
Код:
[Run] Если нужен вывод в log файл, тогда так: Код:
[Run] |
boss911, Да , так все работает. Спасибо. :laugh:
Все равно мне нужно было запускать это в самом начале поэтому через код. Код:
begin |
Доброе время суток. Как присвоить команду к каждому компоненту (для нормальной установки и распаковки портативной версии), чтобы можно было использовать тихую установку. https://drive.google.com/uc?id=1ZRIR...xport=download
|
Цитата:
|
ZVSRus, Пробовал этот метод, но не работает. Может вы поможете соединить мой скрипт с вашим примером
|
Цитата:
|
Цитата:
|
Цитата:
|
ZVSRus, Посмотрите, правильно ли сделал?
Скрытый текст
Код:
#define AppName "Axialis IconWorkshop" |
Приветствую.
У меня такая проблема, имеется программа которая скомпеллирована из двух исполняемых файлов и запускается из экзешника без установки. При первом ее запуске, в системе на постоянной основе начинает работать исполняемый файл, и после закрытия программы этот файл остается в работе. При последующих запусках этой программы, она уже не запускается и выдает ошибку, так как ей мешает запустившийся исполняемый файл, который начал исполняться во время первого запуска программы. ВОПРОС, как сделать что бы программа которая скомпеллирована из двух исполняемых файлов и запускается из экзешника без установки, игнорировала файл который ей мешает при повторном запуске или перезаписывала его вновь? |
|
не совсем понял что вы имели ввиду? советуете мне исправить формулировку вопроса? если так, то уже исправил.
|
Скиньте плиз все srep и rep одним архивом, и isdone 5 и 6 версию финал
|
Вячеслав.Мартыновских@vk, в https://krinkels.org/ все это есть
|
El Sanchez, Доброго времени суток. Недавно мне скинули сие чудо - http://forum.oszone.net/post-2012750-1182.html
Вопрос был такой: "Простите за мою тупость, но в коде довольно плохо разбираюсь. Я так понимаю там есть переменные которые зависят от действия? Можно небольшое пояснение к этому коду? Ну в плане того, как этим пользоваться, что нужно менять и в целом, как это использовать в целях распаковки моего архива. P.S. я там вижу, что у него есть какая то последовательность. Он сам пакует файл, а потом распаковывает? Или я как обычно несу херню)" Можете помочь в данном вопросе? Если вкратце, то меня интересует просто, как сделать бинарник большого размера (что я уже узнал, путём изменения расширения rar на bin) и как его подключить к своему установщику. |
Вложений: 1
Цитата:
Скрытый текст
Код:
[Setup] В шаблоне нет секции UninstallDelete, т.к. я не знаю структуры ваших файлов и папок. Деинсталлятор ничего не знает про извлекаемые из архива файлы, поэтому в ней описываете корневые файлы и папки из архивов. |
El Sanchez, Видимо я совсем тупой... Простите, можете подробнее процесс описать? Я вставил этот код в Inno Setup. После компиляции создался exe (mySetup) после установки которого создаётся папка "test", где лежит два файла. Но не суть. Я хочу узнать, как мне конкретно подключить свой архив с файлами, чтобы программа потом его распаковывала.
|
Цитата:
|
Всем Привет. Можете подсказать как написать код : Вот что я хочу. Есть игра. Я сделал к ней дополнение и у меня получилось три папки и в игре есть такие же папки. И мне надо чтоб из моих установилось все туда. А то я не пойму как это сделать.
|
niki12899@vk,
|
Народ помогите выкачать скрипт пожалуйста с кринкла https://krinkels.org/resources/r-g-mexaniki.82/
очень прошу помочь) можна кинуть на burzabu@gmail.com |
|
Цитата:
|
burza, то есть, не Вы, а кто-то другой должен
Ничего у Вас не треснет, а, коллега? |
burza, 3 бакса стоит вход в закачку. Раз вы учитесь то думаю Вам не только этот скрипт понадобится. (ИМХО)
|
Добрый день, уважаемые форумчане. Кто в курсе: как обойти ограничение в Inno Setup на размер создаваемого файла в 2.100.000.000 байт? То есть, задача перепаковать игру с дополнительным патчем. Игра в установленном виде весит 12,7 Гб. При компиляции Inno Setup создаёт аж 6 файлов (не считая основного exe-шника): 5 файлов по 1,95 Гб каждый и один (видимо, остаточный) на 1,55 Гб. Оригинальный установщик игры имеет 5 дополнительных bin файлов размерами 3,33 Гб, 2,19 Гб, 142 Мб, 26,7 Мб и 5,93 Мб. Как так получается, что в оригинале возможен размер файлов больше 1,95 Гб, а при компиляции в Inno Setup - нет? Может быть, есть какие-то скрытые настройки в Inno Setup, которые отвечают за снятие данного ограничения? Или же для создания больших bin файлов надо использовать какой-то другой компилятор? Если кто знает такой - подскажите, пожалуйста. Ведь такая возможность точно есть, поскольку имеются игры, в которых bin-арники весят по 20-40 Гб!
|
Цитата:
Обойти ограничение в 2100000000 байт нельзя, только способом ниже - через сторонний архив. http://forum.oszone.net/post-2012750-1182.html http://forum.oszone.net/post-1300871-729.html |
Благодарю, boss911, за подсказку!
|
Цитата:
|
Boogiman23, Вы не поняли. Если я всё правильно понимаю, то:
Цитата:
Цитата:
|
Вложений: 2
Iska, а как же всё это правильно сделать, чтоб создать нормальную установку игры?
Вот, для большего понимания: Это размер установленной игры: 09.04.jpg А это размер исходной установки: 09.041.jpg |
"Здравствуйте! Честное слово, "весь интернет" облазил, но ничего не нашел. Я мало что понимаю в inno setup, но хотел бы спросить, как сделать выборочную загрузку, чтобы человек ставил и убирал галочки перед тем или иным файлом. Спасибо"
Видимо я плохо искал)) Но чтобы другим людям также не париться. Как сделать выборочную загрузку в Inno Setup? https://golos.io/~34ff1xx3wuxy/razra...ereklyuchateli |
Здравствуйте.
Подскажите по вопросу о is7z.dll: 1. Она распаковывает лишь 7z или 7z-sfx-архив тоже умеет? 2. Воспользовался прилагаемым примером (с прописыванием путей), но кроме сообщения о "неверном пароле", более ничего. Распаковка не происходит. - нужно что-то дописать или библиотека не умеет работать с новыми версиями 7z? Boogiman23, А упаковать файлы, скажем в 7zip или WinRar с нужным размером, а в inno прописать распаковку? |
Доброго времени суток,
Есть архив с игрой, необходимо сделать по шаблону (пример скина инсталлятора) установочник. возможно найдется человек который объяснит или сверстает за плату. Скрытый текст
Требования к установочнику: Скрытый текст
1. Окно при запуске приложения (прикрепил пикчу)
2. Окно выбора директории + кнопка выбора. 3. Кнопка установить 4. Лоадинг бар (кнопки есть в 3 стилях (active/hover/disabled)) |
ребята как запустить файл средствами инно сетап msp
|
Цитата:
Код:
[Run] |
ребята помогите
хочу сделать браузер по умолчанию (Google Chrom) так же ассоциации с файлом (Google Chrom) может какой скрипт есть? |
Цитата:
Код:
[Run] |
Цитата:
|
Как выше уже писалось не мог тоже получить регистрацию на форуме krinkels.org нашел и сети что здесь также обсуждается Inno Setup
Установил Inno Setup 6.2.0 Собрал программу, запустил ее установку после сборки, исправил всё что мне нужно, пользуясь различными мануалами. Но есть одна проблема которую не могу решить. Помогите найти причину. В общем суть такая. В программе в подпапке есть два ехе файла запустив которые можно запустить программу. Обзовем их: INPA.exe и INPALOAD.exe находятся они тут: C:\EC-APPS\INPA\BIN\INPA.exe C:\EC-APPS\INPA\BIN\INPALOAD.exe Проблема заключается в том, что в главной папке EC-APPS создается файл INPALOAD.exe естественно что запустив его программа дает ошибку при запуске. Иконка на рабочем столе создается с правильным адресом запуска стартового файла: C:\EC-APPS\INPA\BIN\INPALOAD.exe Как сделать чтобы файл INPALOAD.exe не создавался в этой директории: C:\EC-APPS\INPALOAD.exe Этот файл указан как файл запуска программы: #define MyAppExeName "INPALOAD.exe" |
Всем доброго времени суток
Появилась необходимость скачивать архив, распаковывать и устанавливать. Inno Setup версия 6.2.0 Решили заюзать Inno Download Plugin (он вроде самый адекватный) перевели установщик в silent режим, чтобы избавиться от лишних окон и кнопок получилось как-то так (idp.iss не прилагаю, он у нас без изменений) HTML код:
#define MyAppName "bla" Всё отлично работает, но есть пару но 1 Идёт окно Downloading вызываемое IDP, нажимаем на крестик закрытия окна и в появившемся модальном окне подтверждаем на Yes Вместо того чтобы прервать Загрузку он пытается дальше выполнить установку и создает ярлыки 2 Идёт окно Downloading вызываемое IDP, отключаем wifi, в появившемся модальном окне где говорят "интернет пропал" и спрашивают "Повторить или Отмена?" нажимаем Отмена Вместо того чтобы прервать загрузку он пытается дальше выполнить установку и создает ярлыки Я долго гуглил решения и нашел вот это https://stackoverflow.com/questions/...tion-from-code Пользователь Martin Ba объясняет что вроде бы WizardForm.Close не работает в silentmode и что можно определить два типа обратных вызовов нажатия кнопки отмены [code]: глобальная CancelButtonClick процедура, каждая страница мастера также имеет параметр, OnCancelButtonClick: TWizardPageCancelEvent который можно установить. Но что-то я не разобрался как именно трекать Сancel в кейсе 2 и Yes в кейсе 1 кто-нибудь работал с IDP и Режиме silent? Т.е. ожидаемый результат в обоих двух кейсах - Не идёт распаковка архива который не был получен - Не идёт установка ярлыков - Нет других ошибок - Вместо загрузки показывается временный текст "Rollback changes..." или "Canceling installation..." который показывается пока там всё отменяется, по окончанию нужных действий установщик просто закрывается |
Может быть, есть какие-то скрытые настройки в Inno Setup?
|
Цитата:
Оплату произведу после тестирования вашего setup.exe, укажите прямую ссылку на ZIP чего угодно размером на 20-30 мегабайт, либо звонок с демонстрацией экрана ) Регресс баги/проблемы должны отсутствовать или вам придется править за свой счет =) |
Цитата:
Скрытый текст
Код:
#define MyAppName "bla" |
Цитата:
HTML код:
#define MyAppName "bla" Во время загрузки он довольно сильно лагает (тормозит окно) из плюсов в нём только наличие прогрессбара в таскбаре пока идёт загрузка, но в остальном он довольно корявый. (по крайней мере на текущий момент) Проверяли мы на 6.2.0 Всё же хочется исправить те 2 кейса для IDP и использовать именно его (с нашим дизайном) |
lmiol, всё то, что предлагает господин El Sanchez не имеет ни тормозов, ни глюков. Лучше вежливо попросите его о помощи и этот парень продемонстрирует вам своё мастерство в таком духе, что после увиденного вам ничего не останется как сказать, что этот парень просто волшебник. El Sanchez виртуозно владеет компьютерными языками. Это тот человек, который не копирует код, а пишет его с нуля. Методов написания любого кода существует масса, но не каждый умеет так оптимизированно писать код, как господин El Sanchez.
|
Цитата:
Цитата:
Цитата:
Цитата:
Вы простите, но возникает вопрос - Вам "шашечки", или ехать? Маэстро El Sanchez дал Вам готовое решение по ваш компилятор..., причем, заметьте, абсолютно бесплатно... P.S. Ни чего личного... |
Цитата:
Цитата:
У меня в посте указан плагин IDP, конкретный дизайн, конкретная проблема: я просил дополнить наш скрипт исправив проблему по двум кейсам. Я понимаю, что возможно Маэстро хотел как лучше и переписал на нативку, но факт остаётся фактом: это не то что мы просили. И не круто тут как чайки налетать на меня и делать вид, что я не благодарный. А также необязательно зачмокивать друг друга благодарностями на свои остроты. Конкретно претензий к Маэстро за то, что нативка лагает - нет. Ведь это проблема Inno Setup и это уже пройденный нами этап (повторюсь еще раз) Мы можем попытаться раздуть эту тему. Но я бы очень хотел сконцентрироваться на решении проблемы. Т.е. на финальном результате. От оплаты доработок нашего скрипта по двум кейсам в 1к я не отказываюсь Для защиты своей работы можете не выкладывать код, а локально собрать и во время звонка (гугл мит например) продемонстрировать работу установщика. Или записать видео показав работу двух кейсов. Мне кажется El Sanchez просто было лень вникать в то, что я написал и он просто решил сделать по-быстрому, так как уже где-то реализовывал. Буду рад если я не прав. Всё сводится к тому что своими силами мы разберёмся быстрее. Возможно, в этом и был ваш хитроумный план, поугнетать человека до тех пор, пока он не догадается до нужного решения. Если так, то в аду для вас отдельный котёл, помощнички =) Как сделаю финальный результат я сброшу сюда, просто чтобы утереть вам нос. |
Код:
procedure CurPageChanged(CurPageID: Integer); жирным выделил текст, чтобы показать эти 2 кейса |
Цитата:
Скрытый текст
Код:
var Будет выход без подтверждения с прекращением загрузки, если пользователь Отмена нажмёт или окно попытается закрыть. Цитата:
Цитата:
|
Цитата:
Но я полностью согласен что во время модального окна с подтверждением должна быть пауза. У нативного загрузчика эта пауза есть. Но тут мы посчитали эту проблему низкоприоритетной. Если не успеет нажать значит сам виноват =) Ну т.е. кейс когда он жмёт закрыть и намеренно уходит очень низок. (но конечно будет). Ведь если кто-то не хочет чтобы ему что-то устанавливалось - он не будет ждать с моря погоды. Но повторюсь что такой кейс возможен (отвлекли например). Есть еще кейс если долго ждать загрузку и в конце нажать на Крестик (или эта отмена сделана в конце уже почти загуженного файла) то да, второй кейс когда всё упущено. UPDATE Кстати я потестировал еще раз у нас пауза делается сама на Download от IDP а на installation который у нас идёт секунды 2 уже крестика нет и прервать установку уже нельзя так что всё просто magnifique |
Парни подскажите как сделать, что бы не было видно ошибок при переустановки программы.
Скрытый текст
|
Цитата:
|
Всем привет!
Как можно реализовать поиск необходимой директории установки, при условии, что имя конечной папки и ее расположение может быть разным (все возможные варианты имен известны). Например, я знаю, что папка может иметь имя Толя, Коля или Вася, а вот директории неизвестны. Как найти одну, несколько или все эти папки и установить (дублировать) в них приложение? |
Цитата:
Смотрите в справке константы: Код:
{reg:HKxx\SubkeyName,ValueName|DefaultValue} Примеры: Код:
[Setup] Код:
[Setup] |
Подскажите пожалуйста.
Как можно прочитать свойства файла? (ПКМ->Свойства->Подробно) Мне нужно прочитать свойства уже готового файла инсталлятора (при его запуске), сам файл получают так: {srcexe} |
ivan_rolos, смотря что вам надо прочитать и для чего?
|
habib2302, "Описание файла", у инсталлятора оно будет меняться после сборки.
и нужно чтобы он потом при запуске установки подхватил значение и передал на обработчик как параметр. (отстук, что поставилась копия, такого-то описания) |
Цитата:
Задать сразу значение в секции: Код:
[Setup] |
Vanadiy777, он не подписанный и прокручивать все копии чтобы не ругался smartScreen сложно.
Поэтому нужна возможность получить параметры, к примеру описание. Ваш способ не подходит( |
Цитата:
Обозначьте полностью и по конкретней задачу, что Вам необходимо получить на выходе. |
Vanadiy777,
Цитата:
|
Цитата:
Можете и дальше продолжать играть в Павлика Морозова, но до тех пор, пока Вы по русски не объясните конкретно, что Вам нужно и зачем, то, очевидно, решения не будет... |
Та я вроде не играю в Павлика Морозова.
четко сказал что нужно в инсталляторе прочитать свойство файла (Описание файла). |
Цитата:
Ну, или сами дальше тогда... |
|
Коллеги, всем доброго времени суток!
Подскажите пожалуйста, есть ли решение, как заменить иконку в MsgBox вместо mbError, mbInformation, и т.д. на свою, другую иконку, которая будет браться из системных файлов Windows? Заранее, спасибо. |
Vanadiy777,
В WinAPI есть функция MessageBoxIndirect, которая позволяет использовать произвольный значок. Здесь на форуме есть её реализация (ссылка), но неполная -- требуется небольшой допилинг для загрузки своего значка. |
iglezz, спасибо, буду изучать...
Правда не уверен, что получится, для меня сложновато... |
Vanadiy777,
Поковырял тот образец, удалось в MessageBoxIndirect отобразить значок из 32/64-бит PE-файла (dll/exe/icl). ico использовать нельзя. Пример смогу выложить позже, т.к. код ещё причесать надо. |
Цитата:
Мне надо взять два разных значка из одной системной dll, и в зависимости от события вывести этот значок в MsgBox. |
В итоге получилать такая матрёшка...
Функция MsgBoxEx (на базе MessageBoxIndirect) может служить полной заменой стандартному MsgBox. MsgBoxEx('Сообщение', 'Заголовок', 0, ЗНАЧОК, ФЛАГИ) - стандартный значок MsgBoxEx('Сообщение', 'Заголовок', '', ЗНАЧОК, ФЛАГИ) - значок из установщика MsgBoxEx('Сообщение', 'Заголовок', 'ФАЙЛ', ЗНАЧОК, ФЛАГИ) - значок из 32/64-бит PE-файла (exe/dll/icl/...) В константах IDI_SHIELD и IDI_APPLICATION два новых значка. ЗНАЧОК задаётся константой MB_ICON*, IDI_* либо числом, либо 'строкой' ('MAINICON'). Если файл со значком открыть не удаётся, то устанавливается значок IDI_APPLICATION Коды возврата, флаги, стандартные значки MB_ICON* соответствуют стандартному месседжбоксу. пример.iss
Код:
#define APPNAME "MessageBoxIndirect test" подключаемый WinAPI_MessageBoxIndirect.pas
Код:
#ifndef WinAPI_MessageBoxIndirect__pas подключаемый WinAPILoader.pas
Код:
#ifndef WinAPILoader__pas подключаемый WinAPI.pas
Код:
#ifndef WinAPI__pas Пришлось использовать две разные структуры и функции, т.к. мне непонятно как можно числовое значение преобразовать в LPCWSTR. |
iglezz,
Пример собрал, прикрутил все подключаемые модули. Все отрабатывает как надо. Попробовал прикрутить к своему скрипту - отрабатывает окно MsgBoxEx, т.е. выскакивает второе окошко, но, ни заголовок окна, ни значок в окне не отображаются. При этом все флаги отрабатывают. Т.е., функционал весь и работоспособность сохраняются. Возможно, возникает конфликт с моим, имеющемся кодом... Буду разбираться... iglezz, Вам, от всей души, огромное спасибо за предоставленный материал и примеры! |
iglezz,
Разобрался в чем у меня была ошибка. Все получилось и замечательно работает! Цитата:
Еще раз - сердечное спасибо Вам! :Beer: |
Vanadiy777,
По .icl я ошибся, давно с ними дела не имел. В общем, icl - это просто исполняемый файл с ресурсами Icon внутри. 32/64-бит PE-файлы можно использовать, старинные 16-бит NE-файлы -- нельзя. Переименовывать необязательно. ЗЫ Свои посты выше обновил с учётом этой информации |
iglezz
Есть ли в вашем примере возможность менять размер иконки, например с 32х32 на 48х48 или 64х64 |
ZVSRus,
Нет, такое не предусмотрено. |
iglezz
ОК. Всё понял. А жаль. |
iglezz,
проверил с .icl не изменяя расширение, тоже все нормально отработало. icl собирал в ArtIcons. Спасибо Вам, добрый человек! |
Скрипт для двух .exe в одном инсталляторе.
Чтобы можно было выбирать какую программу устанавливать. Может кто подскажет ? |
serg5,
Вот простейший пример:
Код:
[Setup] |
Цитата:
В "setup" прописывается только один путь.. |
Цитата:
ну так правильно, прописана временная папка. Оттуда уже запускается установщик той программы, которую Вы выбрали для установки. Или не это было нужно? Цитата:
|
Цитата:
Т.е. это ещё не готовые собранные программы. Ваш пример не плох. Но в нём необходим уже собранный софт. Хотя в любом случае спс. |
Цитата:
|
Цитата:
|
Цитата:
Пример
Код:
#define MyAppName_1 "Программа 1" |
Вложений: 1
Цитата:
Удалил секцию "Files" чтобы посмотреть окна визуально. Открывается только одно окно инсталлировать не указано что. Без указания пути. |
serg5,
[Code__] убери черту |
Вложений: 1
Цитата:
Без указания пути." Файл 166873 |
serg5,
По картинке вижу что версия компилятора 6. Покажите секцию [Setup] |
Цитата:
AppName=My Program AppVerName=My Program v 1.7 DefaultDirName={pf}\Программа 1 OutputDir=. Всё с вашего кода. |
Вложений: 1
http://forum.oszone.net/attachment.p...1&d=1657113738
Настрой свой компилятор, в 6 версиях какие-то страницы отключены по умолчанию. |
Цитата:
Попробовал несколько 5-х версий,тоже самое.. В 4-й просто ошибка. |
Расширенная Inno Setup 5.5.1.ee2 Ultra Unicode от китайцев
Добавь в секцию [Setup] это DisableDirPage=no DisableWelcomePage=no |
serg5, скопируйте приведенный текст сценария полностью! Вы используете только часть кода. Это видно по ошибке на вашем скрине.
|
|
Вложений: 1
Чем можно заменить "{cm:CreateStartMenuIcon} " при создании задания в [Tasks]?
Ошибка вылазит Файл 166878 Код:
Name: "startmenuicon"; Description: "{cm:CreateStartMenuIcon}"; GroupDescription: "{cm: AdditionalIcons}"; Check: IsChecked_1 |
Цитата:
Можете стазу свой текст прописать. А у Вас в секции [CustomMessages] вообще что то прописано? |
Цитата:
Необходимо чтобы в одной программе создавался ярлык в меню пуск, в другой нет. |
Цитата:
Это ради бога... Я Вас не об этом спросил... Вы вставляете константу {cm:CreateStartMenuIcon}, которая ссылается на секцию сценария [CustomMessages], а там у Вас ничего не прописано, отсюда и ошибка компилятора. Тоже самое произойдет и с GroupDescription: "{cm: AdditionalIcons}". Поэтому надо или сразу свой текст прописать вместо константы, или добавить записи в секцию [CustomMessages] |
Цитата:
А без выбора ,чтобы по-умолчанию? Так как если оставить для обеих программ создание ярлыков в меню пуск,тогда не спрашивает. |
serg5,
добавьте в скрипт и попробуйте: Код:
[CustomMessages] И секции [Icons] и [Tasks] покажите полностью. |
serg5,
[CustomMessages] CreateStartMenuIcon=Создать ярлык(и) в меню «Пуск» [Tasks] Name: "startmenuicon"; Description: "{cm:CreateStartMenuIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked Вы поясните какие программы хотите запихнуть в свой установщик? Подозреваю что хотите запихнуть стационарную и портативную. А вообще то для ярлыков есть секция [Icons] Создать проверочную функцию и подставить к ярлыкам программы для которой нужно устанавливать ярлыки. |
Цитата:
Name: "{autodesktop}\{#MyAppName_1}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon Name: "{autoprograms}\{#MyAppName_1}"; Filename: "{app}\{#MyAppExeName}"; Tasks: startmenuicon с {group} и {commondesktop} вместо {autodesktop}; {autoprograms} ошибки Цитата:
|
serg5,
Я так сразу и подозревал, только для этих целей думаю надо отказаться от секции [Tasks], а создать костомную страницу и уже на ней размещать все ваши хотелки, так как кроме стандартных ярлыков захотите что то ещё разместить. Выбор установки стандартной версии или распаковки портативной версии на какой то стандартной странице будет смотреться не очень. Переупаковщики программ делают на отдельной кастомной странице. RePack (& Portable) by версий программ в сети валом, присмотритесь и определитесь для себя. |
Цитата:
|
Ещё вопрос "Требуемое место на диске" как прописать для двух программ по отдельности соответственно, без разделения на компоненты, и типы установки т.е. полная,минимальная и т.д.?
|
Цитата:
Сейчас вообще не понятно... Откуда у Вас компоненты взялись? Вы, или полностью свой скрипт дайте, чтобы было понятно, или мат. часть учите... Никто Вашу идею не украдет здесь, а додумывать, что Вы там хотите реализовать - удовольствие так себе... А как хорошо все начиналось: Цитата:
Извините, ничего личного. |
Цитата:
Check: IsChecked это проверочная функция, IsChecked - это внутреннее название функции, оно может быть любое (по английски). Можно и без неё, но ярлыки будут устанавливаться и при распаковке портативной программы, а это не к чему. |
Цитата:
И если вернуться к вопросу "Как сделать ярлык в меню пуск,без выбора создания ярлыка в меню Пуск,(чтобы по умолчанию) создавался,только для одной программы? Цитата:
Код:
#define MyAppName_1 "Программа 1" Цитата:
Да и другим будет познавательно. |
Пример
Цитата:
|
serg5,
Зачем Вы даете скрипт, который предоставил коллега ZVSRus? Я его уже видел... Свой скрипт весь давайте, с [Tasks], [Icons] и т.д. |
Всем спс.
|
Коллеги, подскажите пожалуйста...
Не могу понять, как надо прописать... Паскаль не знаю от слова - абсолютно... Надо запустить regedit с параметрами: Код:
Exec(ExpandConstant('{win}\regedit.exe'), ' /S ''{app}\MyRegOff.reg''', '', SW_HIDE, ewWaitUntilTerminated, LResultCode); Как правильно параметры прописать? Пните, пожалуйста, в нужном направлении |
Vanadiy777,
Путь в одинарных кавычках не прокатит, нужны двойные: Код:
"{app}\MyRegOff.reg" |
Цитата:
Так тоже пробовал - не работает... Может тоже "ExpandConstant" в путях нужна до рег-файла? Но как прописать не могу понять - пишет "ошибка синтаксиса"... |
Vanadiy777,
Ну да, ExpandConstant нужен, раз константы присутствуют. Код:
Exec(ExpandConstant('{win}\regedit.exe'), '/S '+ExpandConstant('"{app}\MyRegOff.reg"'), '', SW_HIDE, ewWaitUntilTerminated, LResultCode); |
Может у кого-то было ,при прописке создания иконки в меню пуск, предлагает (Default),вместо имени при инсталляции.
Код:
Name: "{group}\{#MyAppDisplayName}"; Filename: "{app}\{#MyAppExeName}"; MinVersion: 0.0,5.0; Check: PuskIconCheck and InstallerCheck; Весь код: Код:
#define MyAppName "Моя стационарная программа" В чём может быть причина.. |
[Setup]
DefaultGroupName={#MyAppName} |
Цитата:
только при выборе распаковки портабл версии всё также предлагает иконку в меню пуск... как её оттуда убрать.. Может надо как-то Check по другому указывать? Или в таком случае аргумента какого-то не хватает? |
serg5,
У вас в секции [Setup] включена страница DefaultGroupName={#MyAppName} (страница программной группы), если для вас показ этой страницы не принципиально то можно эту страницу пропустить. function ShouldSkipPage(PageID: Integer): Boolean; begin if (PageID = 8) then Result:= True; end; Тогда страница программной группы показываться не будет, ни при выборе портативной версии, ни при стационарной версии. Если же хотите при выборе стационарной версии хотите показывать эту страницу, тогда надо химичить, все компоненты программной группы перенести на страницу SelectDirPage, пример в справке есть. На странице SelectDirPage создаёте панельку и все компоненты с странице SelectProgramGroupPage переносите на эту панельку SelectDirPage, а в процедуре procedure CurPageChanged(CurPageID: Integer); при включеном Portable: скрываете, а при Installer: показываете. |
Цитата:
Только в portable её не должно быть вообще. Так как там не нужны ярлыки. А она пытается и в portable ярлык повесить... Здесь что-то..?. Потому я писал выше может быть с Check что-не так? Или ещё какой-то задачи не хватает? |
Цитата:
InnoSetup разработан под одну программу, а не под несколько. Запихать в InnoSetup несколько программ (стационарную и портативную) это уже умельцы придумали (переупаковщики программ) PS: Вам как нужно, в обязательном порядке, при выборе стационарной версии показывать компоненты программной группы, или же не принципиально. |
Цитата:
|
serg5,
Если страницу выбора папки в меню пуск совсем не хотите показывать, тогда в секции [Setup] пропишите DisableProgramGroupPage=yes Если при выборе стационарной версии страницу выбора папки в меню пуск показывать, а при выборе портативной версии нет, тогда в секции [Setup] уберите или закомментируйте DisableProgramGroupPage=yes, а в скрипте вставь Код:
function ShouldSkipPage(PageID: Integer): Boolean; |
Цитата:
|
Добрейшего дня, уважаемые форумчане !
Прошу помощи со скриптом. Ситуация такая. 1. Есть некоторая программа, которая устанавливается без проблем, как положено. 2. Есть дополнения (плагины) к этой программе, которые должны устанавливаться точно в ту же, папку, что и основная программа. Но проблема в том, что не все пользователи понимают, какую папку нужно выбрать при установке дополнений, и потом жалуются, что, мол, «программа - херня, ничего не работает». Решение: Было бы хорошо, если бы установщик основной программы прописывал путь установки в системном реестре, а установщики дополнений потом его оттуда считывали бы. С первой половиной задачи я справился без труда, добавив в скрипт установки : Код:
[Registry] Вот так ничего не работает : Код:
[Setup] |
Цитата:
|
Цитата:
Ок, пошёл тогда копать дальше. Спасибо за наводку... |
Vanadiy777, В продолжение темы http://forum.oszone.net/post-2993783-643.html
Можно ли добавить проверку, что если выбран определенный компонент из [Components], то тогда закрывать Ситм, иначе нет? P.S. Вопрос снят, решение найдено. |
EdMSL,
Скрытый текст
Код:
procedure CurStepChanged(CurStep: TSetupStep); P.S. Опоздал маненько, пока писал ... :) |
Цитата:
|
Теперь встал вопрос, как закрывать Стим перед удалением, если ставилась версия именно для Стим. В деинсталяторе не работает IsComponentSelected. Как еще проверить можно? Желательно без записей в реестр, если возможно.
Единственное, что приходит мне на ум, это проверять на наличие файла, специфичного только для Стим версии. |
Цитата:
не совсем задача понятна... Так не пойдет? Скрытый текст
Код:
[_code] |
Vanadiy777, Поясню. Этот код будет всегда закрывать Стим, когда моя сборка удаляется. Но сборка имеет две версии, стим и нестим. А определяется это на этапе установки сборки путем выбора компонента [Components]. В итоге хотелось бы, чтобы закрывался стим только тогда, когда пользователь установил именно стим версию сборки. Но, как я написал, IsComponentSelected недоступен при удалении, его я использую для определения, закрывать ли стим при установке. В общем, нужно что-то вроде
Код:
if IsComponentSelected('type\steam') and IsProcessRunning('Steam.exe') then |
Цитата:
Возможно, предложу сейчас полную херь... :) При установке программы с выбором компонентов в разделе Uninstall Вашей программы прописывается строковый параметр Inno Setup: Selected Components, и там должны быть указаны установленные компоненты. Можно попробовать через RegQueryStringValue считать значение и добавить его в условия при удалении. Но, полный синтаксис не подскажу, не пользовался... Буду тоже очень признателен, если коллеги подскажут. |
Vanadiy777, да, можно попробовать этот способ. Правда, если пользователь установит сборку повторно, не удалив предыдущую (а это не запрещено, так как сборка автономная), то предыдущая информация затрется новой. Не так критично, но есть такой нюанс.
В общем, написал такое условие: Код:
if |
Цитата:
а если запретить повторную установку, пока не удалена старая версия? Не пойдет так? Что нибудь типа такого: Скрытый текст
Код:
[_Code] |
Vanadiy777, В принципе, можно и запретить. Возможно это даже полезно будет. Подумаю. За код спасибо, пригодится.
|
Коллеги, всем доброго времени суток!
Помогите решить проблему... При запуске и отработке программы на редакции Windows 7 Home Basic выскакивает стандартное окно перезагрузки, т.е. FinishedPage, хотя это все отключено... Это происходит только на редакции Windows 7 Home Basic, на остальных редакциях Windows 7-11, все отрабатывает нормально. Возможно ли как-то принудительно "удавить" это окно на Windows 7 Home Basic? Версия Inno Setup 6.0.5, но пробовал и на 5.6.1 Результат один и тот же... Подскажите, пожалуйста, кто знает... За ранее, спасибо. UPD: Решение найдено, всем спасибо. |
Как правильно прописать выбор нужной разрядности при инсталляции.
Может кто знает ? |
Цитата:
разрядности чего? Если файлов, то как то так: Код:
[Files] |
спс.
Цитата:
В секции setup: Код:
[Setup] |
Цитата:
Если этот параметр у Вас указан: Код:
[Setup] и ключ деинсталляции будет прописан в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MyProgram_is1 Если параметр не указан: Код:
[Setup] и тогда ключ деинсталляции будет прописан, соответственно, в HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\MyProgram_is1 |
Хочу генерировать путь установки динамически, считывая путь игры из реестра. Если запись в реестре отсутствует, то выдавать предупреждение. Написал так:
Код:
procedure CurPageChanged(CurPageID: Integer); Но потом он куда-то теряется, и на последнем экране запись о пути пустая. Более того, путь сбрасывается при переходе на следующую страницу, причем переменная {app} имеет корректный путь. Если я пропишу путь напрямую Код:
WizardForm.DirEdit.Text := 'D:\Games\Oblivion'; То на выходе путь не меняется. Что я делаю не так? |
EdMSL, Если путь присваивается правильно, то вероятно поможет вызвать функцию
UpdateReadyMemo
Код:
function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String; Если инсталлятор обнаружит функцию UpdateReadyMemo в Pascal-скрипте, она вызоается автоматически, когда активизируется страница мастера Все готово к установке. Для отображения на странице Все готово к установке в виде строк, разделенных параметром NewLine. Параметр Space содержит строку с пробелами. Инсталлятор использует эту строку для задания установок. Другие параметры содержат (возможно пустые) строки, которые инсталлятор может использовать в качестве секций установок. Например, параметр MemoDirInfo содержит строку для определения секции Выбор папки. Тоесть, после присвоение новой папки установки, нужно вызвать Код:
UpdateReadyMemoo(' ', 'разделитель строк', 'информация пользователя', 'папка установки', 'тип установки', 'список компонентов', 'группа в меню пуск', 'выбранные задачи'); |
Цитата:
|
EdMSL, предоставь значения #NOT_FOUND и #MyAppName. А так же процедуру NoSD - искать не охота. А лучше весь скрипт выложи.
|
Код скрипта:
Скрытый текст
Код:
#define MyAppName "My Game" Директивы Files, Components и т.д. удалил, чтобы не захлмлять. К проблеме отношения все равно не имеют. |
EdMSL,
Скрытый текст
Код:
#define MyAppName "My Game" |
nik1967, Спасибо. Тяжело без линтера жить.
|
Коллеги, всех приветствую от души!
Подскажите, пожалуйста, как правильно прописать синтаксис... Надо добавить задачу в Планировщик заданий, вот так работает: Код:
Exec(ExpandConstant('{sys}\schtasks.exe'), '/create /f /tn "Добавление задачи" /xml '+ExpandConstant('"{app}\AddTasks.xml"'), '', SW_HIDE, ewWaitUntilTerminated, i); За ранее благодарен за помощь. |
Цитата:
Код:
Exec(ExpandConstant('{sys}\schtasks.exe'), Format('/create /f /tn "%s" /xml "%s"', [CustomMessage('foo'), ExpandConstant('{app}\AddTasks.xml')]), '', SW_HIDE, ewWaitUntilTerminated, i); |
nik1967, El Sanchez,
Огромное сердечное вам спасибо! Оба варианта работают. |
Не могу сам разобраться, а примеров не нашел...
Нужно считать из реестра путь установленной программы. Проблема заключается в том, что название программы - постоянное, а вот версия может быть разная. Подскажите пожалуйста на примере Opera или Mozilla Firefox, в ней вообще посложнее будет... Opera
Код:
[_Code] Mozilla Firefox 1
Код:
[_Code] Mozilla Firefox 2
Код:
[_Code] То, что написано красным, меняется в зависимости от установленной версии. Как правильно прописать функцию, чтобы считывалось только название программы, а остальные данные (которые красным) игнорировались? Или, возможно, есть другой способ как-то получить директорию установки программы? Помогите, пожалуйста (ткните носом), если это вообще реализуемо средствами Inno... Заранее благодарен за помощь. |
Как сделать так, чтобы при определенном условии отменить установку?
Допустим, не проходим по системным требованиям. Есть экран проверки. И вот на нем при нажатии "Далее" выдавать сообщение и сразу на последний экран. Или экран с ошибкой может какой есть? В общем, надо правильно прервать установку. Я пробовал Abort, но возникает ошибка и установщик зависает. |
Решил проблему так:
Код:
function NextButtonClick(CurPageID: Integer): Boolean; Не уверен, что способ правильный, но в моем случае рабочий. |
Цитата:
главное - результат! :wink: |
nik1967,
Спасибо Вам огромное! Если установлена Mozilla Firefox x64, то все отрабатывает отлично. Если Mozilla Firefox x86 - то путь не видит. Буду экспериментировать... По результатам отпишусь... |
Нужно получить данные о системе. В шапке есть скрипт, но выглядит он громоздко. Может есть какой-то более современный способ?
Я пробовал этим способом https://stackoverflow.com/questions/...-in-inno-setup Но видеопамять определяется неверно, хотя если делать это все через wmic напрямую, то данные выдает верные. Пишу так: Код:
Query := 'SELECT AdapterRAM FROM Win32_VideoController'; |
Цитата:
nik1967, да, эти варианты тоже уже пробовал - тогда х64 не работает, а х86 работает. |
nik1967,
в общем, попробовал все возможные варианты... Поиск идет конкретно по тем параметрам, которые указаны в #define. Если указано HKLM64 и SOFTWARE\Microsoft\, то ищет путь для х64, если HKLM и SOFTWARE\WOW6432Node\Microsoft\, то, соответственно, для х86. Попытался добавить дополнительные значения в #define, естественно, с другими именами, и продублировать процедуру поиска, чтобы искал сразу по двум ключам, но, покуда я не в зуб ногой, естественно, ни фига путного не получилось... Т.е. надо как то организовать поиск одновременно по ключам "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" и "SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall", а затем уже как то это вывести в Result:= Path; Но для меня это вообще темный лес, и я, безусловно, сам с этим никогда не справлюсь. Если есть возможность, то помогите пожалуйста. С уважением, и заранее благодарю за помощь. |
Цитата:
nik1967, Vanadiy777, вы оба используете раздел WOW6432Node явно, это нельзя делать. Это сейчас вы его читаете, а потом писать туда начнёте и вот уже на 32-разрядных системах появляется раздел WOW6432Node, где быть его не должно. Браузеры ищите сначала в HKCU, потом в HKLM64 (с IsWin64), потом в HKLM32. Подраздел для всех базовых разделов одинаков - SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, не надо тут никакой отсебятины с WOW6432Node. |
El Sanchez, мне то что, мне это не надо. Попросил человек, я помог, чем мог. Давно не занимался скриптами, старый стал. А тут немного размялся. Взял бы да и сам написал скрипт. По всем правилам. Всё, хватит. Отписал своё. Больше не буду вводить пользователей в заблуждение.
|
nik1967, зря Вы так... Ни кого Вы в заблуждение не вводили...
Только благодаря Вам я решил свою проблему, над которой ломал голову не одну неделю. И, хотя маэстро El Sanchez говорит, что написано не правильно, тем не менее, теперь все чётко отрабатывает и на 32-разрядной и на 64-разрядной системе, а также на 64-разрядной, если установлена Mozilla x86. За что Вам еще раз огромное сердечное спасибо!!! :Beer: |
Приветствую, не одну неделю ищу такой скрипт: http://www.forum.oszone.ru/post-1242285-250.html
Но инсталятор почему-то мигает. Дайте пожалуйста если имеется такой скрипт с botva и/или InnoCallback! |
Здравствуйте! Подскажите пожалуйста!
Тут вопрос упирается в WizardSmallImage.bmp. В справках копался, на глаза так и не попалось решения, может плохо искал. Есть какая то возможность чтобы эта картинка отображалась не из WizardSmallImage.bmp, а из экзешника программы Program.exe, допустим отображала иконку 48x48. И есть ли возможность, чтобы там отображалась картинка в PNG. Может скрипт такой есть. |
Цитата:
можно из экзешника программы выдернуть иконку и сделать из нее свой WizardSmallImage.bmp нужного размера. На счет PNG не знаю, но вроде просто так не поддерживается... Попробуйте на форуме примеры поискать. |
Vanadiy777, да я пробовал в некоторых программках и онлайн сервисах. Непрозрачные получаются. У меня фон тёмный. Приходится на этот по размеру фон накладывать значок в PNG. Потом в BMP. Так вроде нормально смотрится. Других подходящих решений пока не нашел.
|
Картинка в .png лежит на панельке
#include "botva2.iss" [Setup] AppName=My Application AppVersion=1.5 DefaultDirName={pf}\My Application OutputDir=. [Files] Source: "b2p.dll"; DestDir: "{tmp}"; Flags: dontcopy Source: "botva2.dll"; DestDir: "{tmp}"; Flags: dontcopy Source: "Icon.png"; DestDir: "{tmp}"; Flags: dontcopy [code] var Panel1: TPanel; 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'); if not FileExists(ExpandConstant('{tmp}\Icon.png')) then ExtractTemporaryFile('Icon.png'); Result := True; end; procedure InitializeWizard(); begin with WizardForm.WizardSmallBitmapImage do begin SetBounds(ScaleX(370), ScaleY(0), ScaleX(58), ScaleY(58)); end; with WizardForm.PageDescriptionLabel do begin Width := ScaleX(289); end; with WizardForm.PageNameLabel do begin Width := ScaleX(305); end; Panel1 := TPanel.Create(WizardForm); with Panel1 do begin Parent := WizardForm.MainPanel; SetBounds(ScaleX(436), ScaleY(0), ScaleX(58), ScaleY(58)); BevelOuter := bvNone; end; ImgLoad(Panel1.Handle, ExpandConstant('{tmp}\Icon.png'), ScaleX(0), ScaleY(0), ScaleX(58), ScaleY(58), True, False); // Картинка PNG ImgApplyChanges(Panel1.Handle); end; procedure DeinitializeSetup(); begin gdipShutdown; end; Картинка в .png лежит на MainPanel
#include "botva2.iss" [Setup] AppName=My Application AppVersion=1.5 DefaultDirName={pf}\My Application OutputDir=. [Files] Source: "b2p.dll"; DestDir: "{tmp}"; Flags: dontcopy Source: "botva2.dll"; DestDir: "{tmp}"; Flags: dontcopy Source: "Icon.png"; 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'); if not FileExists(ExpandConstant('{tmp}\Icon.png')) then ExtractTemporaryFile('Icon.png'); Result := True; end; procedure InitializeWizard(); begin with WizardForm do begin WizardForm.WizardSmallBitmapImage.SetBounds(ScaleX(370), ScaleY(0), ScaleX(58), ScaleY(58)); WizardForm.PageDescriptionLabel.Width := ScaleX(289); WizardForm.PageNameLabel.Width := ScaleX(305); end; ImgLoad(WizardForm.MainPanel.Handle, ExpandConstant('{tmp}\Icon.png'), ScaleX(436), ScaleY(0), ScaleX(58), ScaleY(58), True, False); // Картинка PNG ImgApplyChanges(WizardForm.MainPanel.Handle); end; procedure DeinitializeSetup(); begin gdipShutdown; end; |
ZVSRus, Спасибо!
|
Может ещё кто поможет как кнопки прикручивать.
Я вот видел как у кого-то из репакоделов на фоне картинки WizardImage.bmp есть дополнительные две кнопки. Расположены одна ниже другой. Одна - веб ссылка на сайт программы или форума. Вторая - открывает файл Info.RTF в культурном окошке для просмотра. Я тут нашел кусок кода с кнопкой для ссылки, но она на всех окнах инсталлятора видна. Не то. Code
Код:
{ Переменные } Попробовал её рядом с кнопкой "Назад" расположить. Вроде нормально, но всё равно не то. Во всех окнах она. На десятке вроде ровно. А на семёрке на пару пикселей вниз съезжает. Нормально это или нет, сравнить не с чем. Не знаю. А хотелось бы как выше описано, две кнопки с вышеописанными функциями на фоне картинки WizardImage. |
Может ещё кто поможет как кнопки прикручивать.
[Setup] AppName=My Application AppVersion=1.5 DefaultDirName={pf}\My Application OutputDir=. [code] var RePackButton: TNewButton; WebButton: TNewButton; r: integer; procedure RePackButtonOnClick(Sender: TObject); begin MsgBox('Это сообщение о программе!', mbInformation, mb_Ok); end; procedure WebButtonOnClick(Sender: TObject); begin ShellExec('', 'http://forum.oszone.net/post-2996351-870.html', '','', SW_SHOW, ewNoWait, r); end; procedure InitializeWizard(); begin WebButton := TNewButton.Create(WizardForm); with WebButton do begin Parent := WizardForm.WelcomePage; Left := ScaleX(42); Top := ScaleY(260); Width := ScaleX(80); Height := ScaleY(23); Caption := 'Сайт'; WebButton.OnClick := @WebButtonOnClick; end; RePackButton := TNewButton.Create(WizardForm); with RePackButton do begin Parent := WizardForm.WelcomePage; Left := ScaleX(42); Top := ScaleY(220); Width := ScaleX(80); Height := ScaleY(23); Caption := 'О RePack''s'; RePackButton.OnClick := @RePackButtonOnClick; end; end; |
ZVSRus, Спасибо большое!
Я в кодах не силён. А на примерах и подсказках проще. Кнопка со ссылкой на сайт подошла. А вот кнопка "О программе" не совсем то что нужно. Нужно чтобы открывался текстовый файл readme.RTF вот в таком окне: Кнопка "О программе" с открытием файла readme.RTF
Подскажите пожалуйста такой вариант кнопки. |
Кнопка "О программе" с открытием файла readme.RTF
[Setup] AppName=My Application AppVersion=1.5 DefaultDirName={pf}\My Application OutputDir=. [Files] Source: "ReadMeRu.rtf"; DestDir: "{tmp}"; Flags: ignoreversion [code] var Flag : Boolean; AboutButton : TNewButton; RichEditViewer : TRichEditViewer; ReadmeRu : AnsiString; procedure SettingHideShowOnClick(Sender: TObject); begin Wizardform.NextButton.Enabled := True; if Flag = False then begin RichEditViewer.Hide; Flag:= True; AboutButton.Caption := 'Подробнее'; end else begin RichEditViewer.Show; Flag:= False; AboutButton.Caption := 'Закрыть'; Wizardform.NextButton.Enabled := True; end; end; procedure CurPageChanged(CurPageID: Integer); begin case CurPageID of wpWelcome: begin Wizardform.NextButton.Enabled := False; RichEditViewer.Hide; AboutButton.Caption := 'Подробнее'; Flag:= True; AboutButton.Caption := 'Подробнее'; end; end; end; procedure InitializeWizard(); begin ExtractTemporaryFile('ReadMeRu.rtf'); LoadStringFromFile(ExpandConstant('{tmp}')+'\ReadMeRu.rtf', ReadmeRu); AboutButton := TNewButton.Create(WizardForm); with AboutButton do begin AboutButton.Left := ScaleX(42); AboutButton.Top := ScaleY(280); AboutButton.Caption := 'Подробнее'; AboutButton.ShowHint := True AboutButton.Hint := 'О программе' AboutButton.OnClick := @SettingHideShowOnClick; AboutButton.Parent := WizardForm.WelcomePage; AboutButton.Cursor := crHand; Flag := True; end; RichEditViewer := TRichEditViewer.Create(WizardForm); with RichEditViewer do begin Parent := WizardForm.WelcomePage; SetBounds(ScaleX(164),ScaleY(0),ScaleX(333),ScaleY(314)); ScrollBars := ssVertical; RTFText := ReadmeRu; end; end; |
ZVSRus, Спасибо!
Цитата:
Наверно "Далее" всегда активной должна быть. Я в коде Wizardform.NextButton.Enabled := False; на True поменял, вроде нормально сейчас. Не знаю может ещё там что подправить надо. Подскажите пожалуйста, а как сделать чтобы в этой кнопке при установке с Русским языком отображалось из ReadmeRu.rtf, а при установке с Английским или по дефолту - из ReadmeEn.rtf. И также в названиях кнопок Русский и Английский. |
DA-Bro,
Цитата:
Пример
[Setup] AppName=My Program AppVerName=My Program v 1.5 DefaultDirName={pf}\My Program OutputDir=. [Languages] Name: "ENG"; MessagesFile: "compiler:Languages\English.isl" Name: "RUS"; MessagesFile: "compiler:Languages\Russian.isl" [Files] Source: ReadMeRu.rtf; Flags: dontcopy Source: ReadMeEn.rtf; Flags: dontcopy [CustomMessages] ENG.text=More detailed RUS.text=Подробнее ENG.text1=Close RUS.text1=Закрыть ENG.text2=About the program RUS.text2=О программе ENG.text3=Website RUS.text3=Сайт [code] var Flag : Boolean; WebButton : TNewButton; AboutButton : TNewButton; RichEditViewer : TRichEditViewer; ReadmeRu, ReadmeEn : AnsiString; r: integer; procedure WebButtonOnClick(Sender: TObject); begin ShellExec('open', 'http://forum.oszone.net/post-2996351-870.html', '','', SW_SHOW, ewNoWait, r); end; procedure SettingHideShowOnClick(Sender: TObject); begin Wizardform.NextButton.Enabled := True; if Flag = False then begin RichEditViewer.Hide; Flag:= True; AboutButton.Caption := CustomMessage('text'); end else begin RichEditViewer.Show; Flag:= False; AboutButton.Caption := CustomMessage('text1'); Wizardform.NextButton.Enabled := True; end; end; procedure CurPageChanged(CurPageID: Integer); begin case CurPageID of wpWelcome: begin Wizardform.NextButton.Enabled := False; RichEditViewer.Hide; AboutButton.Caption := CustomMessage('text'); Flag:= True; end; end; end; procedure InitializeWizard(); begin ExtractTemporaryFile('ReadMeRu.rtf'); LoadStringFromFile(ExpandConstant('{tmp}')+'\ReadMeRu.rtf', ReadmeRu); ExtractTemporaryFile('ReadMeEn.rtf'); LoadStringFromFile(ExpandConstant('{tmp}')+'\ReadMeEn.rtf', ReadmeEn); WebButton := TNewButton.Create(WizardForm); with WebButton do begin Parent := WizardForm.WelcomePage; SetBounds(ScaleX(42),ScaleY(250),ScaleX(80),ScaleY(23)); Caption := CustomMessage('text3'); WebButton.OnClick := @WebButtonOnClick; end; AboutButton := TNewButton.Create(WizardForm); with AboutButton do begin AboutButton.SetBounds(ScaleX(42),ScaleY(280),ScaleX(80),ScaleY(23)); AboutButton.Caption := CustomMessage('text'); AboutButton.ShowHint := True AboutButton.Hint := CustomMessage('text2'); AboutButton.OnClick := @SettingHideShowOnClick; AboutButton.Parent := WizardForm.WelcomePage; AboutButton.Cursor := crHand; Flag := True; end; RichEditViewer := TRichEditViewer.Create(WizardForm); with RichEditViewer do begin Parent := WizardForm.WelcomePage; SetBounds(ScaleX(164),ScaleY(0),ScaleX(333),ScaleY(314)); ScrollBars := ssVertical; ReadOnly:= True; if ActiveLanguage='RUS' then RTFText:= ReadmeRu else if ActiveLanguage='ENG' then RTFText:= ReadmeEn; end; end; Извиняюсь за перевод. Перевод машинный. В кнопке ''Далее'' глюка нет, сделано так специально, активируется после нажатия на кнопку ''Подробнее''. Если это вам не нужно, за комментируй две строки в procedure SettingHideShowOnClick(Sender: TObject); Wizardform.NextButton.Enabled := True; и Wizardform.NextButton.Enabled := False; в procedure CurPageChanged(CurPageID: Integer); |
ZVSRus, Спасибо большое!
Подскажите пожалуйста как грамотней удалить папку с содержимым из "C:\ProgramData\Папка программы". Я посмотрел в справке и не увидел такой константы {C:\ProgramData}. Что-то вроде этого: [UninstallDelete] Type: filesandordirs; Name: "{C:\ProgramData}\Папка программы"; Как правильней удалить из этой папки. |
[UninstallDelete]
Type: filesandordirs; Name: "{commonappdata}\Папка программы"; Ну так в справке же есть. |
ZVSRus, понятно. Спасибо!
Просто в справке написано: {userappdata} & {commonappdata} Путь к папке с данными приложения (Application Data). Я вижу что не похоже на "ProgramData" и прошел мимо. |
Inno Setup - константа для каталога 'ProgramData'?
Задать вопрос Задано 6 лет, 1 месяц назад Изменено 2 года, 5 месяцев назад Просмотрено 9 тысяч раз 11 Я хочу, чтобы моя программа установки скопировала некоторые файлы в ProgramDataкаталог Windows, я вижу, что большинство каталогов Windows имеют предопределенные константы, уже определенные в документации по установке Inno, однако я не вижу ни однойProgramData. Поэтому я планирую использовать что-то вроде: {sd}\ProgramData\MyCompany\MyApp Является ли это правильным / наилучшим способом развертывания в этом каталоге с помощью Inno Setup? Мне просто кажется странным, что для каталога нет константы ProgramData. Это {commonappdata} константа. Он назван так, потому что исторически (Windows XP) путь был C:\Documents and Settings\All Users\Application Data (теперь это символическая ссылка на C:\ProgramData). И по той же причине использование the {sd}\ProgramDataне является правильным способом. |
Подскажите пожалуйста!
А как сделать чтобы при русском или анлийском (или по дефолту) выборе установки программы копировались только те файлы которые нужны для того или иного языка. Например ReadmeRu.rtf копируется когда русский выбираешь, а ReadmeEn.rtf когда английский Или Russian.lng при выборе русского копируется, а остальные языки нет. И наоборот. Например вот эти файлы:
[Files]
Source: "Image\ReadmeRu.rtf"; DestDir: "{tmp}"; Flags: dontcopy Source: "Image\ReadmeEn.rtf"; DestDir: "{tmp}"; Flags: dontcopy Source: "{app}\Language\English.lng"; DestDir: "{app}\Language"; Flags: ignoreversion Source: "{app}\Language\Russian.lng"; DestDir: "{app}\Language"; Flags: ignoreversion [Languages] Name: "RU"; MessagesFile: "compiler:Languages\Russian.isl" Name: "EN"; MessagesFile: "compiler:Languages\English.isl" Вроде какая-то зависимость или исключение одного от другого должно быть. Где-то видел раньше, никак не вспомню где рыть. Давно уже было. И пример похожий в справке никак не найду. |
Пример
Код:
[Setup] |
ZVSRus, Спасибо! Код выше работает. Но не совсем то что нужно.
Надо чтобы по тихому молчком копировались файлы. Запустил допустим я инталлятор и выбрал RU или EN фейс для дальнейшей установки. И в зависимости от выбора языка установки по тихому копируются нужные файлы в соответствии выбранного языка. Вот тут например копируется файл в зависимости от разрядности Check: "Такой то"; Source: "{app}\AlarmClock,1.exe"; DestDir: "{app}"; DestName: "AlarmClock.exe"; Check: "Is64BitInstallMode"; Flags: ignoreversion Source: "{app}\AlarmClock,2.exe"; DestDir: "{app}"; DestName: "AlarmClock.exe"; Check: "not Is64BitInstallMode"; Flags: ignoreversion И если я не ошибаюсь то должно вроде быть например Check: "Russian"; или Check: "English"; да хоть или Check: "Китайский"; если в выборе инсталлятора такой язык есть. Как-то вот так: Source: "{app}\AlarmClockEN.exe"; DestDir: "{app}"; DestName: "AlarmClock.exe"; Check: "English"; Flags: ignoreversion Source: "{app}\AlarmClockRU.exe"; DestDir: "{app}"; DestName: "AlarmClock.exe"; Check: "Russian"; Flags: ignoreversion Вроде такое должно быть без костылей. Никак не найду, если конечно не ошибаюсь. И скрипты с примерами у себя покопался только под одну русскую установку. |
DA-Bro
Надо чтобы по тихому молчком копировались файлы. Запустил допустим я инталлятор и выбрал RU или EN фейс для дальнейшей установки. И в зависимости от выбора языка установки по тихому копируются нужные файлы в соответствии выбранного языка. Вопрос не совсем понятен. Запустил допустим я инталлятор и выбрал RU или EN фейс для дальнейшей установки. И в зависимости от выбора языка установки по тихому копируются нужные файлы в соответствии выбранного языка. Это вы сейчас о чём. Если о секции [Languages], то эта секция служит для того чтобы видеть какой текст на всех страницах читать (русский человек будет читать на русском, англичанин на английском). Source: "{app}\AlarmClock,1.exe"; DestDir: "{app}"; DestName: "AlarmClock.exe"; Check: "Is64BitInstallMode"; Flags: ignoreversion Source: "{app}\AlarmClock,2.exe"; DestDir: "{app}"; DestName: "AlarmClock.exe"; Check: "not Is64BitInstallMode"; Flags: ignoreversion Этот пример понятен, вы хотите чтобы у ReadmeRu или ReadmeEn в конечной папке не было приставки Ru или En? или как. |
DA-Bro,
Пример
Код:
[Setup] Из справки
Есть три дополнительные параметры, которые могут использоваться во всех секциях, содержащих параметры. Это:
Languages Список поддерживаемых языков, разделенных пробелами, которые указывают инсталлятору, к какому языку относится запись. Если пользователь выберет язык, указанный в этом списке, запись будет обработан (например, установится файл). Запись без указанного параметра Languages всегда обрабатывается, если только другой параметр этого не запретит. Кроме списка, можно использовать логические выражения. Для справки обратитесь к параметрам секций [Components] и [Tasks]. Например: Languages: en nl |
nik1967
Хотя пардон, Languages: RU данная формулировка совсем из головы вылетела, или не внимательно понял вопрос. |
nik1967, Спасибо! Вот это у меня сработало как я и хотел. Вроде как раз то что искал.
Код:
Source: "{app}\*.*"; DestDir: "{app}"; Flags: ignoreversion А вот эти строчки не срабатывают.
А вот эти строчки не срабатывают.
То есть почему оба файла появляются в системной папке "Temp". Код:
Source: "{tmp}\ReadmeRu.rtf"; DestDir: "{tmp}"; Languages: ru; Flags: dontcopy Эти файлы ReadmeRu.rtf и ReadmeEn.rtf для справки описания программы в инсталляторе. В папку с программой их не нужно копировать. Нужны для этого кода: http://forum.oszone.net/post-2996460-875.html И когда я запускаю инсталлятор, выбираю Русский, появляется окно "Мастер установки". Захожу в папку "C:\Users\Я\AppData\Local\Temp" и вижу это: Файла ReadmeEn.rtf по идее не должно там быть. Может код их все сразу туда копирует. И параметры в "Source:" уже не сработают. Как Вы говорили: если только другой параметр этого не запретит. Не пойму где засада. |
DA-Bro, а тебе так важно, чтобы во временную папку копировался либо RU, либо EN? Всё равно ведь после установки эта папка удаляется. На твоём месте я бы забил на это.
Ну, или если это так важно, то
Код:
procedure InitializeWizard(); |
Цитата:
В процедуре прописано извлечение сразу обоих файлов: Код:
procedure InitializeWizard(); |
Vanadiy777, да чет попробовал, не выходит.
nik1967, да в принципе не критично конечно. Просто глянул у некоторых репакеров так происходит. У них файл появляется один в соответствии RU / EN. Подумал что также типа Languages: ru; обойдётся. |
DA-Bro,
Немного "причесал" скрипт примера
Код:
[Setup] |
Цитата:
И на кнопку "О программе" жму, там пусто. |
DA-Bro, а предыдущий скрипт работает? Сейчас скопировал скрипт из сообщения, работает. Не знаю, что у тебя не так.
|
nik1967, понял где у меня косяк.
У меня было прописано: [Languages] Name: "ru"; MessagesFile: compiler:Languages\Russian.isl Name: "en"; MessagesFile: compiler:Default.isl Изменил на заглавные RU EN и всё нормально стало. Не знал что из-за верхнего-нижнего регистра такое может случиться. В общем получилось как я и хотел. Лишнего файла Readme.rtf теперь нет. Спасибо! А может подскажите с иконкой. Я вот в справке увидел два варианта кода. Иконка вверху слева
Код:
procedure NewIcon; Иконка вверху слева 2
[code][Setup]
AppName=CheckFile AppVerName=CheckFile DefaultDirName={pf}\CheckFile OutputDir=. DirExistsWarning=no [Files] Source: icon.ico; DestDir: {tmp}; Flags: dontcopy Код:
function LoadImage(hInst: THandle; ImageName: PChar; ImageType: UINT; X, Y: Integer; Flags: UINT): THandle; external 'LoadImageA@user32.dll stdcall delayload'; Попробовал, не срабатывает у меня. Может там что-то поправить нужно. Или может есть вариант какой, чтобы иконка бралась как-то из ресурса экзешника самой программы и там отображалась.. |
Цитата:
SetupIconFile=Icon.ico Из справки [Setup]: SetupIconFile Описание: Определяет новую иконку для программы-инсталлятора. Этот файл должен быть расположен в исходной папке скрипта, если только для него не указан полный путь или нет приставки "compiler:" - в этом случае компилятор будет искать указанный файл в своем каталоге. Эта директива не поддерживается в Windows 95/98/Me. Например: SetupIconFile=MyProgSetup.ico |
ZVSRus,
Я и иконки везде распихал и переименовывал их. Ничего не срабатывает. Ошибки Ошибки Ошибки. Чет не то с этими скриптами "Иконка вверху слева". Чего-то не хватает. |
Цитата:
Вам надо то одну строку SetupIconFile=Icon.ico прописать в секции [Setup] [Setup] SetupIconFile=Icon.ico Если конечно речь идёт об иконке на верхнем бордюре, слева. |
Цитата:
Можно извлечь иконку из экзешника самой программы и положить ее рядом со скриптом. Затем, как советует коллега ZVSRus, Код:
[Setup] Цитата:
|
ZVSRus, да я так и прописывал. Не получается.
Vanadiy777, подскажите пожалуйста, где взять расширенную версию попробовать. Вы сами чем компилируете? |
|
Цитата:
Я же вам написал [Setup] SetupIconFile=Icon.ico И ни каких кодов не надо. Удали их. Для иконки что на верхнем бордюре слева есть стандартная директива SetupIconFile=Icon.ico Покажи секцию [Setup] полностью. |
ZVSRus,
Setup
[Setup]
MinVersion = 0.0,5.01 ShowLanguageDialog = yes #define AppExe "{app}\Program.exe" #define AppName "Program" #define AppVerName = "Program 1.0" #define AppVer "1.0" AppName = {#AppName} AppVerName = {#AppVerName} AppVersion = {#AppVer} AppPublisher = {#AppPub} AppPublisherURL = {#AppURL} AppId = {#AppName} UninstallDisplayIcon = {#AppExe} VersionInfoVersion = {#AppVer} AppComments = "Program" DefaultDirName = "{pf}\Program\Program" DefaultGroupName = "Program\Program" DisableWelcomePage = no AlwaysUsePersonalGroup = yes AllowNoIcons = yes SetupIconFile = Image\Setup.ico WizardImageFile = Image\WizardImage.bmp WizardSmallImageFile = Image\WizardSmallImage.bmp |
Цитата:
|
Ваш скрипт у меня работает правильно
Код:
#define AppExe "{app}\SSDToolBox.exe" |
SetupIconFile = Image\Setup.ico
Если рядом со скриптом есть папка, в которой лежит твой файл значка Setup.ico, то все должно работать без проблем... |
ZVSRus, а кусок кода можно посмотреть который Вы проверяли.
Мне надо пример полностью увидеть, так то легче соображается. Вот вставляю я это: Код:
procedure NewIcon; |
DA-Bro
Выше var begin убери. Иконка и без этого куска кода работает. |
ZVSRus,
Цитата:
А мы об одном и том же говорим? Иконка должна заменить картинку в правом верхнем углу. Вот мне и попались в справке два варианта этих словами не скажешь злополучных кодов) |
DA-Bro
Это сообщение что Неизвестный тип TNewIcon. Без скрипта тяжело что либо понять. Показывай весь скрипт. |
ZVSRus,
...
[code]#define WildcardExists(str FileName) \
((Local[0] = FindFirst(FileName, faAnyFile)) ? \ (FindClose(Local[0]), True): False) #define FolderExists(str FolderName) \ ((Local[0] = FindFirst(FolderName, faDirectory)) ? \ (FindClose(Local[0]), True): False) #ifdef UNICODE #define AW "W" #define W "W" #else #define AW "A" #define W "" #endif Код:
{ |
DA-Bro
Это понятно, только какая? А мы об одном и том же говорим? Иконка должна заменить картинку в правом верхнем углу. Вот мне и попались в справке два варианта этих словами не скажешь злополучных кодов) Блин, две страницы форума исписали, наконец то дошло картинку прикрепить. Там должна быть не иконка, а простая картинка в .bmp или .png формате. Эта картинка называется WizardSmallImageFile = WizardSmallImage.bmp (директива в секции Setup) Ранее я вам давал пример как запихнуть свою картинку на MainPanel Ваш скрипт |
ZVSRus, да с картинкой PNG вы мне помогли. Работает как надо. Как бы вопрос закрыт. Спасибо!
Но тут речь, как ICO вместо BMP заменить, чтобы избавиться от головной боли с этой прозрачностью-непрозрачностью картинок BMP. Вот и наткнулся на эти два варианта из справки. |
ZVSRus, в общем проехали с этой иконкой. Не буду и не надо заморачиваться.
Извиняюсь за отнятое у Вас время. |
Подскажите пожалуйста! А как вот это сделать.
В обычном мастере показывает только сколько требуется на диске. |
Цитата:
вот так не подойдет? Пример
Код:
[Setup] |
Vanadiy777, Выдает вот такое окошко.
|
Цитата:
попробуйте сначала только пример скомпилировать. Версия Inno Setup какая? Я на 5.6.1 проверял. |
Vanadiy777, да, я так сейчас один его и попробую.
В архиве темы увидел пост про другую ошибку. Там пишут переменные нужно объявить глобально. Только как. У меня наверно нестыковка с другим кодом. Похоже надо что-то объединить. Сам не знаю. |
Цитата:
если пример отдельно нормально компилируется и работает, то у Вас, видимо, что-то в коде пересекается... Отсюда же не видно... |
Vanadiy777, Вы мне дали пример похоже один в один то что я попросил как на картинке.
Он работает. То что нужно. Спасибо большое! Думаю у меня нестыковка с кодом который давали выше с кнопками. Сейчас попробую подставить к вашему примеру коды по частям и посмотрю когда вылетит ошибка. |
Vanadiy777 Ваш пример "Место на диске" и скрипт от nik1967 тоже рабочий.
Но вот когда их объединяешь лезут ошибки. Не знаю как эту нестыковку поправить. Как их вот "подружить" друг с другом. Вот эта ошибка выскочила: |
Цитата:
Видимо, объединяете не правильно... Пробуйте... Скрытый текст
Код:
[Setup] |
Vanadiy777, дык просто не знаю где подправлять). Уже всю голову сломал. Спасибо! Сейчас посмотрю.
|
Цитата:
ну, дык надо ж не просто копипастом делать, а посмотреть, что и где жить должно... :wink: |
Vanadiy777, Скрипт работает. Спасибо большое! Попробую остальное к нему добавить.
Подскажите пожалуйста, где была нестыковка. Что не так было? Хоть знать на будущее. |
Цитата:
Да я бы с удовольствием подсказал... Но я ж не знаю, что Вы там прописали в сценарии... Давайте полный скрипт - вместе ошибки разберем... :) Может, и остальное вместе прикрутим... |
Vanadiy777, Спасибо!
Я уже вижу некоторые изменения. До меня бы сейчас конечно не дошло. Мало знаний. Охота самому попробовать всё на место расставить. Если что, попрошу уж помочь тогда мне тупоголовому). Спасибо! |
Цитата:
да, примеры и подсказки - это все замечательно, я сам тоже не профессор в этом, и часто помощи прошу более опытных коллег... По опыту: пока сам не попробуешь, и шишек не наколотишь - понимание не приходит... :) |
Vanadiy777, Когда интересно, можно и шишек понабивать)
А Вы не подскажите, как эти две строчки в свойствах экзешника закомментировать. Или, если нельзя, совсем их убрать. |
Цитата:
нет, не подскажу, к сожалению... Это надо править в SetupLdr.e32, но, это не всегда заканчивается положительным результатом... Как вариант - просто не открывать этот файл в Restorator, и не париться на этот счет... :) |
Vanadiy777, ну так то их не видно. А в рестораторе смотришь: чего-то не хватает, не заполнено. Не порядок)))
Добавил я полностью весь скрипт. Всё отлично. Тьфу-тьфу-тьфу... Спасибо большое! Выручили! |
Цитата:
забейте... У меня, например, когда смотрю в рестораторе, "Оригинальное имя файла" - вообще такого пункта нет... А "Комментарий" в SetupLdr.e32 поправьте в самом компиляторе... |
Vanadiy777, я вот хотел ещё строчку "О программе" убрать.
Нашел вот такое решение: Код:
begin Там файл Readme.RTF черно-белый становится, цвет и шрифт пропадают. Может у Вас есть решение получше, как убрать эту строчку. |
Цитата:
надо всего одну строчку добавить без всяких begin и end. Отметил красным, что надо добавить и, главное куда, остальное трогать не надо... Код:
procedure InitializeWizard(); |
Vanadiy777, Нет слов. Спасибо!
Просто и четко. Раз и строчки нету. Справки, примеры, это всё конечно нужно изучать и пробовать. Но без подсказок грамотных людей также далеко не уедешь. В школе бы учебники раздавали детям и иди отсюда домой изучай, через 10 лет на ЕГЭ придёшь расскажешь) Так нет, без разъяснений учителей всё равно не обойтись никак. Спасибо! |
Vanadiy777, а может подскажите.
Я вот скрипт один нашел: "Проценты в прогрессбаре установки". ...
Код:
var А у него просто нолик с процентами моргает и всё. Не понятно почему проценты не крутятся, а только "0 %" и всё. Может есть у Вас получше или рабочее решение. |
Цитата:
А сейчас проверил на другой перепаковке. У меня там страница "Информация" есть и там тоже файл InfoBefore.rtf. Те файлы цветные нормальные, а этот черно-белый. Может ещё что куда надо вписать, чтобы он на странице "Информация" тоже нормально в цвете отображался. Подскажите пожалуйста! |
Цитата:
Это у Вас все в одном проекте реализовано, или в разных? Давайте скрипт полностью, который не работает... Так будет быстрее и проще, а то я с Вами запутался совсем... :) |
Vanadiy777, отправил Вам в личку.
Да скрипт в данный момент на всё. Просто в некоторые перепаковки добавляю InfoBeforeFile. Появляется страница "Информация", и там этот RTF черно-белый. А где кнопки на первой странице, там нормально. Код:
InfoBeforeFile = "{tmp}\InfoBefore.rtf" |
DA-Bro,
отправил в личку... Там готовый вариант и пример для тестов. Про проценты в прогресс-баре пока не разобрался. |
Цитата:
|
Vanadiy777,
Посмотрел скрипт. Вот что увидел. Файл InfoBeforeRu.rtf предназначен для страницы "Информация". А он теперь и там и на кнопке показывает. А на кнопке должен ReadmeRu.rtf всегда отображаться. И InfoBeforeRu.rtf только для страницы "Информация". |
Цитата:
Цитата:
Вы скрипт скомпилировали, и там это увидели? Или просто просмотрели сценарий, и увидели, что при процедуре InitializeWizard(); InfoBeforeRu.rtf подгружается так-же, как и ReadmeRu.rtf ??? Что Вас в этом смутило? Я же дал пример отдельный специально, скомпилируйте и посмотрите. В Вашем скрипте прописаны те же самые значения - пробуйте... :) |
Vanadiy777, да, я скомпилировал.
На первой странице когда кнопку "О программе" открываете, показывает InfoBeforeRu.rtf. И на странице "Информация" InfoBeforeRu.rtf. Но тут то как и должно быть. Нормальный в цвете. А на кнопке "О программе" должен всегда быть ReadmeRu.rtf, а его нет. Наверно его подменяет InfoBeforeRu.rtf. ReadmeRu.rtf - там короткое описание. Название, версия... InfoBeforeRu.rtf - подробное описание программы. Много строк... |
Цитата:
InfoBefore.rtf тоже будет на двух языках? Просто чтобы понимать, как код прописать? Да, они забивают друг друга... Извините, сам только заметил... |
Vanadiy777, да, пожалуйста сделайте на двух языках, раз уж мастер установки RU-EN.
А то потом приспичит и опять лишний раз просить поправить. |
Цитата:
да, поправил и сделал на двух языках. Отправил в личку, пожалуйста попробуйте, по идее, сейчас должно все работать... :) |
Vanadiy777, теперь получается наоборот. Везде показывает ReadmeRu.rtf.
|
Цитата:
Вы точно уверены, что правильные rtf-файлы подсовываете? Возможно у Вас файлы с одинаковым содержимым, просто с разными названиями, поэтому и разницы не видно. Проверьте все еще раз. С тем скриптом, что я Вам дал, у меня все нормально отрабатывает... И в "Temp" два разных файла извлекаются (у них даже размер разный), и подгружаются правильно, в зависимости от выбранной задачи. И, если язык меняешь, то и файлы, соответственно, меняются. Как еще проверить - не знаю. |
Vanadiy777, Сильно прошу не пинать меня)
У меня было прописано маленькими буквами, в голове застряло что и так сработает независимо от регистра. И забыл исправить вот это: ...
'en': begin
'ru': begin Название ReadmeRu и [Languages] Name: "ru"; MessagesFile: compiler:Languages\Russian.isl Name: "en"; MessagesFile: compiler:Default.isl Сейчас Всё Отлично. На RU и на EN всё как надо. Спасибо Огромное! |
Цитата:
Я то без обид, главное, что все работает... |
Vanadiy777, Да хотел еще реализовать вот такую штуку.
...
Хотелось бы реализовать на первой странице два чекбокса.
Обычная установка и Портативная распаковка. И если выбрать вариант "Портативная распаковка" то на странице "Выбор папки установки" появлялся бы чекбокс "Упаковать в архив" В общем при выборе "Портативная распаковка" + "Упаковать в архив" должна быть функция упаковки файлов для портативки архиватором 7z с названием архива NameRrogram.VersionProgram.Portable.7z Как раз на странице "Выбор папки установки" можно сразу и выбрать в какую папку этот архив скинуть. |
Цитата:
Это уже точно не ко мне... На этом мои знания заканчиваются... В теме где то упоминалось что то похожее, попробуйте поискать... Вот про проценты, но сам не пробовал, хотите - пилите под себя: Пример
Код:
[Setup] Понадобится библиотека innocallback.dll, если поиском не найдете, пришлю в личку... |
Vanadiy777, Спасибо, посмотрю.
А не подскажите. У меня вот такое убивание процесса при удалении. Код:
[UninstallRun] Может есть какое более правильное решение. |
Цитата:
сам не пробовал... Пример:
Код:
[Files] |
Vanadiy777, Спасибо! Попробую.
Что-то кнопки "Полезное сообщение" пропали. Хотел нажать, а их нет. У меня наверно лимит превышен ) |
Цитата:
|
Подскажите пожалуйста.
Как сделать чтобы в инсталляторе при выборе Русского языка прописывалось везде "Русское название программы", а при выборе Английского или по дефолту "English Name Programs". И папка программы в меню Start так же называлась при выборе языка. Что-то вроде этого. #define AppName "Русское название программы" #define AppVerName "Русское название программы 1.0" #define AppName1 "English Name Programs" #define AppVerName1 "English Name Programs 1.0" |
Цитата:
это не нужно... Вот так нормально работает: Код:
[Setup] |
Vanadiy777, Спасибо! Помогло. Даже очень.
Подскажите пожалуйста, ещё вот такая загвоздка. В языковом файле есть такая строчка: [Messages] ; *** Application titles SetupWindowTitle=%1 Название программы отображается. А как сделать чтобы название и версия программы отображались. Я и так SetupWindowTitle=%1 %2 и так SetupWindowTitle=[name/ver] пробовал подставлять. Это не срабатывает. |
Цитата:
можно так: Код:
[Setup] |
Цитата:
А можно так :)
Код:
#define AppVerName "Русское название программы 1.0" |
nik1967,
так даже прикольней... :) |
Vanadiy777, nik1967, Спасибо!
По первому вопросу вариант от Vanadiy777 подошел. Проще получилось и кучу дублей ru и en из секции [Icons] убрал. Нагородил я там огород) По второму вопросу вариант от nik1967 подошел. Но у меня вот так сработало: Код:
begin |
Цитата:
если разработает, то значит правильно... У Вас там очень сложный скрипт... В процедуру InitializeWizard(); и так много всего добавлено... Я бы, честно говоря, лучше бы через через [Messages] сделал бы... Но, если работает, тогда все нормально... |
Vanadiy777, да есть ещё нестыковки со скриптом.
И вот это объединить не знаю как. procedure CurPageChanged(CurPageID: Integer); begin CurPageChanged1(CurPageID); CurPageChanged2(CurPageID); end; |
DA-Bro,
Я помню Вашу просьбу, и занимаюсь этим вопросом... Просто сами понимаете - выходные... :wink: |
Vanadiy777, да я не тороплюсь. Понимаю конечно. Я там уже кучу изменений сделал. Даже теперь и не знаю.
Если может самое новое что есть Вам скинуть. Я там ещё ковыряюсь. Что-то нахожу интересное, пробую добавлять. Смотрю, работает не работает, надо не надо или на потом оставить) |
DA-Bro
Описали бы все свои загвоздки разом, давно бы уже многое решили. |
Цитата:
Тогда пока ничего не трогаю... Как закончите эксперименты, скиньте в личку, пожалуйста... :) |
Всех с наступающим!
Подскажите пожалуйста. Такой вопрос: Как сделать так, чтобы при нахождении Программа.exe в C:\Program Files (x86)\Программа туда копировались файлы в папку C:\Program Files (x86)\Программа\Папка а если Программа.exe находится в C:\Program Files\Программа , то файлы копировались в C:\Program Files\Программа\Папка И второй вопрос: Как можно прикрутить кнопку пониже выбора пути установки, чтобы можно было переключать путь с "Program Files (x86)" на "Program Files" и наоборот. |
Цитата:
Пример
Код:
[Setup] Но так и не понял логику вопроса. |
Цитата:
Папку с шаблонами нужно скопировать в папку с программой. Если установщик находит программу (если она установлена) в "Program Files (x86)" то копирует файлы туда, а если программа находится в "Program Files" то по этому пути. Если программа не установлена то по идее нужно чтобы появилось сообщение об этом или просто остался путь по умолчанию. Тут речь идёт не об установки программы а шаблонов в эту программу. Соответственно и "Program.exe" нет в установщике, не указан. |
Цитата:
Если программы нет, тогда выдаётся сообщение что программа не найдена, кнопка OK и ничего не происходит. Пример из справки
Код:
[Setup] Тестируй в паре с предыдущим примером |
Всем привет. Подскажите, пожалуйста: требуется, чтобы после установки программы, на рабочем столе в автоматическом режиме создавался ярлык (без права выбора пользователем - создавать его, или нет), и чтобы в этом ярлыке, в поле "Объект", автоматом были прописаны нужные параметры запуска. К примеру: "путь_установки\исполняемый_файл.exe" -параметр запуска 1 -параметр запуска 2
Не могу разобраться, как это сделать. |
inyourspace,
Пример
Код:
[Setup] |
Еще одна проблемка. При подсовывании InfoBeforeFile файла компилятору в txt формате, по итогу в инсталляторе вместо кириллицы в нем кракозябры. Из-за чего может так быть?
|
Цитата:
компилятор, видимо, не понимает кодировку, в которой сохранен txt. Попробуйте сохранить txt-файл в другой кодировке. |
Приветствую.
Возможно здесь где-то есть ответ, но я сейчас с телефона и искать крайне сложно. Пожалуйста, подскажите или дайте ссылку на информацию о том, как сделать выборочную распаковку архивов. К примеру: Data1.bin нужно установить однозначно. Затем или Data2.bin, или Data3.bin, что зависит от выбора пользователя. Установить оба архива невозможно. Далее установить Data4.bin и Data5.bin, или какой-то один из этих архивов, или вовсе ни одного. Заранее спасибо. |
Цитата:
Может как то так
Код:
[Setup] |
Спасибо за ответ, но, похоже, что примерно таким способом я и делаю. Минус этого в том, что inno setup засовывает файлы непосредственно в setup.exe, увеличивая его размер. При установке он просто засовывает нераспакованные архивы в папку. Да, можно указать, чтобы установщик эти архивы распечатал, но размер setup.exe от этого не уменьшится. Поэтому я хочу сделать так, чтобы при выборе архива А он распаковывался, а архив Б оставался нетронутым, не засовывался ни в какие папки.
Вот тут идет распаковка: Скрытый текст
if not ISArcExtract ( 0, 100, ExpandConstant('{src}\data.bin'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
Вот какие строчки надо добавить, чтобы установщик, ссылаясь к выбранным компонентам, распаковывал соответствующие архивы, находящиеся в одной папке с setup.exe. |
Цитата:
тогда не понятна суть вопроса. |
Вложений: 1
Цитата:
Есть 5 архивов .bin. Они лежат в папке с setup.exe (см. картинку). Вот мне нужно, чтобы data.bin установился однозначно, так как там основные файлы. Архивы data 1.bin и data 2.bin содержат данные интерфейса, противоречащие друг другу. Поэтому нужно установить какой-то один из них, но на выбор: кого-то больше устроит data 1.bin, кого-то data 2.bin. Архивы data 3.bin и data 4.bin содержат дополнительные файлы, которые можно установить все, или любой из них, или ни одного вообще. Как это сделать в компонентах я примерно понимаю. Скрытый текст
Код:
[Components] Но тогда все эти файлы загрузятся внутрь setup.exe и этот файл будет весить более 300мб, а сейчас он весит четь больше 1 мб. Я хочу, чтобы никакие архивы не добавлялись внутрь setup.exe. При запуске exe и после выбора пользователем нужных компонентов, setup.exe распаковывал только те архивы, которые были указаны, а остальные не трогал. То есть если юзер выбрал data 1.bin, то data 2.bin просто пропускается. Где я уже только не лазил, ответ не нахожу. Это мой первый скрипт, и я сразу решил морочить себе голову :). |
Цитата:
Скрипт дайте полностью (можете в личку, если здесь светить не хотите...) :wink: |
Здравствуйте! Помогите пожалуйста со скриптом как у NSIS.
Может есть получше варианты, пока не видел. |
Цитата:
Ну да ладно, Так пойдёт (предварительный вариант) |
Цитата:
мне очень пойдет. Буду очень признателен, если со мной тоже поделитесь. Заранее спасибо. |
ZVSRus, Здравствуйте! Ещё как пойдёт.
|
Цитата:
и мне давайте пожалуйста, даже в таком варианте подойдет. :) |
|
ZVSRus, да визуально всё нормально.
Я смотрю при выборе распаковки отключаются языки. В некоторых случаях будет нужно чтобы при распаковке был выбор языков как при обычной установке. Просто скрипт не вижу и не понимаю как там включать отключать нужные или ненужные чекбоксы. Вы пожалуйста не торопитесь, подожду сколько потребуется. |
Цитата:
Опишите все хотелки сразу, чтобы по несколько раз не лазить, и прикручивать то одно, то другое. На данный момент в скрипте уже 1200 строк. |
ZVSRus, да так всё пощелкал, посмотрел, всё совпадает.
При выборе английского языка установщика надписи на русском. Но это в принципе сам тогда доделаю. Ещё хотел тут по тихим ключам установки. А именно:
Обычный вариант установки, понятно, /verysilent. Как бы вопросов нет. Но вот с портативным режимом нужно, чтобы был ключ /p и /P, чтобы срабатывали и нижний и верхний регистры. То есть так: /verysilent - обычная тихая установка /VERYSILENT - обычная тихая установка /verysilent /p - распаковка портативной версии /VERYSILENT /P - распаковка портативной версии Ну или даже так срабатывало /verysilent /P и /VERYSILENT /p А, вот еще, скорее наверное вопрос: А можно вообще при установке обычной версии AppId было выбранной редакции. AIDA64 Business, AIDA64 Extreme... Или для всего оставить AIDA64 и не заморачиваться. |
Цитата:
Цитата:
В данном скрипте есть функция AppID, для каждой редакции свой AppID Код:
function GetAppID(const Value: string): string; |
ZVSRus, да конечно подожду сколько нужно, не горит. С AppID понял. Спасибо большое!
При завершении установки не знаю у Вас появляется окно: установка или распаковка завершена, запустить программу сейчас. |
ZVSRus, DA-Bro,
Парни, ну скрип то дайте пожалуйста... Хоть какой-нибудь промежуточный... :) А, то у вас междусобойчик, а я здесь как сирота... :o |
Скрытый текст
|
Vanadiy777, так он его допиливает, у меня его тоже нет.
ps я в прошлый раз со скриптом разобрался. У меня там косяк похоже был из-за скина. Похоже скин такой что при наведении на кнопку Далее она не подсвечивается, а только тогда когда нажмёшь на кнопку. Без скина попробовал, всё нормально с кнопкой. Аномалия) Так что спасибо за помощь! Потом уж со скином придётся разобираться. |
Цитата:
от использования скинов давно отказался... Во первых, лишний вес, во вторых, гораздо большее срабатывание сканеров на VirusTotal... |
ZVSRus, такое вот хотелось бы окно:
Только в первой строчке: Установка / Распаковка завершена. В зависимости от установки или распаковки. Скрытый текст
И ещё, можно чтобы файл в окне "Информация" InfoBeforeRu.rtf некликабельным был и выделить там текст нельзя было. Только прокручивать. |
Цитата:
Я, конечно, не профессор в этом деле, но, если мне не изменяет память, то нет в Inno Setup такой функции... |
Vanadiy777, в Inno Setup может и нет. Но у репакеров такое есть. Не выделяется текст.
Если там конечно ссылка какая на сайт, чтобы кликнуть, то лучше чтобы кликабельность была. А если нет, достаточно для чтения прокутки одной и чтобы этот "слеш", как его там, не моргал перед передней буквой. |
ZVSRus, вот ещё что хотелось бы. Забыл попросить про выбор папки установки как у NSIS.
И вот кнопку с информацией о программе. |
|
ZVSRus, сказать Спасибо, ничего не сказать. В общем, всё как надо.
Есть ещё кое что подправить: Я запустил батник с тихой установкой, а там окно всплыло Установка завершена. Получается не тихая установка. |
ZVSRus,
для меня вообще идеальный вариант. Огромная просьба - пожалуйста, скиньте в личку весь скрипт. Заранее - Огромное СПАСИБО!!! Цитата:
уж косметику-то сами допилите... Или Вам прямо "под ключ" надо? :) |
Vanadiy777, да я просто скрипт не видел. С виду всё и так отлично! Только вот с тихими ключами окно всплывает о завершении установки.
Да по мелочи туда сюда подвинуть переставить, кое что убавить я уж думаю сам смогу. Так, сказал на всякий случай. Может Вас попрошу, если не получится) |
Цитата:
когда скрип будет, то в код, перед окном сообщения, можно будет добавить "if not WizardSilent then"... Тогда, при тихой установке, окно появляться не будет. Цитата:
|
Цитата:
Вы такое окно захотели. Вывод: или ключи тихой установки в топку, или финишное окно без всяких наворотов, информация и кнопка OK. Цитата:
(догадываюсь у кого) запустите его установщик, кликнете лкм на экране (не на установщике) а потом кликнете на значок установщика в панели задач, и вы увидете что и у него мигает. Цитата:
А длинный путь укоротите перемещением готового установщика, ну скажем в корень диска D:, или в скрипте константу {src} замените на {sd} или {userdesktop} и будет короткий путь, но тут как говориться, о вкусах не спорят. Цитата:
на этапе ssDone |
Цитата:
|
ZVSRus, Здравствуйте! Получается из-за редакций нельзя по тихому поставить с окном завершения. Тогда уж тихую установку оставьте.
|
ZVSRus,
Не могли бы Вы мне дать скрипт именно в таком виде как сейчас? Спасибо заранее! |
Цитата:
|
Цитата:
а с чего, вдруг, у Вас возникло такое предположение? В оригинальных установщиках тоже в названии папки редакция прописывается. Вполне вероятно, что сделано это для того, чтобы было можно поставить несколько редакций одновременно. |
Vanadiy777, да я как-то и не думал, чтобы в обычной установке саму папку с выбранной редакцией называть. Если только при распаковке.
В оригинале, один установщик - одна редакция, а тут все в одном. Да и не предполагал сразу несколько редакций ставить. |
Setup Final Господа, я конечно извиняюсь, ничего личного, вы для чего в данной теме находитесь?. Что-бы кто-то чем-то помог, или ласкать друг друга в виде лайков за посты не о чём. Вы своим флудом всю тему засрали!. Многие тему по InnoSetup на данном форуме стали стороной обходить. Страница 97 4 поста не о чём, но свои лайки крендель получил. Администратор от вас уже начал кнопку прятать. PS: Если в моих постах информация для вас не несёт ничего позновательного, ставить лайк мне не нужно, меня даже и это раздражает! |
ZVSRus, да всё отлично!
|
Цитата:
|
ZVSRus, а как там надпись на название и версию поправить. А то надпись сверху в "Установка - AIDA64 ХХХХ Business, и в "Распаковка - AIDA64 ХХХХ Business" также думаю должна.
|
В процедуре
procedure CurPageChanged(CurPageID: Integer); найди wpSelectDir: далее в if Portable.Checked and Extreme.Checked then if Portable.Checked and Business.Checked then if Portable.Checked and Engineer.Checked then if Portable.Checked and NetworkAudit.Checked then найди строки WizardForm.SelectDirLabel.Caption:= FmtMessage(ExpandConstant('Программа распакует {#MyAppNamePortable_4} в следующую папку.'), [ExpandConstant('{#SetupSetting("AppName")}')]); WizardForm.Caption:= FmtMessage(ExpandConstant('Распаковка — {#MyAppNamePortable_4}'), [ExpandConstant('{#SetupSetting("AppName")}')]); названия {#MyAppNamePortable_4} исправь на {#MyAppName_4}, в общем сотри слово {#MyAppNamePortable_4} везде, индекс 1, 2, 3, 4 не трогай. |
DA-Bro,
Для одной программы так пойдёт?. |
ZVSRus, Пойдёт.
В начале выбор языка не показывает Русский-Английский. Можно пожалуйста ещё добавить ярлык Закрепить в меню Пуск (это где все программы, а не ярлык где папки с программами). Можно пожалуйста ещё добавить ассоциации с файлами? Старые скрипты какие-то где-то видел, но пойдут ли они для новых систем - неизвестно. И ещё по кнопке О программе. Можно ли надпись сверху по центру сделать? |
Цитата:
Цитата:
У меня стоит Classic Start Menu и ярлыки у меня в меню пуск не крепятся. Цитата:
Цитата:
далее Caption:= 'Информация о RePack,е'; и двигаешь от передней кавычки слово Информация о RePack,е, тестируешь и смотришь. |
ZVSRus,
Помогите пожалуйста, если возможно... Компилятор Inno Setup 5.5.1.ee2 Ultra Unicode (это принципиально) Мне необходимо сделать так, чтобы программа запускалась только на Windows 10 и выше. В секции [Setup] прописываю директиву MinVersion=0.0,6.3 - не работает, MinVersion=0.0,10.0 - не работает... Понимает только MinVersion=0.0,6.2, но это же для Windows 8, а надо, чтобы работало начиная с Windows 10... Подскажите, как правильно сделать... Спасибо. |
Цитата:
Если можно, окно об удалении настроек программы. |
Цитата:
И что значит Понимает только MinVersion=0.0,6.2 На какой ОС работаете. Картинки
Почитай здесь. |
Цитата:
перечитал все с самого начала до последней части [часть 9] еще задолго до этого, ответа не нашел... Разговор о том, что инсталлятор, собранный в Inno Setup 5.5.1.ee2 Ultra Unicode, не понимает директиву выше чем MinVersion=0.0,6.2 на ОС выше Windows 8... Тот же скрипт, собранный в другом компиляторе, нормально отрабатывает. Операционная система Windows 10-11. Можно это как-то обойти? |
Vanadiy777,
Всё правильно, если верить справке что прикреплена к Inno Setup 5.5.1.ee2 Ultra Unicode MinVersion принимается до Win8 А в справке Inno Setup 5.6.1 сказано что MinVersion принимается по Win10. Ну да ладно, если я правильно понял вам нужно что-бы ваш установщик запускался начиная с Win10, а на версии что ниже Win10 установщик не запускался ну и выдавал какое либо сообщение. Если так тогда может вам не вокруг MinVersion танцевать, а прикрутить функцию проверки версии Windows. В Win 10 установщик будет запускаться, а что ниже 10 будет выдавать сообщение о не соответствии Windows. |
Цитата:
Да, это я уже понял... Только пока не знаю, какой вариант использовать. Можно попробовать взять из реестра значение CurrentVersion, у 10-ки оно 6.3, и если значение будет меньше, то сообщение о не соответствии и выход. Или заморочиться с процедурой GetWindowsVersionEx, потому, что функция GetWindowsVersion отрабатывает некорректно. Если у Вас есть какие-либо соображения, пните в нужном направлении, пожалуйста... |
Vanadiy777,
Тестируй
Код:
|
ZVSRus,
Нет, не работает пока... На всех ОС окошко выдает... Если править Result:= , то начинает запускаться на всех ОС. Не понимает она, видимо, Major больше заявленного в программе... Похоже, через реестр придется делать... |
Vanadiy777,
В Result ничего править не нужно. Поиграйся с циферками if IsWindowsVersionOrNewer(10, 0). |
Цитата:
Result не трогаю... Играюсь с циферками в if IsWindowsVersionOrNewer... Смотри, что получается: Если ставлю if IsWindowsVersionOrNewer(6, 2), то нормально запускается на 10-11, но и на 8-ке тоже запускается (чего совсем не хотелось бы...). На 7-ке, как и должно быть, выдает окно о несоответствии. Если ставлю if IsWindowsVersionOrNewer(6, 3), то сразу окно о несоответствии на всех системах... Похоже, что в этом компиляторе, процедура GetWindowsVersionEx так же не понимает новые Major, Minor, так же как и директива MinVersion... Осталось только попробовать костыль с реестром, через CurrentVersion... Очень не хочется собирать в другом компиляторе, т.к. придется пожертвовать некоторыми элементами интерфейса. |
Цитата:
И это можно легко исправить самому через изменение манифеста: 1. Открыть Setup.e32 и SetupLdr.e32 в Resource Hacker 2. Открыть Manifest там в конце xml-манифеста будет секция Код:
<application> Код:
<application> 3. Сохранить изменённый файл Код для тестирования
Код:
procedure TestWindowsVersion(); |
iglezz,
Просто - СУПЕР!!! Теперь работает все. Спасибище Вам огромаднейшее!!! :Beer: :beer2: |
Цитата:
PS: Вы делаете закосы под других репакеров, а они не будут возмущаться?. |
ZVSRus, Здравствуйте! Да нет никаких закосов. Я смотрю функциональность, которая мне нужна. Тем более у каждого скрипт индивидуален. И в Вашем исполении он уже заметно отличается. Тем более я его ещё в процессе буду изменять под свои предпочтения.
Цитата:
|
Цитата:
Получается, что это вы тему-то засрали, превратив ее в личный чат... На протяжении шести страниц вы ведете какой-то междусобойчик, кидаясь отдельными фразами и готовыми ехе, а в теме выхлопа - ноль, не смотря на многочисленные просьбы... Остальным, видимо, в личке обмениваетесь... Как-то не по пионерски получается... Вы не находите? Поэтому многие и обходят эту тему стороной... Цитата:
Так не могу я людям запретить ставить лайк под моим сообщением, если оно понравилось, даже если оно не несет смысловой нагрузки. Это право каждого... А "хотелки" у DA-Bro не закончатся, видимо, никогда... :lol: Извините, коллеги, ничего личного... |
Здравствуйте! Подскажите пожалуйста, как в этих двух строчках русские буквы правильно заменить на "CustomMessage":
Код:
Caption:= FmtMessage(ExpandConstant('Установка - {#AppName}'), [ExpandConstant('{#SetupSetting("AppName")}')]); CustomMessage('Установка') CustomMessage('Программа установит') CustomMessage('в следующую папку.') CustomMessage('Программа установит {#AppName} в следующую папку.') |
[CustomMessages]
RU.text1=Установка — %1 EN.text1=Setup — %1 RU.text2=Программа установит %1 в следующую папку. EN.text2=The program will install %1 in the following folder. Caption:= FmtMessage(ExpandConstant('{cm:text1}'), [ExpandConstant('{#SetupSetting("AppName")}')]); Caption:= FmtMessage(ExpandConstant('{cm:text2}'), [ExpandConstant('{#SetupSetting("AppName")}')]); |
Всем привет!
Читаю-читаю-читаю......никак не могу понять. Можно ли увеличить максимальный объём тома? Сейчас 2 Гб. Или может есть другая программа для создания Repack-ов игр, в которой нет ограничения на размер тома? Спасибо заранее за ответ! |
Здравствуйте!
Подскажите, пожалуйста, код как можно реализовать случайное копирование определенного файла, при каждом новом запуске инсталлятора, Условно говоря у меня есть файл 1.txt, таких файлов будет 10-20-30. Можно ли сделать так, чтобы при каждом новом запуске-установке чтобы копировался один из этих файлов в папку установки, вне зависимости ни от чего. Просто новая установка - копирование нового файла. Или же запись в этот файл определенного значения из списка который я укажу. Суть - нужно просто чтобы информация в файле при каждой новой установке менялась или случайно или, пускай даже подряд. Первая установка - первое значение (файл), вторая установка - второй файл (значение). Это вообще реально сделать? Никаких задач (компонентов) для выбора пользователю не нужно, а то так бы да, я бы мог предложить пользователю выбрать один их этих файлов. )) Нет, так не надо! Надо чтобы совершенно без участия пользователя, чтобы копировался один и тот же файл в папку установки, но с разным значением или один любой из 10-20-30 файлов, которые я положу отдельно, но имя у них при копировании в папку установки должно быть одно и тоже, т.е. у меня будет 1-2-3-4-5-6-7... txt, где-то лежать до компиляции, а в конечном итоге в папке назначения (установки) должен скопироваться любой из этих файлов, но получить название 1.txt Помогите, пожалуйста! Желательно для Юникод версии Inno Setup! |
Цитата:
Код:
[Files] |
Может кому пригодится. Добавление своих строк в файл hosts и удаление их при деинсталляции
Код:
procedure AddLineToFile(FileName, Line: String); |
Вложений: 1
Подскажите, что нужно сделать, что бы после установки корректно отображалась иконка приложения в установке и удалении программ в Windows? Сейчас это выглядит вот так:
|
mrAndy,
Можно так: Код:
[Setup] |
Господа. Спасайте .... вообще 0 во всём этом.
В общем, хочу написать функцию, которая проверяет версию dotNet SDK. Параметр Version находится в реестре по пути \HKEY_LOCAL_MACHINE\SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedhost Всё, что удалось сделать, это проверить, что путь \HKEY_LOCAL_MACHINE\SOFTWARE\dotnet\Setup\InstalledVersions\x64\ существует, как таковой [code] Код:
function IsDotNetSDKInstalled: Boolean; |
Цитата:
Код:
function IsDotNetSDKInstalled: Boolean; |
Приветствую. Хотелось бы выводить на последнем экране время, затраченное на установку. Но что-то не могу найти готового решения. Как это можно сделать, хотя бы в общих чертах?
|
Цитата:
|
Подскажите пож. возможно ли в секции [Tasks] добавить CheckBox для перехода по веб ссылке ?
|
Цитата:
|
Цитата:
Может так
Код:
[Setup] |
Цитата:
|
Цитата:
Filename: http://forum.oszone.net/post-3024679-1051.html; Tasks: WebSite; Flags: shellexec; У меня в расширенной версии ссылка открывается сразу, то есть не ждет когда закроется установщик на финишной странице (флаги чтобы подождал завершения работы не работают). Или отключайте финишную страницу, или поиграйтесь с флагами. |
Здравствуйте. Подскажите как сделать bin файлы, но так чтобы в первом была запакована одна папка, а во втором другая. И в установщике, перед тем как выбрать директорию предлагалось, что именно распаковать.
|
Подскажите как изменить размеры формы выбора языка в стандартной версии Inno Setup (не расширенной) ? Или как создать кастомную форму выбора языка в стандартной версии Inno Setup ?
|
Цитата:
Пример
Код:
PS: Поторопился чуток, в стандартной версии ни в 6 ни в 5 данная функция не принимается (ошибка на SelectLanguageForm). Пардон! |
Вложений: 1
Цитата:
|
Вложений: 1
Цитата:
Вот ещё один пример создания кастомной формы: Файл 169886 |
Помогите пожалуйста, если возможно. Пример кода:
Скрытый текст
[Files] Source: Program\*; DestDir: {app}; AfterInstall: BtnDisable(); Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension [Tasks] Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Name: DirectX; Description: Microsoft DirectX; GroupDescription: Дополнительное ПО; Flags: unchecked; Name: vcredist2019_x86; Description: Microsoft Visual С++ 2015-2019 Redistributable; GroupDescription: Дополнительное ПО; Flags: unchecked; Name: vcredist2019_x64; Description: Microsoft Visual С++ 2015-2019 Redistributable x64; GroupDescription: Дополнительное ПО; Flags: unchecked; Check: IsWin64; [Run] Filename: {src}\Redistributable\DirectX\DXSETUP.exe; Parameters: /silent; Tasks: DirectX; StatusMsg: DirectX; Filename: {src}\Redistributable\MVC++2019\VC_redist.x86.exe; Tasks: vcredist2019_x86; Parameters: /q; StatusMsg: Microsoft Visual С++ 2015-2019 Redistributable; Filename: {src}\Redistributable\MVC++2019\VC_redist.x64.exe; Tasks: vcredist2019_x64; Parameters: /q; StatusMsg: Microsoft Visual С++ 2015-2019 Redistributable x64; [_code] var Button: TButton; procedure InitializeWizard(); begin Button:= TButton.Create(WizardForm); Button.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23)); Button.Caption:= 'XXX'; Button.Parent:= WizardForm; end; procedure BtnDisable(); begin Button.Enabled := False; end; В данном примере созданная кастомная кнопка отключается на странице InstallingPage перед началом распаковки файлов. Необходимо её отключить после распаковки файлов но перед установкой дополнительного ПО как это происходи с кнопкой Отмена. Для ISDone у меня пример есть но он не подходит если упаковка средствами Inno Setup. |
Вопрос к El Sanchez
В посте что выше вы реализовали доступ к SelectLanguageForm в стандартной версии Inno, так может у вас получится реализовать доступ к стандартному окну, что вызывается кнопкой Обзор на странице SelectDirPage, как я понимаю даже в расширенной версии к данному окну доступ закрыт. Интересует не кастомная форма, а хотелось бы знать как там правильно называется Edit и FolderTreeView. Очень нужно для реализации непосредственно на странице SelectDirPage. |
Добрый вечер.
Форум живой? Интересует какая-то активность по Inno Setup. Есть много вопросов, по поисковику многое не нашёл... Но для начала, проинформирую, что в 2к24 данная ссылка на сообщение уже не актуальна, потому что зеркала и прочее уже слишком сильно, к сожалению, устарело. Речь об: "Скрипты инсталляторов для игр - скрипты инсталляторов для игр, (ссылка на сообщение);" Если вдруг у кого остались наработки, меня заинтересовал "Корона скин", тот, который первый. Если нету... то мне бы хоть что-нибудь посмотреть. |
Цитата:
|
Цитата:
Но сейчас лучше использовать новую, современную библиотеку - FMXInno. Она предоставляет намного больше возможностей по кастомизации игровых инсталляторов. На этом же ресурсе вы найдете множество примеров с её использованием (один из них). P.S. Не сочтите за рекламу. |
Цитата:
Открыв редактором ресурсов Setup.e32 на вкладке TSELECTFOLDERFORM видим object PathEdit: TEdit, подставляю данное имя PathEdit в строку получаю ошибку неизвестный идентификатор, сразу возникает вопрос, или доступа к данному окну нет, или неправильное имя, по этому и спросил как имена этих классов. Но суть вопроса заключалось не в этом. Создал диалоговое окно непосредственно на SelectDirPage, все пути выставляются правильно, все работает, но есть одно НО, заходим через кнопку Обзор, все пути установки по умолчанию правильные и в Edit и в DirTreeView C:\Program Files (x86)\My Application, выбираем путь в корень диска C: жмем ОК, при повторном заходе также пути верны C:\My Application но почему то директория C:\Program Files (x86) не сворачивается как в кастомных формах, В чем причина не пойму, или сделано на самой странице или в чем то другом, вот и спросил об стандартном окне. PS: В Оригинальном установщике R.G. Catalyst 2022-11-16 Ссылка также реализовано на странице SelectDirPage (на панелях) там установка в корень диска D:. меняешь путь в корень диска C:, пака на диске C: появляется но диск D: не сворачивается. Хотя это и не ошибка и не критично, но всё же хотелось отшлифовать до конца. Скрипт скинул в личку. |
Цитата:
Цитата:
К сожалению, скачать эти вещи я не могу - мне пишет, что недостаточно прав. Возможно ли как-то обойти эту проблему?.. ___ На самом деле, вопросов у меня очень много. Мы с командой доделываем масштабный проект, в определённых кругах. И как-то надоели классические скучные инсталляторы. Поэтому, взялись за поиски всяких фич. Начать можно с текущей проблемы... замены курсора. Да, я прошерстил, наверное, весь форум. Видел несколько штук проектов, как это можно сделать. К сожалению, ни один не подошёл под мои "запросики". Нужно чтобы кастомный (пользовательский) курсор менялся только в инсталляторе, ни на что больше не влияя. Причём, нужен именно .cur На данный момент я достиг того, что смог прикрепить кастомный курсор, при наведении на кнопки "далее". Также я смог реализовать кастомный курсор для "всего", то есть, работает и в инсталляторе, и вне его. А это неприемлемо. Почему мне не один из вариантов не подошёл? Ну, во-первых, я нуб в программировании. Во-вторых, сложилось впечатление, что в моём новом inno setup 6.0 не хватает каких-то функций. Пошёл искать "улучшенную версию Inno ISCmplr Setup 5.4.1 build 110214", но тоже, либо не могу скачать, либо на форумах не осталось следов. Каждый раз когда какой-то из старых кодов беру, то какая-то "мелочь" мешает. Компилятор выдаёт ошибку, не видит идентификаторов и т.д. (а переписал/украл я код достаточно хорошо)))) Чтобы не быть голословным, скину код и проблемные строки. Наиболее "перспективным" (вроде как) считаю первый код: Код:
#define A = (Defined UNICODE) ? "W" : "A" Код:
#ifdef UNICODE И вот ещё: Код:
[Setup] Тут у меня есть и .cur и .ani , на самом деле, не сильно важно (предпочтительнее .cur). ________________ В общем, господа-товарищи, если есть современное решение проблемы (потому что я читал ответы аж с 2009 по 2015 гг), то будем с командой очень вам благодарны. |
Цитата:
Она полностью адаптирована под современные системы и современный Inno Setup. Активно развивается и поддерживается. Озвученные вами проблемы в сценариях (RawDataResource, TResourceStream, Screen.Cursors) касаются только китайской неофициальной Inno Setup v5.5, развитие которой прекратилось в 2012 году. Никакими другими версиями Inno Setup прямо из "коробки" эти фишки не поддерживаются. Сейчас вам нужен курсор, потом что-то другое, потом третье. А все вместе это потянет за собой множество сторонних библиотек (botva, isdone и т.д. и т.п.), которые уже давно не развиваются. Добавьте к этому проблемы совместимости с современными операционными системами. Разбираться и помогать вам с устаревшими и потерявшими свою актуальность библиотеками и решениями уже вряд ли кто-то будет, разве что вы сделаете это самостоятельно. Но самое грустное в этой истории будет то, что вы потеряете время и ваш проект не будет нормально работать в разрешении 2K/4K на современных системах. Лучше уделите свое время на изучение всех особенностей одной единственной библиотека FMXInno. Поверьте, она с лихвой позволит реализовать любые ваши фантазии и фишки. Библиотека поставляется с множеством примеров различных аспектов оформления программ установок. Также на форуме представлены готовые решения под конкретные игры. Библиотека очень сложная и многосторонняя, поэтому просто не будет. Но если у вас команда, то справитесь. P.S. На krinkels, чтобы что-то скачать, изучите правила, они не сложные. На fileforums есть возможность скачивания после регистрации. |
Вложений: 1
Цитата:
|
Здравствуйте уважаемые форумчане!
Есть стандартное окно с выбором языков установки. При нажатии на Отмена или крестик выбивает ошибку: "Runtime Error (at 105:118) Could not call proc". Не критично, но напрягает. Кто-нибудь с таким сталкивался? И как это исправить? Скрипт
[Setup] SourceDir=. OutputDir=Setup AppName=Spyro the Dragon AppVersion=2.0 AppPublisher=EmuGames AppCopyright=by Ma2012ks © AppPublisherURL=www.emugames.do.am AppSupportURL=www.emugames.do.am AppUpdatesURL=www.emugames.do.am DefaultDirName={pf}\Insomniac Games\Spyro the Dragon™ DefaultGroupName=Insomniac Games\Spyro the Dragon™ AllowNoIcons=yes InfoBeforeFile=C:\Users\Maks\Desktop\InstalledImages\System requirements.txt InfoAfterFile=C:\Users\Maks\Desktop\InstalledImages\Thank you for the installation of the game.txt OutputBaseFilename=setup WizardImageFile=C:\Users\Maks\Desktop\InstalledImages\LeftImage.bmp WizardSmallImageFile=C:\Users\Maks\Desktop\InstalledImages\Icon-Up.bmp SetupIconFile=C:\Users\Maks\Desktop\InstalledImages\Icon.ico WindowVisible=no WindowShowCaption=no WindowResizable=no Compression=none DiskSpanning=yes DiskSliceSize=2100000000 SlicesPerDisk=1 RestartIfNeededByRun=no PrivilegesRequired=none ShowUndisplayableLanguages=yes [Languages] Name: english; MessagesFile: compiler:Languages\English.isl Name: french; MessagesFile: compiler:Languages\French.isl Name: german; MessagesFile: compiler:Languages\German.isl Name: spanish; MessagesFile: compiler:Languages\Spanish.isl Name: italian; MessagesFile: compiler:Languages\Italian.isl Name: russian; MessagesFile: compiler:Languages\Russian.isl [Messages] SelectLanguageTitle=Spyro the Dragon SelectLanguageLabel=Please select installation language. Âûáåðèòå ÿçûê óñòàíîâêè. [LangOptions] english.LanguageName=English french.LanguageName=French german.LanguageName=German spanish.LanguageName=Spanish italian.LanguageName=Italian russian.LanguageName=Russian [Types] Name: full; Description: Ïîëíàÿ óñòàíîâêà Name: custom; Description: Âûáîðî÷íàÿ óñòàíîâêà; Flags: iscustom [Tasks] Name: desktopicon; Description: Ñîçäàòü ÿðëûê íà ðàáî÷åì ñòîëå; GroupDescription: ßðëûêè: Name: pin; Description: Çàêðåïèòü ÿðëûê íà ïàíåëè çàäà÷; GroupDescription: ßðëûêè:; Flags: unchecked Name: DirectX; Description: Îáíîâèòü DirectX; GroupDescription: Äîïîëíèòåëüíîå ÏÎ:; Flags: checkablealone Name: Redist; Description: Óñòàíîâèòü Visual C++ 2010; GroupDescription: Äîïîëíèòåëüíîå ÏÎ:; Flags: checkablealone [Files] Source: ISSkin.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: steam.cjstyles; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\0.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\1.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\2.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\3.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\4.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\5.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\6.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\7.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\8.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\9.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\10.bmp; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\Miniature.gif; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: isgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: bass.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: innocallback.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\Music-1.mp3; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: C:\Users\Maks\Desktop\InstalledImages\Music-2.mp3; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression Source: D:\Max\NightLection Team\CurrentProject\Spyro-1\Pakovano\ENG\*; DestDir: {app}; Check: PortableCheck; AfterInstall: ExtLog(); Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension Source: D:\Max\NightLection Team\CurrentProject\Spyro-1\Pakovano\Vector\NEW\*; DestDir: {app}; Check: InstallerCheck; AfterInstall: ExtLog(); Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension [Icons] Name: "{group}\Spyro the Dragon"; Filename: "{app}\Spyro the Dragon.exe"; WorkingDir: "{app}"; Name: "{userdesktop}\Spyro the Dragon"; Filename: "{app}\Spyro the Dragon.exe"; WorkingDir: "{app}"; Tasks: desktopicon; Name: "{group}\Spyro the Dragon (Vector)"; Filename: "{app}\Spyro the Dragon (Vector).exe"; WorkingDir: "{app}"; Name: "{userdesktop}\Spyro the Dragon (Vector)"; Filename: "{app}\Spyro the Dragon (Vector).exe"; WorkingDir: "{app}"; Tasks: desktopicon; Name: "{group}\Spyro the Dragon-Options"; Filename: "{app}\Spyro the Dragon-Options.exe"; WorkingDir: "{app}"; Name: "{userdesktop}\Spyro the Dragon-Options"; Filename: "{app}\Spyro the Dragon-Options.exe"; WorkingDir: "{app}"; Tasks: desktopicon; Name: "{group}\{cm:UninstallProgram,Spyro the Dragon}"; Filename: "{uninstallexe}" [Run] Description: "{cm:LaunchProgram, Spyro the Dragon}"; Filename: "{app}\Spyro the Dragon.exe"; WorkingDir: "{app}"; Flags: nowait postinstall skipifsilent unchecked Description: "{cm:LaunchProgram, Spyro the Dragon-Options}"; Filename: "{app}\Spyro the Dragon-Options.exe"; WorkingDir: "{app}"; Flags: nowait postinstall skipifsilent unchecked [UninstallDelete] Type: filesandordirs; Name: {app} Type: filesandordirs; Name: "{localappdata}\Thinstall\Spyro™ the Dragon;" [code] var ComponentPage : TWizardPage; InstallGroupBox : TNewGroupBox; Installer : TNewRadioButton; Portable : TNewRadioButton; function InstallerCheck: Boolean; begin Result := Installer.Checked; end; function PortableCheck: Boolean; begin Result := Portable.Checked; end; var ProgressLabel: TLabel; procedure ExtLog(); begin SaveStringToFile(ExpandConstant('{tmp}\setup.log'), #13#10 + GetDateTimeString('dd/mm/yyyy hh:nn:ss', '-', ':') + ' - ' + ExpandConstant(CurrentFileName), True); with WizardForm.ProgressGauge do ProgressLabel.Caption:= IntToStr((Position-Min)/((Max - Min)/100)) + '%'; end; const AW_BLEND = $00080000; AW_HIDE = $00010000; function AnimateWindow(hWnd: HWND; dwTime: DWORD; dwFlags: DWORD): Boolean; external 'AnimateWindow@user32 stdcall'; function NextButtonClick(CurPageID: Integer): Boolean; begin Result := True; if CurPageID=wpFinished then begin if WizardForm.RunList.Checked[0] then Result := True; end; end; procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean); begin if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_OKCANCEL) = IDOK then begin Confirm := False; AnimateWindow(WizardForm.Handle, 2500, AW_BLEND or AW_HIDE); Cancel := True; end else Cancel := False; end; const LOAD_LIBRARY_AS_DATAFILE = $2; #define A = (Defined UNICODE) ? "W" : "A" function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall'; function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall'; function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall'; function PinToTaskbar(const szFilename: String; IsPin: Boolean): Boolean; var hInst: THandle; buf: array [0..255] of Char; i, res: Integer; strLnk, strVerb: String; objShell, colVerbs: Variant; begin Result := False; if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit; { below Windows 7 } { String resources } if IsPin then begin if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then begin while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1); if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit; end; res := 5386; { Pin to Tas&kbar } end else res := 5387; { Unpin from Tas&kbar } { Load string resource } hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE); if hInst <> 0 then try for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1); try objShell := CreateOleObject('Shell.Application'); colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs; for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then begin colVerbs.Item[i].DoIt; Result := True; Break; end; except Exit; end; finally FreeDLL(hInst); end; end; type HSTREAM=DWORD; TTimerProc=procedure(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD); const Indent=25; var MP3List:TStringList; CurrentMP3:integer; hMP3:HWND; TimerID:LongWord; function AppendMenu(hMenu: HMENU; uFlags, uIDNewItem: UINT; lpNewItem: PChar): BOOL; external 'AppendMenuA@user32.dll stdcall'; function GetSystemMenu(hWnd: HWND; bRevert: BOOL): HMENU; external 'GetSystemMenu@user32.dll stdcall'; function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload'; function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boo lean; external 'ssInitialize@files:isgsg.dll stdcall delayload'; procedure ShowMP3Panel(hMainFrm:HWND;StartVolume:integer;DefMP3Dir,BASSDir,MLabel:PChar;IsShowMP3Info,IsBkgFrm Visible:boolean;ShowTimeMP3Info:integer;dBottom:integer);external 'ShowMP3Panel@files:isgsg.dll stdcall'; procedure KillMP3Panel;external 'KillMP3Panel@files:isgsg.dll stdcall'; procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload'; procedure ssSetBkgImage(FileName:PChar); external 'ssSetBkgImage@files:isgsg.dll stdcall delayload'; procedure ssAddImage(FileName:PChar); external 'ssAddImage@files:isgsg.dll stdcall delayload'; procedure ssStartShow; external 'ssStartShow@files:isgsg.dll stdcall delayload'; procedure ssStopShow; external 'ssStopShow@files:isgsg.dll stdcall delayload'; procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload'; function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload'; function SetTimer(hWnd:HWND;nIDEvent,uElapse:UINT;lpTimerFunc:LongWord{TFNTimerProc}):UINT; external 'SetTimer@user32.dll stdcall delayload'; function KillTimer(hWnd:HWND;uIDEvent:UINT):BOOL; external 'KillTimer@user32.dll stdcall delayload'; function BASS_ChannelIsActive(Handle:HWND):DWORD; external 'BASS_ChannelIsActive@files:bass.dll stdcall'; function BASS_SetConfig(Option,Value:DWORD):DWORD; external 'BASS_SetConfig@files:bass.dll stdcall'; function BASS_Init(Device:integer;Freq,Flags:DWORD;Win:HWND;CLSID:integer):boolean; external 'BASS_Init@files:bass.dll stdcall delayload'; function BASS_StreamCreateFile(Mem:BOOL;f:PChar;Offset:DWORD;Length:DWORD;Flags:DWORD):HSTREAM; external 'BASS_StreamCreateFile@files:bass.dll stdcall'; function BASS_StreamFree(Handle:HWND):boolean; external 'BASS_StreamFree@files:bass.dll stdcall'; function BASS_ChannelPlay(Handle:HWND;Restart:boolean):boolean; external 'BASS_ChannelPlay@files:bass.dll stdcall'; function BASS_Start: Boolean; external 'BASS_Start@files:bass.dll stdcall'; function BASS_Stop: Boolean; external 'BASS_Stop@files:bass.dll stdcall'; function BASS_Free: Boolean; external 'BASS_Free@files:bass.dll stdcall delayload'; function WrapTimerProc(CallBack:TTimerProc;ParamCount:integer):LongWord; external 'wrapcallback@files:innocallback.dll stdcall'; procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall'; procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall'; function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall'; procedure TimerTick(uTimerID,uMessage:UINT;dwUser,dw1,dw2:DWORD); begin if BASS_ChannelIsActive(hMP3)=0 then begin BASS_Stop; BASS_StreamFree(hMP3); hMP3:=BASS_StreamCreateFile(False,PChar(MP3List.Strings[CurrentMP3]),0,0,0); BASS_Start; if hMP3<>0 then if BASS_ChannelPlay(hMP3,True) then begin CurrentMP3:=CurrentMP3+1; if CurrentMP3>MP3List.Count-1 then CurrentMP3:=0; end; end; end; procedure RunListClickCheck(Sender: TObject); var i:integer; begin if WizardForm.RunList.Checked[WizardForm.RunList.ItemIndex] then begin for i:=0 to WizardForm.RunList.Items.Count-1 do WizardForm.RunList.Checked[i]:=False; WizardForm.RunList.Checked[WizardForm.RunList.ItemIndex]:=True; end; end; function InitializeSetup:boolean; begin ExtractTemporaryFile('Music-1.mp3'); ExtractTemporaryFile('Music-2.mp3'); MP3List:=TStringList.Create; CurrentMP3:=0; ExtractTemporaryFile('steam.cjstyles'); LoadSkin(ExpandConstant('{tmp}')+'\steam.cjstyles', ''); Result:=True; end; procedure InitializeWizard; begin if not AppendMenu(GetSystemMenu(Wizardform.Handle, True), 200, 0, SetupMessage(msgAboutSetupMenuItem)) then WizardForm.Position:= poScreenCenter; begin ComponentPage := CreateCustomPage(wpInfoBefore, 'Please select game language (Rus/Multi)', 'Âûáåðèòå ÿçûê èãðû...'); { InstallGroupBox } InstallGroupBox := TNewGroupBox.Create(WizardForm); with InstallGroupBox do begin Parent := ComponentPage.Surface; SetBounds(ScaleX(0),ScaleY(0),ScaleX(240),ScaleY(70)); Caption := 'Ëîêàëèçàöèÿ / Game language:'; end; { Installer } Installer := TNewRadioButton.Create(WizardForm); with Installer do begin Parent := ComponentPage.Surface; SetBounds(ScaleX(9),ScaleY(43),ScaleX(145),ScaleY(17)); Caption := 'Ðóññêàÿ âåðñèÿ / Russian'; Checked := True; end; { Portable } Portable := TNewRadioButton.Create(WizardForm); with Portable do begin Parent := ComponentPage.Surface; SetBounds(ScaleX(9),ScaleY(19),ScaleX(230),ScaleY(17)); Caption := 'English / French / German / Spanish / Italian'; end; begin ProgressLabel := TLabel.Create(WizardForm); with WizardForm.ProgressGauge do begin ProgressLabel.Top := Top + Height + ScaleY(8); ProgressLabel.Left:= Left + Width/2 - ScaleX(8); ProgressLabel.Caption := '0%'; ProgressLabel.AutoSize := True; ProgressLabel.Parent := WizardForm.InstallingPage; end; WizardForm.RunList.OnClickCheck:=@RunListClickCheck; ExtractTemporaryFile('Miniature.gif'); ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Miniature.gif',7000,5000,4000,0,255,Fal se,$FFFFFF,10); ShowMP3Panel(WizardForm.Handle,80,ExpandConstant('{tmp}'),ExpandConstant('{tmp}'),'- Volume +',False,True,0,Indent); TimerID:=SetTimer(0,0,500,WrapTimerProc(@TimerTick,5)); BASS_Init(-1,44100,0,0,0); BASS_SetConfig(5,100); BASS_SetConfig(6,100); ssInitialize(GetWindowLong(MainForm.Handle,-8),18,True,1,$FF000000); ExtractTemporaryFile('0.bmp'); ssSetBkgImage(ExpandConstant('{tmp}')+'\0.bmp'); WizardForm.TypesCombo.ItemIndex:=0; WizardForm.BeveledLabel.Enabled:=True; end; end; end; procedure CurStepChanged(CurStep: TSetupStep); begin if CurStep=ssInstall then begin ExtractTemporaryFile('1.bmp'); ssAddImage(ExpandConstant('{tmp}')+'\1.bmp'); ExtractTemporaryFile('2.bmp'); ssAddImage(ExpandConstant('{tmp}')+'\2.bmp'); ExtractTemporaryFile('3.bmp'); ssAddImage(ExpandConstant('{tmp}')+'\3.bmp'); ExtractTemporaryFile('4.bmp'); ssAddImage(ExpandConstant('{tmp}')+'\4.bmp'); ExtractTemporaryFile('5.bmp'); ssAddImage(ExpandConstant('{tmp}')+'\5.bmp'); ExtractTemporaryFile('6.bmp'); ssAddImage(ExpandConstant('{tmp}')+'\6.bmp'); ExtractTemporaryFile('7.bmp'); ssAddImage(ExpandConstant('{tmp}')+'\7.bmp'); ExtractTemporaryFile('8.bmp'); ssAddImage(ExpandConstant('{tmp}')+'\8.bmp'); ExtractTemporaryFile('9.bmp'); ssAddImage(ExpandConstant('{tmp}')+'\9.bmp'); ExtractTemporaryFile('10.bmp'); ssAddImage(ExpandConstant('{tmp}')+'\10.bmp'); ssStartShow; end; if CurStep=ssPostInstall then ssStopShow; end; procedure CurPageChanged(CurPageID: Integer); begin WizardForm.TypesCombo.Hide; begin case CurPageID of wpFinished: end if IsTaskSelected('Pin') then PinToTaskbar(ExpandConstant('{app}\Spyro the Dragon-Options.exe'), True); if CurPageID=wpInstalling then begin WizardForm.MainPanel.Visible:=False; WizardForm.Bevel1.Visible:=False; WizardForm.Width:=ScaleX(395); WizardForm.Height:=ScaleY(142); WizardForm.Left:=ScaleX(GetSystemMetrics(0)-WizardForm.Width-Indent); WizardForm.Top:=ScaleY(GetSystemMetrics(1)-WizardForm.Height-Indent); WizardForm.InnerNotebook.Left:=ScaleX(10); WizardForm.InnerNotebook.Top:=ScaleY(10); WizardForm.InnerNotebook.Width:=ScaleX(370); WizardForm.StatusLabel.Left:=ScaleX(0); WizardForm.StatusLabel.Top:=ScaleY(0); WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width; WizardForm.FileNameLabel.Left:=ScaleX(0); WizardForm.FileNameLabel.Top:=ScaleY(20); WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width; WizardForm.ProgressGauge.Top:=ScaleY(40); WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width; WizardForm.CancelButton.Left:=ScaleX(154); WizardForm.CancelButton.Top:=ScaleY(80); end; if (CurPageID=wpFinished) or (CurPageID=wpInfoAfter) then begin WizardForm.RunList.Checked[0]:=True; if WizardForm.Width<>502 then begin WizardForm.Visible:=False; WizardForm.Width:=ScaleX(502); WizardForm.Height:=ScaleY(392); WizardForm.Left:=(GetSystemMetrics(0)-WizardForm.Width) div 2; WizardForm.Top:=(GetSystemMetrics(1)-WizardForm.Height) div 2; WizardForm.MainPanel.Visible:=True; WizardForm.Bevel1.Visible:=True; WizardForm.InnerNotebook.Left:=ScaleX(40); WizardForm.InnerNotebook.Top:=ScaleY(72); WizardForm.InnerNotebook.Width:=ScaleX(417); WizardForm.Visible:=True; end; end; end; end; procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); begin case CurUninstallStep of usUninstall: begin PinToTaskbar(ExpandConstant('{app}\Spyro the Dragon-Options.exe'), False); end; end; end; procedure DeinitializeSetup; begin KillMP3Panel; KillTimer(0,TimerID); BASS_Stop; BASS_Free; MP3List.Free; ShowWindow(WizardForm.Handle,0); UnloadSkin(); ssDeInitialize; end; function IsRegularUser(): Boolean; begin Result := not (IsAdminLoggedOn or IsPowerUserLoggedOn) end; function GetDefRoot(Param: String): String; begin if IsRegularUser then Result := ExpandConstant('{localappdata}') else Result := ExpandConstant('{pf}') end; |
Цитата:
В функции AnimateWindow передается хендл окна мастера установки (WizardForm.Handle), которое ещё не создано. Не используйте процедуру CancelButtonClick или упростите её до вида: Код:
{ Процедура обработки нажатия кнопки "Отмена" } |
Flix, спасибо но ошибка все равно вылазит... это не работает. :(
И до момента написания функции AnimateWindow эта ошибка уже была. |
Цитата:
Вставь в скрипте это: function InitializeLanguageDialog(): Boolean; begin // if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll'); with SelectLanguageForm do begin end; Result := True; end; закомментированная строка для образца, если также будет вылазить ошибка, пропиши все DLL. картинки и скины как в закомментированной строке. |
ZVSRus, спасибо - буду пытаться... хотя готов уже забить на это.
Сейчас при компиляции ошибка: Unknown identifier SelectLanguageForm ... |
function InitializeLanguageDialog(): Boolean;
begin // if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll'); // with SelectLanguageForm do begin // end; Result := True; end; |
Цитата:
|
OldGamer,
Это означает что вы работаете на стандартной (не расширенной версии InniSetup). В стандартной версии в 5 или 6 доступа к SelectLanguageForm нет. Вернитесь на страницу 106 данного форума, увидите код от El Sanchez что он написал для РОМКИ-1977, и получите доступ к кастомной форме выбора языка. Пропишете у себя в скрипте (лучше конечно прицепить модулем т.к. у вас скрипт большой и там тоже не маленький), и уже в нем прописываете то, из за чего выбивает ошибка. PS: На какой версии InnoSetup вы работаете?. Ранее ваш скрипт особо не разглядывал по той причине, что у вас много чего прикручено (картинки dll, скины) где их брать знаете только вы. Такие скрипты обычно выкладывают архивом. У вас сейчас разглядел в скрипте InstallGroupBox := TNewGroupBox.Create(WizardForm);. Этот компонент принимается только в расширенной версии 5.5.1. В других версиях на на этом компоненте будут ошибки (Неизвестный тип). Так что с этим скриптом на вашей версии InnoSetup печалька. |
Цитата:
Цитата:
Цитата:
|
El Sanchez , спасибо Большое! Это... РАБОТАЕТ! +1000 :good:
|
Добрый день. Прошу помощи. Имеется кастомная страница, которая создается через
Код:
Procedure InitializeWizard(); UPD: решил вот так Код:
function ShouldSkipPage(PageID: Integer): Boolean; |
Ребят, вот одну проблему не знаю как решить уже несколько дней, то ли баг это, то ли ещё что.
При создании скрипта через wizard, отмечаю "Разрешить пользователю отключить создание папки в меню пуск". В итоге этот выбор не предоставляется пользователю при установке. Помогите люди добрые) |
proffbik, Для этого нужно задействовать секцию [Icons].
|
Цитата:
Код:
[Icons] |
Цитата:
Должно быть AllowNoIcons=yes |
Цитата:
|
Приветствую, друзья!
Хочу сделать закрепление иконки на панели задач, испробовал все скрипты выложенные в интернете (От Эль Санчеза и т.п.). Ничего из этого не работает. Есть варианты сделать это? |
Вложений: 1
Цитата:
|
Ребята, всем привет. Такая проблема
создал батник, который запускаю вручную -- реестр успешно считывается если запускаю этот же батник через [run] секцию уже в созданном Inno Setup приложении, то исполняется весь код успешно, кроме чтения реестра Батник делает простое Смотрит в реестре путь к игре и если есть потом пишет его в файл. Писать в файл он может всё что угодно через Inno Setup (это проверено и работает) Короче вот 2 варианта кода чтения ресстра (которые, повторюсь, рабочие и работают если их запускать вручную, но не хотят если запускать из Inno Setup в любом виде) Код:
rem Получаем путь к установке Brawlhalla из реестра Код:
powershell -Command "& { $registryPath = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 291550'; $valueName = 'InstallLocation'; $installLocation = Get-ItemProperty -Path $registryPath -Name $valueName | Select-Object -ExpandProperty $valueName; $iconPath = Join-Path -Path $installLocation -ChildPath 'Brawlhalla.exe'; $appDataPath = [System.Environment]::GetFolderPath('ApplicationData'); $hubFilePath = 'Brawlhalla\hub.omx'; if (Test-Path $hubFilePath) { [xml]$xmlContent = Get-Content -Path $hubFilePath; $iconNode = $xmlContent.SelectSingleNode('//icon'); $iconNode.InnerText = $iconPath; $xmlContent.Save($hubFilePath); } }" Я также написал код, который проверяет наличие реестра самим Inno Setup установщиком, но мне этот вариант нужен на самый крайний случай. Ведь я хочу динамическое обновление приложения посредством загрузки данных, а не статичный установщик, который надо будет переобновлять с выходом новой версии. Пробовал запускать с правами админа, но в чём смысл если сам Inno Setup может читать, а батник нет, мне не подходит вариант даже если это заработает. Также знаю что в 64 версиях внутри Inno Setup нужно писать HKEY_LOCAL_MACHINE_64 я это пробовал и в батнике (думал вдруг связь есть) но нет, не помогает Кто справится с первого раза получит 1000₽ по номеру телефона. Кто не с первого 700₽ (под разом подразумевается выдача готового решения) Спасибо |
Цитата:
Чтобы такого не происходило, лучше в reg при запросе сразу указывать в какую ветку лезть параметрами /reg:32 или /reg:64, в таком случае разрядность reg не имеет значения. Код:
function GetSteamAppInstallLocation(const AAppID: Integer): string; |
Цитата:
И повторяю еще раз. Делая реестр через Inno setup будет означать что и данные приложения будут захардкожены в установщике. Т.е. отдельный установщик - отдельные проверки на реестр или если другими словами то новая версия приложения означает что мне надо новый установщик собирать. Моя задача была сделать Inno Setup установщик один а данные чтобы всегда скачивались вместе с батником, в котором уже будет прописана логика. И при апдейте приложения я и батник обновлю. Иными словами это будет один установщик и разные данные приложения, включая разное чтение реестра. Я еще раз повторяю мой батник успешно читает что угодно (путь текущий например) и успешно всё это пишет в нужный мне файл (когда запускается через inno setup), вот только считать данные с реестра он не может (зато может когда я запускаю его вручную из под винды). Код считывания с реестра батником я приложил Я ничего не пишу в реестр мне только надо считать с него и всё PS я проверю твое предположение про WOW6432Node и прочее если поможет -- отпишусь |
Подскажите.
Столкнулся с константой {commonfonts}. На строчку Код:
Source: "{commonfonts}\*.*"; DestDir: "{commonfonts}"; Если я напишу просто {fonts} Код:
Source: "{commonfonts}\*.*"; DestDir: "{fonts}"; Или это как то нужно по другому сделать. |
Цитата:
Цитата:
Константа появилась с версии 6.1.0 (читать). До этого она была {fonts}. Как правильно устанавливать шрифты - читать. |
Flix, ну да, пробовал в версии Inno Setup 6.0.5, там же в справке и смотрел.
Тут всё теперь понятно. Так в моём случае получается {commonfonts} и {fonts} одно и тоже? Или как. |
Цитата:
Если используете версию Inno ниже 6.1.0, то указываете {fonts}. Если выше 6.1.0 - то {commonfonts}, но с учетом 10 версии винды и выше, а также привилегий, могут быть варианты с {userfonts} и {autofonts}. Если не имеете понятия про версию винды и права пользователя, то рекомендуется использовать константу {autofonts}. |
Цитата:
я думал это редирект а оказалось это просто отдельный раздел для 64биток. Я также исследовал редиректы внутренние, но это не помогло. А также я выяснил что не может читать только с HKEY_LOCAL_MACHINE, а вот с HKEY_CURRENT_USER без проблем читает. Поэтому я решил пойти другим путем и определить путь игры через Steam. Вышло даже лучше чем я хотел - я определяю еще и диск (ведь игру можно в либе переместить на другой том) HTML код:
powershell -Command "$SteamPath=(Get-ItemProperty 'HKCU:\SOFTWARE\Valve\Steam').SteamPath.Replace('/', '\');$LibraryFoldersPath=Join-Path -Path $SteamPath -ChildPath 'steamapps\libraryfolders.vdf';$libraryContent=Get-Content $LibraryFoldersPath -Raw;if($libraryContent -match '\\u0022291550\\u0022\s+\\u0022(\d+)\\u0022'){$matchIndex=$libraryContent.IndexOf($matches[0]);$pathIndex=$libraryContent.LastIndexOf('\\u0022path\\u0022',$matchIndex);if($pathIndex -gt -1){$startPathIndex=$libraryContent.IndexOf('\\u0022',$pathIndex+6)+1;$endPathIndex=$libraryContent.IndexOf('\\u0022',$startPathIndex);$gamePath=$libraryContent.Substring($startPathIndex,$endPathIndex-$startPathIndex);$FinalPath=Join-Path -Path $gamePath -ChildPath 'steamapps\common\Brawlhalla';$FinalPath=$FinalPath.Replace('\\\\', '\');$FinalPath=$FinalPath.Replace('\\', '\'); $FinalPath}else{'Путь не найден.'}}else{'Игра с идентификатором 291550 не найдена.'} $installPath = $FinalPath; $appDataPath = [System.Environment]::GetFolderPath('ApplicationData'); $hubFilePath = '%APPDATA%\Open Mod Manager\Brawlhalla\Maps\channel.omx'; if (Test-Path $hubFilePath) { [xml]$xmlContent = Get-Content -Path $hubFilePath; $installNode = $xmlContent.SelectSingleNode('//install'); $installNode.InnerText = $installPath; $xmlContent.Save($hubFilePath); } " Т.е. мой Inno Setup проверяет только наличие стима и флага что игра установлена (так как всё это для одной игры требуется), а вот путь где установлено, построение конфигов и всё остальное я чекаю через скрипты |
дал мне когда то форумчанин по имени Gnom_aka_Lexander отличный визуал скрипт. подредактировал я этот скрипт немножко под себя - и восторгу моему не было предела. вот спустя годы возникла нужда в написании setup.exe, достал я значит заготовку, и смастерил инсталлятор. запускаю, а картинка в форме не на весь экран
думаю в чем дело, все ж нормально было, пробую старый проект - такая же картина. оказалось дело в том, что у меня стоит увеличения текста в Windows (изменение размера текста, приложений и других элементов свыше 100%). походил я по интернету, и нашел решение, откат на версию 5.1.9 конца 2006 года, но и тут меня ждала небольшая засада, рамки вокруг надписей
как заставить это работать правильно, на более новых версиях Inno, может есть какое дополнение (библиотека), или версия Inno, по типу (advanced)?
в дополнение: нужно решить еще две проблемы, чтобы довести скрипт до ума. 1.) найти способ перетаскивать форму при (BorderStyle:=bsNone). код
[Setup]
AppName=Test AppVerName=Test OutputBaseFilename=Test OutputDir=userdocs:..\desktop CreateAppDir=no Uninstallable=no [code] procedure InitializeWizard(); var ClientWidth: Integer; ClientHeight: Integer; begin ClientWidth := WizardForm.ClientWidth; ClientHeight := WizardForm.ClientHeight; WizardForm.BorderStyle := bsNone; WizardForm.ClientWidth := ClientWidth; WizardForm.ClientHeight := ClientHeight; end; вторую неделю уже колдую, и все ни как :clever-ma . в принципе жить можно, но вот перетащить форму очень бы хотелось. |
Цитата:
Скрытый текст
Код:
[Files] |
El Sanchez, дружище только увидел твой пост - думал это невозможно:idontnow: Я перелопатил весь интернет в поисках решения, но так ничего и не нашел, а тут такое:wow: Наконец осуществилась моя мечта, иметь на борту достойный инсталлятор. СПАСИБИЩЕ ТЕБЕ БОЛЬШОЕ!!! :hi: |
Доброго дня Форумчане есть у меня вот такой код
[Setup] AppName=Test AppVerName=Test OutputBaseFilename=Test OutputDir=userdocs:..\desktop DefaultDirName=Test Uninstallable=no [code] const VK_LBUTTON = $0001; WM_SETCURSOR = $0020; WM_LBUTTONDOWN = $0201; HTCLIENT = 1; SWP_NOSIZE = 1; SWP_NOZORDER = 4; SWP_NOOWNERZORDER = $0200; function SetWindowSubclass(hWnd: HWND; pfnSubclass: LongWord; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR): BOOL; external 'SetWindowSubclass@comctl32.dll stdcall'; function RemoveWindowSubclass(hWnd: HWND; pfnSubclass: LongWord; uIdSubclass: UINT_PTR): BOOL; external 'RemoveWindowSubclass@comctl32.dll stdcall'; function DefSubclassProc(hWnd: HWND; uMsg: UINT; wParam: UINT_PTR; lParam: INT_PTR): INT_PTR; external 'DefSubclassProc@comctl32.dll stdcall'; function GetCursorPos(out lpPoint: TPoint): BOOL; external 'GetCursorPos@user32.dll stdcall'; function GetWindowRect(hWnd: HWND; out lpRect: TRect): BOOL; external 'GetWindowRect@user32.dll stdcall'; function SetWindowPos(hWnd, hWndInsertAfter: HWND; X, Y, cx, cy: Integer; uFlags: UINT): BOOL; external 'SetWindowPos@user32.dll stdcall'; function GetAsyncKeyState(vKey: Integer): SmallInt; external 'GetAsyncKeyState@user32.dll stdcall'; function OffsetRect(var lprc: TRect; dx, dy: Integer): BOOL; external 'OffsetRect@user32.dll stdcall'; var PWndProc: LongWord; function WndProc(hWnd: HWND; uMsg: UINT; wParam: UINT_PTR; lParam: INT_PTR; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR): INT_PTR; var LWindowRect: TRect; LSavePt, LCurPt: TPoint; begin case uMsg of WM_SETCURSOR: begin Result := DefSubclassProc(hWnd, uMsg, wParam, lParam); if (lParam shr $10 = WM_LBUTTONDOWN) and (lParam and $FFFF = HTCLIENT) then begin GetWindowRect(hWnd, LWindowRect); GetCursorPos(LSavePt); while (GetAsyncKeyState(VK_LBUTTON) <> 0) do begin GetCursorPos(LCurPt); OffsetRect(LWindowRect, LCurPt.x - LSavePt.x, LCurPt.y - LSavePt.y); SetWindowPos(hWnd, 0, LWindowRect.Left, LWindowRect.Top, 0, 0, SWP_NOOWNERZORDER or SWP_NOSIZE or SWP_NOZORDER); LSavePt := LCurPt; end; end; end; else Result := DefSubclassProc(hWnd, uMsg, wParam, lParam); end; end; procedure SubclassWizardForm(const ARemove: Boolean); begin if PWndProc = 0 then PWndProc := CreateCallback(@WndProc); if not ARemove then SetWindowSubclass(WizardForm.Handle, PWndProc, 0, 0) else if PWndProc <> 0 then RemoveWindowSubclass(WizardForm.Handle, PWndProc, 0); end; procedure TButtonOnClick( Sender: TObject ); var MainForm: TSetupForm; begin begin MainForm := CreateCustomForm(); with MainForm do try BorderIcons := []; ClientWidth := ScaleX( 300 ); ClientHeight := ScaleY( 300 ); Caption := 'Информация'; //Position := poScreenCenter; Position := poMainFormCenter with TBevel.Create( nil ) do begin Parent := MainForm; SetBounds( ScaleX( 8 ), ScaleY( 8 ), ScaleX( 284 ), ScaleY( 249 ) ); Shape := bsFrame; end; with TNewStaticText.Create( nil ) do begin Parent := MainForm; SetBounds( ScaleX( 12 ), ScaleY( 12 ), ScaleX( 276 ), ScaleY( 241 ) ); AutoSize := False; Caption := 'Информация:' + #13#10 + 'Версия:' + #13#10 + 'И т.д.'; WordWrap := True; end; with TButton.Create( nil ) do begin Parent := MainForm; SetBounds( ScaleX( 112 ), ScaleY( 266 ), ScaleX( 76 ), ScaleY( 25 ) ); ModalResult := mrOk; Caption := 'Закрыть'; end; ShowModal(); finally Free; end; end; end; procedure InitializeWizard(); begin with TButton.Create( nil ) do begin Parent := WizardForm; Left := ScaleX( 12 ); Top := ScaleY( 327 ); Caption := 'Info'; OnClick := @TButtonOnClick; end; begin SubclassWizardForm(False); end; end; и вот стоит у меня несколько задач по данному примеру. 1.) Непонятно почему форма перетаскивается, а окно информации нет? 2.) Почему окно информации открывается не по центру формы? 3.) Возможно ли сделать так, чтобы окно информации закрывалось кликом по нему? ответьте пожалуйста, может нету вариантов решения. скоро месяц как я живу в этой программе, много чего нового нашел, много чего склеил, но некоторые вопросы решить сам не могу, так как не силён. просто реально у меня уже нету сил, в сумме на этот проект я потратил около полугода, и хочется добить его уже наконец до конца. что само больше раздражает, что мелочи которые раньше гуглились на раз, сейчас с фонарем не сыщешь, а старый комп с примерами в другом месте. весь интернет засран чекбоксами. репакеры мне (зачем музыка в инсталяторе???????????) слов нету на таких дибилов. |
люди помогите :help:
у меня уже чердак дымит. я весь вымотался |
Beavimo, имейте терпение. Знающие люди придут с работы и помогут чем смогут.
|
раньше безпроблем гуглил. сейчас немогу, уже второй день немогу установть временный файл при запуске инсталятора, я точно имею пример в две строчьки на другом пк. флаг (dontcopy) не работает в момент установки программы, если нужно обратится к файлу вылетает ошыбка. если вручную положыть файл то все работает как надо. как установить файл при запуске инталятора, в какой секции это прописать RUN или Files. все эти флаги перебрал перечитал, они работают только в момент инсталяции.
как установить временный файл при запуске инсталятора? |
Цитата:
Код:
[Files] |
Не понимаю, помогите плиз. Использую скрипт El Sanchez по прикреплению ярлыка на панели быстрого запуска. Для этого я самостоятельно создаю ярлык по главному запускающему файлу exe и прописываю его в скрипте в формате "{app}\xxxxx.lnk. Компилится, все хорошо.
Но вот после установки закрепляется ярлык, который не находит свой основной файл( Как можно решить? Я думаю надо просто сделать автоматическое создание ярлыка запускающего exe при установке программы, но не знаю как это реализовать в коде скрипта inno |
Время: 18:04. |
Время: 18:04.
© OSzone.net 2001-