Войти

Показать полную графическую версию : Скрипты 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

boss911
22-10-2017, 12:55
если папки files нет, то программа не выполняла никаких действий; если есть, то производила замену\добавление файла. »
[Files]
Source: "C:\1\file1.txt"; DestDir: "c:\MyProgr\files"; Flags: ignoreversion; Check: DirExists(ExpandConstant('{sd}\MyProgr\files'))
Используйте константы (переменные) для папок назначения (DestDir), в данном случае, исходя из вашего примера, я указал константу {sd}, которая означает букву системного раздела.

marinaU
22-10-2017, 13:20
boss911, спасибо большое

Ivn78
22-10-2017, 23:28
Еще помогите, плиз.
В инсталляторе создана пользовательская страница. Задача привязать к ней MsgBox, т.е. чтобы он появлялся сразу при переходе на кастомную страницу. Ведь вроде CurStep не видит "нарисованных" страниц?

nik1967
23-10-2017, 07:52
Ведь вроде CurStep не видит "нарисованных" страниц? »
А зачем тебе CurStep?

procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
wpWelcome: begin
end;
Кастомная_страница.ID: begin
MsgBox('Hello.', mbInformation, MB_OK);
end;
end;
end;

Или тебе надо, что бы кастомная страница появлялась на этапе ssInstall, ssPostInstall, ssDone?

Ivn78
23-10-2017, 08:10
nik1967,
Еще вопрос...
В зависимости от определенных условий кастомная страница может создаваться, а может и нет. Если создана, то выполняется еще ряд условий. Как проверить наличие кастомной страницы?

nik1967
23-10-2017, 10:14
Ivn78, а не проще плясать от тех определённых условий, в зависимости от которых и создаётся/не создаётся кастомная страница?
С проверкой страницы что-то не сталкивался. Или может забыл :(

Ivn78
23-10-2017, 10:43
nik1967,
Уже пляшу) просто думал, есть более кошерный способ

nik1967
24-10-2017, 17:00
Ivn78, воспользоваться функцией SaveStringToFile
Pascal Scripting: SaveStringToFile
Прототип:
function SaveStringToFile(const FileName: String; const S: AnsiString; const Append: Boolean): Boolean;

Описание:
Сохраняет указанную строку в указанный файл. Если Append является True и указанный файл уже существует, то текст будет добавлен к файлу, вместо его полной перезаписи. При успешном выполнении возвращает True, иначе False.

Комментарии:
Эта функция автоматически не записывает символ перевода строки. Если Append является True и в конце существующего файла отсутствует символ перевода строки, функция добавит содержимое переменной S к последней строке. Чтобы избежать этого, вы можете поместить символы перевода строки перед и после вашей строки:

