Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 8]
если папки files нет, то программа не выполняла никаких действий; если есть, то производила замену\добавление файла. »
[Files]
Source: "C:\1\file1.txt"; DestDir: "c:\MyProgr\files"; Flags: ignoreversion; Check: DirExists(ExpandConstant('{sd}\MyProgr\files'))
Используйте константы (переменные) для папок назначения (DestDir), в данном случае, исходя из вашего примера, я указал константу {sd}, которая означает букву системного раздела.
Еще помогите, плиз.
В инсталляторе создана пользовательская страница. Задача привязать к ней MsgBox, т.е. чтобы он появлялся сразу при переходе на кастомную страницу. Ведь вроде CurStep не видит "нарисованных" страниц?
Ведь вроде 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?
nik1967,
Еще вопрос...
В зависимости от определенных условий кастомная страница может создаваться, а может и нет. Если создана, то выполняется еще ряд условий. Как проверить наличие кастомной страницы?
Ivn78, а не проще плясать от тех определённых условий, в зависимости от которых и создаётся/не создаётся кастомная страница?
С проверкой страницы что-то не сталкивался. Или может забыл :(
nik1967,
Уже пляшу) просто думал, есть более кошерный способ
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);
nik1967,
Да, спасибо, уже разобрался.
А не подскажете, как на этапе ssDone открыть интернет-страницу в браузере по умолчанию?
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;
Подскажите как поправить пример
[ 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 установлен, то продолжаем установку (можно и не показывать сообщение про это), если не установлен то отобразить сообщение что не установлен, и завершить процесс установки.
Сам пытался, но нечего путнего у меня не вышло
то отобразить сообщение что не установлен, и завершить процесс установки. »
Почему бы не предложить его тут же, прямо сейчас, загрузить и установить?!
Почему бы не предложить его тут же, прямо сейчас, загрузить и установить?! »
В реальном инсталере хочу использовать этот метод для установки обновления программы, которое делаю сам, если программа есть, обновляем, если нет то завершаем работу. Оригинальный инсталер программы msi, по этому и выбрал этот метод.
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 с целевой папки
Может, посоветуете что?
Вариант ручного удаления - не вариант. Надо чтобы их не оставалось после установки
Карась з Днiпра
25-10-2017, 10:09
Также задача второстепенной важности, которая мне никак не поддается. Буду благодарен, если поможете.
Видел как то русскую локализацию к игре Lost Via Domus, от пиратов. Целевой файл там на 2 ГБ, архив какой нибудь. А сам инсталл - мегабайта полтора или сколько там. Не помню. Мелочь. Подобное супер-мега-дупер-сжатие мне надо реализовать и в своем скрипте, потому как файлов там гигабайт на 15. Помогите, пожалуйста...
Карась з Дн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, для моего инсталла деинсталяция вообще не нужна. Да и лишние файлы в целевой папке тоже.
Помогите, пожалуйста... »
Использовать внешние упаковщики, для распаковки - IsDone.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.