PDA

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


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 [44] 45 46 47 48 49 50 51 52 53 54 55 56 57

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.

nik1967
31-10-2022, 22:26
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!

DA-Bro
11-11-2022, 17:37
Здравствуйте! Подскажите пожалуйста!
Тут вопрос упирается в WizardSmallImage.bmp.
В справках копался, на глаза так и не попалось решения, может плохо искал.

Есть какая то возможность чтобы эта картинка отображалась не из WizardSmallImage.bmp,
а из экзешника программы Program.exe, допустим отображала иконку 48x48.

И есть ли возможность, чтобы там отображалась картинка в PNG.

Может скрипт такой есть.

Vanadiy777
12-11-2022, 10:31
Есть какая то возможность чтобы эта картинка отображалась не из WizardSmallImage.bmp,
а из экзешника программы Program.exe, допустим отображала иконку 48x48. »
DA-Bro,
можно из экзешника программы выдернуть иконку и сделать из нее свой WizardSmallImage.bmp нужного размера.
На счет PNG не знаю, но вроде просто так не поддерживается... Попробуйте на форуме примеры поискать.

DA-Bro
12-11-2022, 15:33
Vanadiy777, да я пробовал в некоторых программках и онлайн сервисах. Непрозрачные получаются. У меня фон тёмный. Приходится на этот по размеру фон накладывать значок в PNG. Потом в BMP. Так вроде нормально смотрится. Других подходящих решений пока не нашел.

ZVSRus
12-11-2022, 16:48
#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;

DA-Bro
13-11-2022, 01:32
ZVSRus, Спасибо!

DA-Bro
13-11-2022, 05:59
Может ещё кто поможет как кнопки прикручивать.

Я вот видел как у кого-то из репакоделов на фоне картинки 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.

ZVSRus
13-11-2022, 08:19
[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;

DA-Bro
13-11-2022, 17:11
ZVSRus, Спасибо большое!

Я в кодах не силён. А на примерах и подсказках проще.

Кнопка со ссылкой на сайт подошла.

А вот кнопка "О программе" не совсем то что нужно.

Нужно чтобы открывался текстовый файл readme.RTF вот в таком окне:

https://i.imgur.com/cyzUUHr.png

Подскажите пожалуйста такой вариант кнопки.

ZVSRus
13-11-2022, 20:07
[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;

DA-Bro
13-11-2022, 20:54
ZVSRus, Спасибо!

Кнопка "О программе" с открытием файла readme.RTF

Тут что-то с кнопкой "Далее" происходит." Зависает и неактивной становится. Глюк какой-то.
Наверно "Далее" всегда активной должна быть.

Я в коде Wizardform.NextButton.Enabled := False; на True поменял, вроде нормально сейчас.
Не знаю может ещё там что подправить надо.

Подскажите пожалуйста, а как сделать чтобы в этой кнопке при установке с Русским языком
отображалось из ReadmeRu.rtf, а при установке с Английским или по дефолту - из ReadmeEn.rtf.

И также в названиях кнопок Русский и Английский.

ZVSRus
14-11-2022, 15:43
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);

DA-Bro
14-11-2022, 17:37
ZVSRus, Спасибо большое!

Подскажите пожалуйста как грамотней удалить папку с содержимым из "C:\ProgramData\Папка программы".
Я посмотрел в справке и не увидел такой константы {C:\ProgramData}.

Что-то вроде этого:

[UninstallDelete]
Type: filesandordirs; Name: "{C:\ProgramData}\Папка программы";

Как правильней удалить из этой папки.

ZVSRus
14-11-2022, 18:18
[UninstallDelete]
Type: filesandordirs; Name: "{commonappdata}\Папка программы";

Ну так в справке же есть.

DA-Bro
14-11-2022, 19:32
ZVSRus, понятно. Спасибо!

Просто в справке написано:

{userappdata} & {commonappdata}
Путь к папке с данными приложения (Application Data).

Я вижу что не похоже на "ProgramData" и прошел мимо.

ZVSRus
14-11-2022, 19:41
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не является правильным способом.

DA-Bro
15-11-2022, 21:19
Подскажите пожалуйста!

А как сделать чтобы при русском или анлийском (или по дефолту) выборе установки программы
копировались только те файлы которые нужны для того или иного языка.

Например 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