PDA

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


Страниц : 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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126

Sotonisto
14-08-2015, 12:24
не отображаются надписи»
В каком смысле? Я буквально только что проверил скрипт - всё работает. Возможно, вы забыли удалили нижнее подчеркивание в [Code_]?

Dodakaedr
16-08-2015, 14:42
как сделать
чтобы перед установкой удалило старую версию программы
потом установила новую версию »
#define MyAppName "Test"
#define MyAppVersion "1.0"

[setup]
appid=test1
appname={#MyAppName}
appvername={#MyAppVersion}
DefaultDirName={sd}\{#MyAppName}

[code]
var
BtnDel, BtnNDel: TNewRadioButton;

function CheckChoose(): Boolean;
var
ShowForm: TSetupForm;
begin
ShowForm := CreateCustomForm;
ShowForm.Position:=poScreenCenter;
try
ShowForm.ClientWidth := ScaleX(410);
ShowForm.ClientHeight := ScaleY(170);
ShowForm.BorderStyle := bsSingle;
ShowForm.BorderIcons := [biSystemMenu];
ShowForm.Caption := '{#MyAppName} {#MyAppVersion}';

with TNewButton.Create(ShowForm) do
begin
Parent := ShowForm;
SetBounds(ScaleX(110), ScaleY(120), ScaleX(90), ScaleY(25));
ModalResult := mrYes;
Caption := 'OK';
end;

with TNewStaticText.Create(ShowForm) do
begin
Parent:= ShowForm;
Caption:='Мастер может выполнить поиск предыдущей версии {#MyAppName} {#MyAppVersion} и'+ #13#10 +
'удалить её. Вы хотите удалить предыдущую версию?';
Left:=ScaleX(20);
Top:=ScaleY(20);
Font.Name:= 'Tahoma';
Font.Size:= 9;
Font.Color:=clBlack;;
end;

BtnDel := TNewRadioButton.Create(ShowForm);
with BtnDel do
begin
Parent := ShowForm;
Left := ScaleX(20);
Top := ScaleY(60);
Width := ScaleX(200);
Height := ScaleY(17);
Caption := 'Да, удалить предыдущую версию';
Checked := True;
end;

BtnNDel := TNewRadioButton.Create(ShowForm);
with BtnNDel do
begin
Parent := ShowForm;
Left := ScaleX(20);
Top := ScaleY(80);
Width := ScaleX(272);
Height := ScaleY(17);
Caption := 'Нет, установить с заменой';
end;

with TNewButton.Create(ShowForm) do
begin
Parent := ShowForm;
SetBounds(ScaleX(210), ScaleY(120), ScaleX(90), ScaleY(25));
ModalResult := mrcancel;
Caption := SetupMessage(msgButtonCancel);
end;

Result := (ShowForm.ShowModal = mrYes);
finally
ShowForm.Free;
end;
end;

function TrueDel: boolean;
begin
result := BtnDel.Checked;
end;
function FalseDel: boolean;
begin
result := BtnNDel.Checked;
end;

function UninstallApp(): Boolean;
var
Buff: String;
i: Integer;
begin
Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + ExpandConstant( '{#SetupSetting( "AppId" )}_is1' ), 'UninstallString', Buff );
if not Result then
begin
Result := not FileExists(RemoveQuotes(Buff));
if not Result then
try
Exec(RemoveQuotes(Buff), '', ExtractFilePath(RemoveQuotes(Buff)), SW_SHOW, ewWaitUntilTerminated, i);
finally
Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + ExpandConstant( '{#SetupSetting( "AppId" )}_is1' ), 'UninstallString', Buff );
if not Result then result := false; end;
end else MsgBox('Программа не найдена!', mbError, MB_OK);
end;

function InitializeSetup(): Boolean;
begin
if CheckChoose then
if TrueDel then result := UninstallApp else result := false;
if FalseDel then result := true;
end;
Так как на скрине не получится, потому что надо генерировать новый идентификатор программы(AppID).

habib2302
16-08-2015, 15:01
vadjliss,
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
AppId=wwwwwwwwwwwwww

[code]

function UninstallMyApp(): Boolean;
var
Buff: String;
i: Integer;
begin
Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1', 'UninstallString', Buff );
if not Result then Result := not FileExists(RemoveQuotes(Buff));
if not Result then if MsgBox('Перед установкой необходимо удалить предыдущую версию приложения. Продолжить?', mbError, MB_YESNO) = IDYES then
try
Exec(RemoveQuotes(Buff), '', ExtractFilePath(RemoveQuotes(Buff)), SW_SHOW, ewWaitUntilTerminated, i);
finally
Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1', 'UninstallString', Buff );
if not Result then MsgBox('Удаление завершилось неудачей, бывай!', mbError, MB_OK);
end;
end;

function InitializeSetup(): Boolean;
begin
Result := UninstallMyApp();
end;

Sotonisto
16-08-2015, 17:35
habib2302, я уже предлагал vadjliss использовать этот пример (на предыдущей странице), но он ответил, что скрипт у него не работает.
Надеюсь, что Dodakaedr ему поможет.

Nordek
16-08-2015, 18:16
я уже предлагал vadjliss использовать этот пример (на предыдущей странице), но он ответил, что скрипт у него не работает. »Почему не работает?
У меня работает, у vadjliss не работает - Вопрос: Почему?
Может всё-таки проблема в этом [Code_] (Отметил красным), которое vadjliss не удалил?

Читайте (http://forum.oszone.net/post-2270836-1700.html).

habib2302
16-08-2015, 18:18
Sotonisto, ну вы сами видите, что постоянно вопросы задает те, которые легко решаются поиском по темам в печатной версии особенно про портативну. я ему дал легки код и спасибо не сказал. может он appid не сменил или код не правильно вставил. хотя смотрю он пишет, что не отображается текст в msgbox. значит забыл сменить название языка в разделе [CustomMessages] и в [Languages] с rus на свой

boss911
21-08-2015, 16:19
что-бы после установки программы запустился ещё 1 файл по запросу пользователя(есть галочка или нет) в зависимости от разрядности системы должен запускаться тот или другой файл »
[Run]
Filename: {app}\MyProg32.exe; WorkingDir: {app}; Description: {cm:LaunchProgram,MyProg}; Flags: nowait postinstall skipifsilent; Check: NOT IsWin64
Filename: {app}\MyProg64.exe; WorkingDir: {app}; Description: {cm:LaunchProgram,MyProg}; Flags: nowait postinstall skipifsilent; Check: IsWin64

Dodakaedr
21-08-2015, 16:24
Lanirius, используйте IsWin64


if IsWin64 then
запуск x64 файла else
запуск x32 файла



[Run]
Filename: "{app}\x32.exe"; Description: "Запустить {#MyAppName}"; Check: "not IsWIn64"; Flags: postinstall nowait skipifsilent
Filename: "{app}\x64.exe"; Description: "Запустить {#MyAppName}"; Check: "IsWIn64"; Flags: postinstall nowait skipifsilent

Lanirius
21-08-2015, 16:49
boss911, Спасибо, работает, однако мне надо что-бы тот файл запускался от администратора (иначе не запускает его). Ну или сам сетапник надо запускать от админа... не подскажите где это надо прописать?

Dodakaedr
21-08-2015, 16:52
Ну или сам сетапник надо запускать от админа... не подскажите где это надо прописать? »

[Setup]
PrivilegesRequired=admin

Lanirius
21-08-2015, 17:03
Dodakaedr, Спасибо

audiofeel
21-08-2015, 20:13
поменял координаты почти всего в procedure InitializeWizard
добавил стекло ISWIN7, окно черное, только кнопки на стекле, подскажите что добавить или указать правильно
вот пример мой небольшой
procedure InitializeWizard;
begin
with WizardForm do begin
ClientWidth := ScaleX(529);
ClientHeight := ScaleY(350);
InnerNotebook.Hide;
OuterNotebook.Hide;
Bevel.Hide;
Position := poDesktopCenter;
WizardBitMapImage.Parent := WizardForm;
WizardBitMapImage.SetBounds(ScaleX(6), ScaleY(6), ScaleX(518), ScaleY(191));
NextButton.SetBounds(ScaleX(349), ScaleY(316), ScaleX(80), ScaleY(23));
BackButton.SetBounds(ScaleX(269), ScaleY(316), ScaleX(80), ScaleY(23));
CancelButton.SetBounds(ScaleX(438), ScaleY(316), ScaleX(80), ScaleY(23));
DirBrowseButton.Parent := WizardForm;
DirBrowseButton.SetBounds(ScaleX(428), ScaleY(244), ScaleX(80), ScaleY(23));
DirEdit.Parent := WizardForm;
DirEdit.SetBounds(ScaleX(22), ScaleY(245), ScaleX(390), ScaleY(21));
DiskSpaceLabel.Parent := WizardForm;
DiskSpaceLabel.SetBounds(ScaleX(20), ScaleY(279), ScaleX(450), ScaleY(16));
GroupBrowseButton.Parent := WizardForm;
GroupBrowseButton.SetBounds(ScaleX(428), ScaleY(244), ScaleX(80), ScaleY(23));
GroupEdit.Parent := WizardForm;
GroupEdit.SetBounds(ScaleX(22), ScaleY(245), ScaleX(390), ScaleY(21));
NoIconsCheck.Parent := WizardForm
NoIconsCheck.SetBounds(ScaleX(23), ScaleY(276), ScaleX(417), ScaleY(17));
TasksList.Parent := WizardForm;
TasksList.SetBounds(ScaleX(19), ScaleY(207), ScaleX(504), ScaleY(90));
ReadyMemo.Parent := WizardForm;
ReadyMemo.SetBounds(ScaleX(23), ScaleY(220), ScaleX(484), ScaleY(82));
FilenameLabel.Parent := WizardForm;
FilenameLabel.SetBounds(ScaleX(20), ScaleY(225), ScaleX(485), ScaleY(17));
StatusLabel.Parent := WizardForm;
StatusLabel.SetBounds(ScaleX(20), ScaleY(211), ScaleX(485), ScaleY(17));
end;
CreateControls;
end;

audiofeel
23-08-2015, 14:57
кто сможет вот это выложить http://forum.oszone.net/post-2137995-275.html
решил опять заняться. все растерял
без всяких выкрутасов, все по дефолту

vadjliss
23-08-2015, 20:02
парни что за папка APPDIR
и как её прописать
подскажите и покажите пожалуйста

TryRooM
23-08-2015, 22:40
audiofeel, Комплект, упаковщики - распаковщики.
http://rghost.ru/85k69DsmC

vadjliss
24-08-2015, 20:12
подскажите скрипт
что бы пользователь мог сам выбрать какую программу установить если в одном инстоляторе лежит скажем 3 и более программ
всё облазил что то не нашёл
ПОМОГИТЕ
примерно вот так
http://piccash.net/allimage/2015/8-24/img_thumb/505406-thumb.png (http://piccash.net/27967/505406/)

Sobol37
28-08-2015, 12:30
Чем правильно заменить выделенную область что бы вносились данные в реестр под любым SID и на любом компьютере:

Root: HKU; SubKey: S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXX\Software

habib2302
28-08-2015, 12:49
Sobol37,
HKU и HKCU это одно и тоже

Sobol37
28-08-2015, 13:07
Ага. Теперь я понял. Если его прописать в HKCU то те же данные появляются и в HKU. Мне просто нужно было что бы при удалении программы удалялись и данные с HKU. Причём эти данные появляются не при инсталляции самой программы, а при первом её запуске и появляются они только в HKU. В HKCU их нет. При деинсталляции программы данные в HKU просто оставались в реестре и мусорили его. Вот я решил их заблаговременно прописать дабы не мусорить лишний раз.

habib2302
28-08-2015, 13:20
Sobol37, вот возьмите и сравните один раздел. допустим run

http://savepic.ru/7755168.png (http://savepic.ru/7754144.png) http://savepic.ru/7744928.png (http://savepic.ru/7743904.png)

http://forum.oszone.net/post-2104385-1795.html




© OSzone.net 2001-2012