Войти

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


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

habib2302
10-02-2014, 23:21
доброе время суток. дело в том, что после установки я хочу еще распаковать портативку и появляется этот диалог
http://i.imgur.com/l81SE5C.jpg (http://i.imgur.com/ViQbkSH.png)
хотя в секции Setup указал
CreateUninstallRegKey=not IsComponentSelected('AIDA64\Portable and AIDA64\Portable\1 and AIDA64\Portable\2 and AIDA64\Portable\3 and Lang and Lang\ru and Lang\en and Lang\ua')

saurn
11-02-2014, 05:03
Ребят помогите, что то никак не могу найти пример кода. Нужно чтоб при установке создавался бэкап папки (копированием) а при повторном запуске инсталятора проверялось бы наличие этой бэкап папки, и если она есть то повторно не бэкапить. »
#define CUR_DIR "main" ;Глобально: папка, откуда копируем.
#define BAK_DIR "_backup" ;Глобально: папка, куда копируем.

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=.


[Files]
Source: C:\Windows\Fonts\*; DestDir: {app}\main; Flags: external overwritereadonly ignoreversion;


[Code]
#define A = (Defined UNICODE) ? "W" : "A"


function CopyFile(lpExistingFileName, lpNewFileName: String; bFailIfExists: BOOL): BOOL; external 'CopyFile{#A}@kernel32.dll stdcall';


var
backupChk: TCheckBox;


procedure IsBackup(const FromDir: String; const ToDir: String);
var
fileArray: array of String;
FindFiles: TFindRec;
i, Len: Integer;
begin
fileArray := ['*'];
Len := GetArrayLength(fileArray) - 1;
for i := 0 to Len do
begin
if FindFirst(FromDir + fileArray[i], FindFiles) then
try
WizardForm.ProgressGauge.Hide;
WizardForm.StatusLabel.Caption := 'Создание резервной копии файлов...';

repeat
if not DirExists(ToDir) then CreateDir(ToDir);
CopyFile(FromDir + FindFiles.Name, ToDir + FindFiles.Name, False);
until not FindNext(FindFiles);
finally

WizardForm.ProgressGauge.Show;
FindClose(FindFiles);
end;
end;
end;


procedure InitializeWizard();
var
ThereIsFolders: Boolean;
begin
backupChk := nil;
ThereIsFolders := (DirExists(AddBackslash(WizardDirValue()) + '{#CUR_DIR}') and //Проверяем, есть ли папка, откуда копируем файлы.
(not DirExists(AddBackslash(WizardDirValue()) + '{#BAK_DIR}')) ); //Проверяем, что папка, куда копируем файлы не существует.

if ThereIsFolders then //Если оба вышеозначенных условия соблюдены создаем чекбокс.
begin
backupChk := TCheckBox.Create(nil);
with backupChk do
begin
Parent := WizardForm.SelectDirPage;
SetBounds(ScaleX(WizardForm.DirEdit.Left), ScaleY(WizardForm.DiskSpaceLabel.Top div 2), ScaleX(WizardForm.DirEdit.Width), ScaleY(15));
Caption := 'Сохранить резервную копию перезаписываемых файлов';
Checked := ThereIsFolders;
end;
end;
end;


procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssInstall: if backupChk <> nil then //Проверяем, создан ли чекбокс.
if backupChk.Checked then //Если чекбокс создан, проверяем отмечен ли он
//Вызываем процедуру создания резервной копии файлов нв этапе перед установкой.
IsBackup(ExpandConstant('{app}\{#CUR_DIR}\'), //Папка, откуда копируем файлы.
ExpandConstant('{app}\{#BAK_DIR}\')); //Папка, куда копируем файлы.
end;
end;

Имейте ввиду, что удовлетворительным результатом здесь является исключительно отсутствие папки. Если папка есть, но она пуста, все равно будет возвращен False результат.

---------------------------------------------------------------

habib2302
[Setup]
CreateUninstallRegKey=_CheckIsComponents

[Code]
function _CheckIsComponents(): Boolean;
begin
Result := not IsComponentSelected('AIDA64\Portable\1') and
not IsComponentSelected('AIDA64\Portable\2') and
not IsComponentSelected('AIDA64\Portable\3');
end;

CreateUninstallRegKey=not IsComponentSelected('AIDA64\Portable and AIDA64\Portable\1 and AIDA64\Portable\2 and AIDA64\Portable\3 and Lang and Lang\ru and Lang\en and Lang\ua') »
IsComponentSelected('...'): здесь должно быть указано имя компонента, одного, а не всех компонентов разом, да еще и языков зачем-то. В итоге для компилятора это строка считается именем одного компонента, вот он и проверяет, отмечен ли компонент под именем AIDA64\Portable and AIDA64\Portable\1 and AIDA64\Portable\2 and AIDA64\Portable\3 and Lang and Lang\ru and Lang\en and Lang\ua

_Akim_
11-02-2014, 13:24
Имейте ввиду, что удовлетворительным результатом здесь является исключительно отсутствие папки. Если папка есть, но она пуста, все равно будет возвращен False результат. »
Да это то что нужно. Бэкапим папку оригинальной программы, делаем это один раз и обязательно, поэтому можно и без чекбоксов. Спасибо.

diman_21Ru
11-02-2014, 14:53
Всем привет у Jove в мод-паке появилась занятная функция Авто-оповещение об обновлении Модпака как это можно реализовать ?

innot20
11-02-2014, 17:04
Всем привет у Jove в мод-паке появилась занятная функция Авто-оповещение об обновлении Модпака как это можно реализовать ? »
это мод для танков и к inno setup он никак не относится

diman_21Ru
11-02-2014, 19:34
innot20 ,это не мод а Launcher

Valera90
11-02-2014, 20:28
diman_21Ru, да меня тоже интересует это может кто то знает как это сделать ?

diman_21Ru
11-02-2014, 20:37
Как можно исправить сбоку баг на windows 7 все нормально но на Windows 8 вот как понимаю из за совместимости но все же можно может как то решить :)

saurn
11-02-2014, 20:54
Авто-оповещение об обновлении Модпака как это можно реализовать ? »
Написать утилиту, которая будет проверять наличие обновлений на некоем сервере. Только Inno - то тут каким боком?
Как можно исправить сбоку баг »
Похоже на косяк скинирования.

habib2302
11-02-2014, 21:02
Написать утилиту, которая будет проверять наличие обновлений на некоем сервере. Только Inno - то тут каким боком? »
согласен. как в angry birds в конфиге указал сервак а утилита сканирует наличие новой версии и т.д.

diman_21Ru
11-02-2014, 21:39
habib2302, а расширенный Inno Setup ведь только 5.5.1 или же есть выше может выше версия исправит мой баг

habib2302
11-02-2014, 22:05
выше 5.5.1 еще нет. а в текстовом файле лицензии нет этого. попробуй изменить формат текстового файла txt->rtf или rtf->txt

TryRooM
12-02-2014, 04:51
diman_21Ru,
такой вариант
http://rghost.ru/52373209

diman_21Ru
12-02-2014, 08:27
TryRooM,спасибо

habib2302 ,rtf->txt не дало нечего может прокрутку сбоку можно дорисовать как то

diman_21Ru
12-02-2014, 11:12
Как можно реализовать компоненты сюда добавляю просто [Components] не работает
вот скрипт : http://rghost.ru/52375292

TryRooM
12-02-2014, 11:28
diman_21Ru,
добавил сайт
http://rghost.ru/52375404

diman_21Ru
12-02-2014, 11:34
TryRooM,скрипт выше можешь глянуть компоненты как включить там чтобы выходили , если знаешь напиши

diman_21Ru
12-02-2014, 12:49
Походу скрипт не вышел но запустите и посмотрите пожалуйста

El Sanchez
12-02-2014, 19:31
Как можно исправить сбоку баг на windows 7 все нормально но на Windows 8 вот как понимаю из за совместимости но все же можно может как то решить »
Похоже на косяк скинирования. »
Да, встречал я такое пропадание скроллбара при использовании IsSkin/IsSkinEx.dll. При размере шрифта, отличном от умолчального, у ComponentsList не отрисовывается скроллбар, хотя такой же компонент TasksList отрисовывает как надо. Выставление у ComponentList таких же свойств, как у TasksList, ничего не дало. Но, если запускать на системе с классической темой, то скроллбар у ComponentList рисуется. Поэтому перед инициализацией скина необходимо установщику отрубить визуальные стили. Инициализацию скина проводят либо в InitializeSetup, либо при многоязычном установщике в InitializeLanguageDialog (если версия IS расширенная), поэтому первой строкой в теле одной из этих функций нужно написать:

procedure SetThemeAppProperties(dwFlags: DWORD); external 'SetThemeAppProperties@uxtheme.dll stdcall';

function InitializeSetup(): Boolean;
begin
// disable visual style
SetThemeAppProperties(0);

// load skin
...
end;

Ivan_009
13-02-2014, 11:13
Как можно прописать в скрипте запрет установки в Windows XP... :gamer: Кроме остальных систем...
Большое прибольшое спасибо за помощь...




© OSzone.net 2001-2012