Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 9]
El Sanchez
31-10-2022, 20:48
Тоже через костыли, но вроде работает. »
nik1967, на 32-разрядной системе не будет, не проверяете разрядность при обращении к HKLM64, привет исключению. Та даже если проверку сделаете, на 32-разрядной всё равно ничего не найдёте, обращаетесь к несуществующему разделу реестра.
nik1967, Vanadiy777, вы оба используете раздел WOW6432Node явно, это нельзя делать. Это сейчас вы его читаете, а потом писать туда начнёте и вот уже на 32-разрядных системах появляется раздел WOW6432Node, где быть его не должно. Браузеры ищите сначала в HKCU, потом в HKLM64 (с IsWin64), потом в HKLM32. Подраздел для всех базовых разделов одинаков - SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, не надо тут никакой отсебятины с WOW6432Node.
El Sanchez, мне то что, мне это не надо. Попросил человек, я помог, чем мог. Давно не занимался скриптами, старый стал. А тут немного размялся. Взял бы да и сам написал скрипт. По всем правилам. Всё, хватит. Отписал своё. Больше не буду вводить пользователей в заблуждение.
Vanadiy777
31-10-2022, 23:15
nik1967, зря Вы так... Ни кого Вы в заблуждение не вводили...
Только благодаря Вам я решил свою проблему, над которой ломал голову не одну неделю.
И, хотя маэстро El Sanchez говорит, что написано не правильно, тем не менее, теперь все чётко отрабатывает
и на 32-разрядной и на 64-разрядной системе, а также на 64-разрядной, если установлена Mozilla x86.
За что Вам еще раз огромное сердечное спасибо!!! :Beer:
Garasahedov
10-11-2022, 20:44
Приветствую, не одну неделю ищу такой скрипт: http://www.forum.oszone.ru/post-1242285-250.html
Но инсталятор почему-то мигает. Дайте пожалуйста если имеется такой скрипт с botva и/или InnoCallback!
Здравствуйте! Подскажите пожалуйста!
Тут вопрос упирается в WizardSmallImage.bmp.
В справках копался, на глаза так и не попалось решения, может плохо искал.
Есть какая то возможность чтобы эта картинка отображалась не из WizardSmallImage.bmp,
а из экзешника программы Program.exe, допустим отображала иконку 48x48.
И есть ли возможность, чтобы там отображалась картинка в PNG.
Может скрипт такой есть.
Vanadiy777
12-11-2022, 10:31
Есть какая то возможность чтобы эта картинка отображалась не из WizardSmallImage.bmp,
а из экзешника программы Program.exe, допустим отображала иконку 48x48. »
DA-Bro,
можно из экзешника программы выдернуть иконку и сделать из нее свой WizardSmallImage.bmp нужного размера.
На счет PNG не знаю, но вроде просто так не поддерживается... Попробуйте на форуме примеры поискать.
Vanadiy777, да я пробовал в некоторых программках и онлайн сервисах. Непрозрачные получаются. У меня фон тёмный. Приходится на этот по размеру фон накладывать значок в PNG. Потом в BMP. Так вроде нормально смотрится. Других подходящих решений пока не нашел.
#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;
#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;
Может ещё кто поможет как кнопки прикручивать.
Я вот видел как у кого-то из репакоделов на фоне картинки WizardImage.bmp есть дополнительные две кнопки.
Расположены одна ниже другой.
Одна - веб ссылка на сайт программы или форума.
Вторая - открывает файл Info.RTF в культурном окошке для просмотра.
Я тут нашел кусок кода с кнопкой для ссылки, но она на всех окнах инсталлятора видна.
Не то.
{ Переменные }
var
PupMnu: TPopupMenu;
btn: TButton;
{ Процедура обработки нажатия на кнопку }
procedure BtnOnClick(Sender: TObject);
var ErrorCode: Integer;
p: TPoint;
begin
p.x := btn.Left;
p.y := btn.Top + btn.Height;
p := Wizardform.ClientToScreen(p);
PupMnu.Popup(p.x, p.y);
ShellExec('open', 'http://forum.oszone.net/forum-62.html', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
{ Функция инициализации GUI программы установки }
procedure InitializeWizard();
var
Mnu: TMenuItem;
begin
PupMnu := TPopupMenu.Create(WizardForm);
// Кнопка
btn := TButton.Create(WizardForm);
btn.Caption := 'OSZone';
btn.Anchors := [akLeft, akTop, akBottom];
btn.Left := ScaleX(165);
btn.Top := ScaleX(336);
btn.Width := ScaleX(62);
btn.Height := ScaleX(22);
btn.Parent := WizardForm;
btn.OnClick := @BtnOnClick;
btn.PopupMenu := PupMnu;
end;
Попробовал её рядом с кнопкой "Назад" расположить. Вроде нормально, но всё равно не то. Во всех окнах она.
На десятке вроде ровно. А на семёрке на пару пикселей вниз съезжает.
Нормально это или нет, сравнить не с чем. Не знаю.
А хотелось бы как выше описано, две кнопки с вышеописанными функциями на фоне картинки 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 вот в таком окне:
https://i.imgur.com/cyzUUHr.png
Подскажите пожалуйста такой вариант кнопки.
[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, Спасибо!
Кнопка "О программе" с открытием файла readme.RTF
Тут что-то с кнопкой "Далее" происходит." Зависает и неактивной становится. Глюк какой-то.
Наверно "Далее" всегда активной должна быть.
Я в коде 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"
Вроде какая-то зависимость или исключение одного от другого должно быть.
Где-то видел раньше, никак не вспомню где рыть. Давно уже было.
И пример похожий в справке никак не найду.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.