SaveStringToFile('c:\filename.txt', #13#10 + 'the string' + #13#10, True);

Ivn78
24-10-2017, 22:06
nik1967,
Да, спасибо, уже разобрался.
А не подскажете, как на этапе ssDone открыть интернет-страницу в браузере по умолчанию?

nik1967
24-10-2017, 22:18
procedure CurStepChanged(CurStep: TSetupStep);
var
ErrorCode: Integer;
begin
if CurStep = ssDone then ShellExec('open', 'http://forum.oszone.net/showthread.php?p=2773094#post2773094', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

xryst
24-10-2017, 23:04
Подскажите как поправить пример

[ code]
const
INSTALLSTATE_DEFAULT = 5;

#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif

function MsiQueryProductState(szProduct: String): Integer;
external 'MsiQueryProductState{#A}@msi.dll stdcall';

function IsMsiProductInstall(ProductCode: String): Boolean;
begin
Result := MsiQueryProductState(ProductCode) = INSTALLSTATE_DEFAULT;
end;

//к примеру определяем установлен ли Microsoft Visual C++ 2010 x86 Redistributable, ProductCode которого {196BB40D-1578-3D01-B289-BEFC77A11A1E}
procedure InitializeWizard();
begin
if IsMsiProductInstall('{196BB40D-1578-3D01-B289-BEFC77A11A1E}') then
MsgBox('vcredist 2010 installed for current user', mbInformation, MB_OK)
else
MsgBox('vcredist 2010 not installed', mbInformation, MB_OK);
end;

Нужно результатом работы получить, если Microsoft Visual C++ 2010 установлен, то продолжаем установку (можно и не показывать сообщение про это), если не установлен то отобразить сообщение что не установлен, и завершить процесс установки.
Сам пытался, но нечего путнего у меня не вышло

Iska
24-10-2017, 23:35
то отобразить сообщение что не установлен, и завершить процесс установки. »
Почему бы не предложить его тут же, прямо сейчас, загрузить и установить?!

xryst
25-10-2017, 00:00
Почему бы не предложить его тут же, прямо сейчас, загрузить и установить?! »

В реальном инсталере хочу использовать этот метод для установки обновления программы, которое делаю сам, если программа есть, обновляем, если нет то завершаем работу. Оригинальный инсталер программы msi, по этому и выбрал этот метод.

nik1967
25-10-2017, 09:34
xryst,
[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[code]
const
INSTALLSTATE_DEFAULT = 5;

#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif

function MsiQueryProductState(szProduct: String): Integer;
external 'MsiQueryProductState{#A}@msi.dll stdcall';

function IsMsiProductInstall(ProductCode: String): Boolean;
begin
Result:= MsiQueryProductState(ProductCode) = INSTALLSTATE_DEFAULT;
end;

//к примеру определяем установлен ли Microsoft Visual C++ 2010 x86 Redistributable, ProductCode которого {196BB40D-1578-3D01-B289-BEFC77A11A1E}
function InitializeSetup: Boolean;
begin
if IsMsiProductInstall('{196BB40D-1578-3D01-B289-BEFC77A11A1E}') then begin
MsgBox('vcredist 2010 installed for current user', mbInformation, MB_OK);
Result:= true;
end else begin
MsgBox('vcredist 2010 not installed', mbInformation, MB_OK);
Result:= false;
end;
end;

Карась з Днiпра
25-10-2017, 10:03
Здраствуйте, уважаемые знатоки!
Такая вот шняга. Скрипт Inno Setup подшаманить надо.
Надо убрать инфу для удаления, а конкретно - два файла. unins000.dat и unins000.exe с целевой папки
Может, посоветуете что?
Вариант ручного удаления - не вариант. Надо чтобы их не оставалось после установки

Iska
25-10-2017, 10:06
Карась з Днiпра, зачем?

Карась з Днiпра
25-10-2017, 10:09
Также задача второстепенной важности, которая мне никак не поддается. Буду благодарен, если поможете.
Видел как то русскую локализацию к игре Lost Via Domus, от пиратов. Целевой файл там на 2 ГБ, архив какой нибудь. А сам инсталл - мегабайта полтора или сколько там. Не помню. Мелочь. Подобное супер-мега-дупер-сжатие мне надо реализовать и в своем скрипте, потому как файлов там гигабайт на 15. Помогите, пожалуйста...

nik1967
25-10-2017, 10:10
Карась з Днiпра,
[Setup]: Uninstallable
Возможные значения:
yes или no, или логические выражения
Значение по умолчанию:
yes

Описание:
Inno Setup определяет, создавать ли автоматический деинсталлятор. При значении yes или логического выражения True он создается. Иначе автоматическое удаление будет невозможно, так что пользователь должен будет вручную удалять программу.

Установка значения директивы в True может быть полезной, если Вы хотите установить 'переносимую' программу.

Например:
[Setup]
Uninstallable=not IsTaskSelected('portablemode')

[Tasks]
Name: portablemode; Описание: "Portable Mode"
См. также:
CreateUninstallRegKey

[Setup]: CreateUninstallRegKey
Возможные значения:
yes или no, или логическое выражение
Значение по умолчанию:
yes

Описание:
При значении no или False (логические выражения) инсталлятор не будет создавать пункта программы в диалоге Установка и удаление программ. Это может быть полезно, если программа является обновлением для уже установленного приложения и запись в этом диалоге не нужна, но надо сохранить возможность удаления обновления (Uninstallable=no). В этом случае, UpdateUninstallLogAppName обычно устанавливается в no.

Карась з Днiпра
25-10-2017, 10:10
Iska, для моего инсталла деинсталяция вообще не нужна. Да и лишние файлы в целевой папке тоже.

nik1967
25-10-2017, 10:11
Помогите, пожалуйста... »
Использовать внешние упаковщики, для распаковки - IsDone.




© OSzone.net 2001-2012