Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 4]

Закрытая тема
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 4]

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1271
Благодарности: 1029


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: Vadikan
Дата: 22-05-2012
Описание: Закрыто
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:
Inno Setup [все вопросы] часть 1
Inno Setup [все вопросы] часть 2
Скрипты Inno Setup. Помощь и советы [часть 3]


Продолжение обсуждения
Скрипты Inno Setup. Помощь и советы [часть 5]

Отправлено: 18:01, 29-08-2011

 

Аватара для Gnom_aka_Lexander

Ветеран


Сообщения: 978
Благодарности: 564

Профиль | Сайт | Отправить PM | Цитировать


Цитата Devils Night:
Теперь точно, отвесил до зубов, мне теперь этого на целый год хватит.
А как нибудь попроще нельзя? А то как бы я в этих тонкостях не волоку. »
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program

[*Code]
const
  MAX_PATH = 260;
  // Папка пользователя (обычно C:\Documents and Settings\username)
  CSIDL_PROFILE                 = $28;

function SHGetSpecialFolderPath(hwndOwner: HWND; lpszPath: PChar; nFolder: Integer; fCreate: BOOL): BOOL;
  external 'SHGetSpecialFolderPathA@shell32.dll stdcall';

function GetSpecialPath(CSIDL: Word): string;
var
  s:  string;
begin
  SetLength(s, MAX_PATH);
  if not SHGetSpecialFolderPath(0, PChar(s), CSIDL, True) then s := '';
  Result:= PChar(s);
end;

procedure InitializeWizard;
begin
  // определим расположение папки пользователя
  MsgBox(GetSpecialPath(CSIDL_PROFILE), mbInformation, MB_OK);
end;

procedure DeinitializeUninstall();
begin
  DelTree(GetSpecialPath(CSIDL_PROFILE)+'\папка',True,False,False);
end;
Както так пробуй.

R.i.m.s.k.y., уже просто не хочет, почемуто работать в CurUninstallStepChanged, попробовал в DeinitializeUninstall - там заработало.

-------
Я люблю помогать. Но не путайте: "Помогите мне" и "Сделайте за меня" - это совершенно разные понятия.


Последний раз редактировалось Gnom_aka_Lexander, 05-12-2011 в 12:27.

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:19, 05-12-2011 | #321



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для R.i.m.s.k.y.

Ветеран


Сообщения: 1640
Благодарности: 536

Профиль | Отправить PM | Цитировать


Лександер, ты через реестр хочешь выдирать путь до папок? неправильно, сильно глюкаво сие есть
лучше пример из шапки адаптируй как Devils Night надо
не, я мог бы и сам, но мой большой толстый скрипт из которого я примеры дергаю лежит дома
а тут делов то, к CurUninstallStepChanged прикрутить удаление папки из перечисленного в шапке

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Последний раз редактировалось R.i.m.s.k.y., 05-12-2011 в 11:54.

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:27, 05-12-2011 | #322


Аватара для R.i.m.s.k.y.

Ветеран


Сообщения: 1640
Благодарности: 536

Профиль | Отправить PM | Цитировать


как-то так
Код: Выделить весь код
const
  MAX_PATH = 260;
  // Папка пользователя (обычно C:\Documents and Settings\username)
  CSIDL_PROFILE                 = $28;

function SHGetSpecialFolderPath(hwndOwner: HWND; lpszPath: PChar; nFolder: Integer; fCreate: BOOL): BOOL;
  external 'SHGetSpecialFolderPathA@shell32.dll stdcall';

function GetSpecialPath(CSIDL: Word): string;
var
  s:  string;
begin
  SetLength(s, MAX_PATH);
  if not SHGetSpecialFolderPath(0, PChar(s), CSIDL, True) then s := '';
  Result:= PChar(s);
end;

procedure RD(Dir:string);
begin
  Exec('cmd.exe', ' /c rd /S /Q  ' + AddQuotes(Dir),ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res);
  Exec('cmd.exe', ' /c rd /S /Q  ' + '"'+Dir+'"',ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res);
end;

procedure RF(file:string);
begin
  Exec('cmd.exe', ' /c del /F /Q  ' + AddQuotes(file),ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res);
  Exec('cmd.exe', ' /c erase /F /Q  ' + '"'+file+'"',ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res);
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep=usDone then RD(RemoveBackslashUnlessRoot(GetSpecialPath(CSIDL_PROFILE))+'\MyProgs');
end;
инношные функции DelTree и RemoveFile какие-то капризные
я своими RD/RF пользуюсь

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Последний раз редактировалось R.i.m.s.k.y., 05-12-2011 в 12:26.

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:59, 05-12-2011 | #323


Аватара для R.i.m.s.k.y.

Ветеран


Сообщения: 1640
Благодарности: 536

Профиль | Отправить PM | Цитировать


Лександер, я вообще-то путь удаления взял из твоего скрипта выше
свой скрипт поправил

к тому же это плохой тон править сообщения выше после критики снизу

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Последний раз редактировалось R.i.m.s.k.y., 05-12-2011 в 14:02.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:24, 05-12-2011 | #324


Аватара для Gnom_aka_Lexander

Ветеран


Сообщения: 978
Благодарности: 564

Профиль | Сайт | Отправить PM | Цитировать


Цитата R.i.m.s.k.y.:
к тому же это плохой тон править сообщения выше критики снизу »
Это на всякий случай, поскольку вариант рабочий, и лучше исправить. то, что он у меня не отработал, еще не значит, что не сработает еще у когото.
Цитата R.i.m.s.k.y.:
это значит ровно то что у кого-то еще он тоже не сработает »
Не отработала функция DelTree, но на семерке она так-же, видимо через раз работает. Это не значит, что она не сработает ни у кого.
Разве нет?

-------
Я люблю помогать. Но не путайте: "Помогите мне" и "Сделайте за меня" - это совершенно разные понятия.


Последний раз редактировалось Gnom_aka_Lexander, 05-12-2011 в 12:41.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:32, 05-12-2011 | #325


Аватара для R.i.m.s.k.y.

Ветеран


Сообщения: 1640
Благодарности: 536

Профиль | Отправить PM | Цитировать


Цитата Лександер:
Это на всякий случай, поскольку вариант рабочий, и лучше исправить. то, что он у меня не отработал, еще не значит, что не сработает еще у когото »
это значит ровно то что у кого-то еще он тоже не сработает
я не знаю что там с DelTree, когда я столкнулся что на шаге ssInstall ничего не удаляется, я стал использовать RF/RD что в примере выше

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Последний раз редактировалось R.i.m.s.k.y., 05-12-2011 в 12:44.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:37, 05-12-2011 | #326


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1271
Благодарности: 1029

Профиль | Отправить PM | Цитировать


Цитата R.i.m.s.k.y.:
я не знаю что там с DelTree, когда я столкнулся что на шаге ssInstall ничего не удаляется »
Стало быть в папке есть файлы, занятые системой.

P.S. Получить userprofile штатно:
Код: Выделить весь код
GetEnv('USERPROFILE');
GetShellFolderByCSIDL($28, True);
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:23, 05-12-2011 | #327


Пользователь


Сообщения: 91
Благодарности: 7

Профиль | Сайт | Отправить PM | Цитировать


Если приложение "мультиразрядное"...

1. Сам по себе Inno Setup по умолчанию делает "универсальные" установщики, которые будут работать на всех ОС или нет?

Если к примеру, программа может работать как на 32-х, так и на 64-х разрядной версиях Windows, то нужно ли в скрипте установки указывать какие-нибудь дополнительные параметры?

Например:
"ArchitecturesAllowed=x86 x64 и/или "ArchitecturesInstallIn64BitMode=x64"?

А также если программа по умолчанию должна устанавливаться в в папку "Program Files", то путь прописывать какой константой:
"{pf}" или "{pf32}"?

Аналогичный вопрос по поводу папки Windows и System как с ними быть в 64-х разрядной ОС?

ИМЕЕТСЯ ВВИДУ, ЧТО ПРИЛОЖЕНИЕ СОДЕРЖИТ 64-Х РАЗРЯДНЫЕ МОДУЛИ: системные файлы, библиотеки, драйвера, а не просто поддерживают обе версии ОС.
Т.к. как большинство 32-х разрядных приложений может вполне нормально работать и на 64-х разрядной ОС!

ИЛИ ЖЕ ВСЕ ЭТИ "ТОНКОСТИ" НУЖНЫ ЛИШЬ КОГДА ПРИЛОЖЕНИЕ 64-х РАЗРЯДНОЕ и будет работать, только на 64-х разрядной ОС?

2. Ещё подобный вопрос по поводу 32-х разрядного приложения, которое будет запускаться на 64-х разрядной ОС, в таком случае, что писать в скрипте?

3. И последнее, когда приложение само по себе 64-х разрядное, то установщик для неё то же должен быть 64-х разрядным? Т.е. чтобы инстал был 64-х разрядным и вообще НЕ запускался на 32-х разрядной ОС.
Умеет ли Inno Setup это делать и можно ли собрать установщик для 64-х разрядного приложения на 32-х разрядной ОС?

Отправлено: 20:35, 05-12-2011 | #328


Аватара для R.i.m.s.k.y.

Ветеран


Сообщения: 1640
Благодарности: 536

Профиль | Отправить PM | Цитировать


Цитата TROY Diamond:
Сам по себе Inno Setup по умолчанию делает "универсальные" установщики, которые будут работать на всех ОС или нет »
да универсальные пока в ArchitecturesAllowed не указано иное, к примеру если указать ArchitecturesAllowed=х64 то на винх86 инсталлер выдаст сообщение что ОС не поддерживается и закроется, по умолчанию ArchitecturesAllowed не задан и инсталлер работает на винх86 как родной, в винх64 - как вин32 приложение

Цитата TROY Diamond:
А также если программа по умолчанию должна устанавливаться в в папку "Program Files", то путь прописывать какой константой:
"{pf}" или "{pf32}" »
прописывать константой {app}
или зависит от самого приложения где ему комфортней

Цитата TROY Diamond:
Аналогичный вопрос по поводу папки Windows и System как с ними быть в 64-х разрядной ОС »
в вин64 system32 теперь ютятся х64 компоненты, в syswow64 - это аналог system32, там проживают х32 компоненты
читай в справке 64-bit Installation Limitations и Install Mode: 32-bit vs. 64-bit

Цитата TROY Diamond:
ИМЕЕТСЯ ВВИДУ, ЧТО ПРИЛОЖЕНИЕ СОДЕРЖИТ 64-Х РАЗРЯДНЫЕ МОДУЛИ: системные файлы, библиотеки, драйвера, а не просто поддерживают обе версии ОС.
Т.к. как большинство 32-х разрядных приложений может вполне нормально работать и на 64-х разрядной ОС! »
индивидуально отслеживать что куда пишется и раскидывать внимательно, системная функция IsWin64 тебе в помощь

Цитата TROY Diamond:
ИЛИ ЖЕ ВСЕ ЭТИ "ТОНКОСТИ" НУЖНЫ ЛИШЬ КОГДА ПРИЛОЖЕНИЕ 64-х РАЗРЯДНОЕ и будет работать, только на 64-х разрядной ОС? »
тонкости есть всегда, но в данном акцепте в вин64 надо следить что-куда раскидывается независимо х64 или х32 приложение устанавливается

Цитата TROY Diamond:
Ещё подобный вопрос по поводу 32-х разрядного приложения, которое будет запускаться на 64-х разрядной ОС, в таком случае, что писать в скрипте »
зависит от того что нужно приложению, не ставь ArchitecturesInstallIn64BitMode=x64 и в вин64 инно поставит твое х32 прогу как 32битное приложение

Цитата TROY Diamond:
И последнее, когда приложение само по себе 64-х разрядное, то установщик для неё то же должен быть 64-х разрядным? »
инно 32 разрядный, поэтому он не может вызывать х64 библиотеки, но ставить может
пишешь ArchitecturesInstallIn64BitMode=x64

Цитата TROY Diamond:
чтобы инстал был 64-х разрядным и вообще НЕ запускался на 32-х разрядной ОС. »
ArchitecturesAllowed=x64 и инсталлер на вин32 выдаст предупреждение и закроется

Цитата TROY Diamond:
Умеет ли Inno Setup это делать и можно ли собрать установщик для 64-х разрядного приложения на 32-х разрядной ОС »
можно собрать инно64 но с нюансами, описанными в Install Mode: 32-bit vs. 64-bit

при четком понимании процесса и ясной голове проблем не возникнет


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

ArchitecturesAllowed задает тип винды на котором запускается инсталлер
по умолчанию пустой, инсталлер работает в вин32 как родной, в вин64 как 32 битное приложение, если прописать только один тип винды, то на другой инсталлер не заработает, напишет неподдерживаемая венда и закроется

ArchitecturesInstallIn64BitMode=х64 говорит инсталлеру что в вин64 он будет как вин64 приложение, от этого зависят пути до папок, ключи реестра и прочее
прочитай 64-bit Installation Limitations и Install Mode: 32-bit vs. 64-bit



Цитата El Sanchez:
я не знаю что там с DelTree, когда я столкнулся что на шаге ssInstall ничего не удаляется »
Стало быть в папке есть файлы, занятые системой. »
а стандартная RD удаляет занятые файлы влет? так не бывает, что-то другое

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Последний раз редактировалось R.i.m.s.k.y., 05-12-2011 в 21:30.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:15, 05-12-2011 | #329


Забанен


Сообщения: 216
Благодарности: 62

Профиль | Цитировать


читать дальше »
Цитата Лександер:
Както так пробуй. »
Цитата R.i.m.s.k.y.:
как-то так »
Цитата El Sanchez:
Код: Выделить весь код
GetEnv('USERPROFILE');
GetShellFolderByCSIDL($28, True);
»
Лександер, R.i.m.s.k.y., El Sanchez, Спасибо вам ребятки огромное, но что-то никак.
Короче говоря
Код: Выделить весь код
[UninstallDelete]
Name: {userdocs}\MyProgs; Type: filesandordirs
т.е из C:\Documents and Settings\iUser\Мои документы\MyProgs
всё прекрасно удаляет

Код: Выделить весь код
[UninstallDelete]
Name: {userprofile}\MyProgs; Type: filesandordirs
C:\Documents and Settings\iUser\MyProgs - (%userprofile%\MyProgs)
ни в какую, что с выше приведёнными примерами, что без них, а нужно то, всего лишь удалить папку .

Вы конечно извините, но эти скрипты мне с трудом даются, где то могу понять, а где то нет, так что не обессудьте за тормознутость, да и прежде чем задать вопрос, я всегда смотрю справку. А поиск, а что поиск, там какие алгоритмы не вводи, всё равно выдаёт не то что нужно.



Еще три вопроса. Как сделать вот что?
1. Вопрос
a) При нажатии на кнопку выводил адрес шлюза с возможностью копирования его по кнопке.
b) Трассировку маршрута, т.е на странице дополнительных задач было окно в котором вводится шлюз и по нажатии Ок происходит трассировка или как там ещё называется.
читать дальше »
Код: Выделить весь код
[ Code]
var
  IPAddressEdit: TIPAddressEdit;
  Button: TNewButton;
procedure RedesignWizardForm;
begin

//************************************ Трассировка ************************************
  IPAddressEdit := TIPAddressEdit.Create(WizardForm);
  with IPAddressEdit do
  begin
    Name := 'IPAddressEdit';
    Parent := WizardForm.SelectTasksPage;
    Left := ScaleX(8);
    Top := ScaleY(200);
    Width := ScaleX(150);
    Height := ScaleY(21);
  end;
  IPAddressEdit.TabOrder := 2;
//************************************ Вывод Трассировка ************************************

//************************************ Кнопка Проверить шлюз ************************************
Button := TNewButton.Create(WizardForm);
  with Button do
  begin
    Name := 'Button';
    Parent := WizardForm;
    Left := ScaleX(16);
    Top := ScaleY(327);
    Width := ScaleX(99);
    Height := ScaleY(23);
    Caption := 'Проверить шлюз';
  end;
  Button.TabOrder := 5;
//************************************ Кнопка Проверить шлюз ************************************
end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;


//************************************ Вывод шлюза ************************************
//Function InitializeSetup: Boolean;
//begin
//if MsgBox('Ваш шлюз: 000.000.000.000', mbError, MB_OK) = idYes then result := true else result := false;
//end;
//************************************ Вывод шлюза ************************************




//************************************ Вывод шлюза ************************************
var
  Button1: TNewButton;
Function InitializeSetup: Boolean;
begin
if MsgBox('Ваш шлюз: 000.000.000.000', mbError, MB_OK) = idYes then result := true else result := false;

begin
  Button1 := TNewButton.Create(WizardForm);
  with Button1 do
  begin
    Name := 'Скопировать';
    Parent := WizardForm;
    Left := ScaleX(32);
    Top := ScaleY(327);
    Width := ScaleX(75);
    Height := ScaleY(25);
  end;
  Button1.TabOrder := 5;
end;

end;
//************************************ Вывод шлюза ************************************
Визуально представить это могу, но чтобы средствами Inno это сделать, просто в голове не укладывается.

2. Вопрос
Как сделать четыре кнопки Изменить, Запустить, Удалить и Отмена
читать дальше »
Код: Выделить весь код
#define AppName "My Program"
#define AppExeName "MyProg.exe"
#define InExe "setup.exe"
#define UnExe "unins000.exe"

[Setup]
AppName={#AppName}
AppVerName={#AppName}
DefaultDirName={pf}\{#AppName}
DefaultGroupName={#AppName}

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

[Messages]
rus.SetupWindowTitle={#AppName}

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion nocompression;

[Icons]
Name: "{group}\{#AppName}"; Filename: "{app}\{#AppExeName}"
Name: "{group}\{cm:UninstallProgram,{#AppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#AppName}"; Filename: "{app}\{#AppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#AppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(AppName, "&", "&&")}}"; Flags: nowait postinstall skipifsilent

[Registry]
Root: HKLM; Subkey: "SOFTWARE\{#AppName}"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\{#AppName}"; ValueName: "Path"; ValueType: String; ValueData: "{app}\"; Flags: uninsdeletekey

[UninstallDelete]
Type: filesandordirs; Name: {app};

[ Code]
//************************************** Четыре кнопки **************************************
var
AppDir, unins, run: string;
ResultCode: Integer;
UninsButton, RunButton: TButton;
MyLabel: TLabel;

procedure ReadEntries;
begin
RegQueryStringValue(HKLM, 'SOFTWARE\{#AppName}', 'Path', AppDir);
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:= False;
end;

procedure Uninstall(Sender: TObject);
begin
unins:='{#UnExe}';
ReadEntries;
if not (FileExists(AddBackslash(AppDir) + unins)) then
MsgBox('Невозможно запустить деинсталляцию программы ' + ExpandConstant('{#AppName}') + ', т.к. исполняемый файл деинсталляции unins000.exe не найден.', mbCriticalError, MB_OK or MB_DEFBUTTON1)
else
Exec(AddBackslash(AppDir) + unins, '', ExtractFilePath(AddBackslash(AppDir) + unins), SW_SHOW, ewNoWait, ResultCode);
WizardForm.Close;
end;

procedure RunProgramm(Sender: TObject);
begin
run:='{#AppExeName}';
ReadEntries;
if (FileExists(AddBackslash(AppDir) + run)) then
Exec(AddBackslash(AppDir) + run, '', ExtractFilePath(AddBackslash(AppDir) + run), SW_SHOW, ewNoWait, ResultCode);
WizardForm.Close;
end;


//************************************** Новый кнопарь *****************************************
procedure RunInstall(Sender: TObject);
begin
run:='{src}\{#InExe}';
ReadEntries;
if (FileExists(AddBackslash(AppDir) + run)) then
Exec(ExpandConstant('{src}\{#InExe}'),'','',SW_SHOW,ewNoWait,ResultCode);
WizardForm.Close;
end;
//************************************** Новый кнопарь *****************************************


procedure NewForm;
begin
ReadEntries;
if (RegValueExists(HKLM, 'SOFTWARE\{#AppName}', 'Path')) and (FileExists(ExpandConstant(AppDir)+'\{#AppExeName}')) then begin
with WizardForm do
begin
ClientWidth := ScaleX(395);
ClientHeight := ScaleY(120);
Bevel.Hide;
InnerNotebook.Hide;
OuterNotebook.Hide;
BorderStyle:= bsDialog;
Center;
with CancelButton do
begin
Left := WizardForm.CancelButton.Left -100;
Top := WizardForm.ClientHeight - CancelButton.Height - ScaleY(10);
BringToFront;
end;




//************************************** Новый кнопарь *****************************************
RunButton:= TButton.Create(WizardForm);
with RunButton do
begin
Left := WizardForm.NextButton.Left -280;
Top := WizardForm.ClientHeight - NextButton.Height - ScaleY(10);
Width:= WizardForm.NextButton.Width;
//Height := 22;
Parent:= WizardForm;
Caption:= 'Изменить';
OnClick := @RunInstall;
//Cursor:= crHand;
BringToFront;
end;
//************************************** Новый кнопарь *****************************************



UninsButton:= TButton.Create(WizardForm);
with UninsButton do
begin
Left := WizardForm.NextButton.Left -100;
Top := WizardForm.ClientHeight - NextButton.Height - ScaleY(10);
Width:= WizardForm.NextButton.Width;
Parent:= WizardForm;
Caption:= 'Удалить';
OnClick := @Uninstall;
BringToFront;
end;

RunButton:= TButton.Create(WizardForm);
with RunButton do
begin
Left := WizardForm.BackButton.Left -110;
Top := WizardForm.ClientHeight - BackButton.Height - ScaleY(10);
Width:= WizardForm.BackButton.Width;
Parent:= WizardForm;
Caption:= 'Запустить';
OnClick := @RunProgramm;
BringToFront;
end;

MyLabel:= TLabel.Create(WizardForm);
with MyLabel do
begin
SetBounds(10,10,380,80);
AutoSize:=False;
WordWrap:=True;
//Font.Color:=$000000;
//Font.Style:=[fsBold];
//Font.Size:=10;
Parent:=WizardForm;
Transparent:=True;
Caption:= 'Программа ' + ExpandConstant('{#AppName}') + ' уже установлена на Ваш компьютер.' +#13#13+ 'Выберите нужное действие.';
end;
end;
end;
end;

procedure InitializeWizard;
begin
NewForm;
end;
//************************************** Четыре кнопки **************************************

3. Вопрос
Как сделать так чтобы при установки определялась версия Net.Framework 3.5, если он не установлен, то сначало устанавливался Net.Framework 3.5 из папки Others, а потом продолжалася установка, если установлен то продолжал установку?

Последний раз редактировалось Devils Night, 06-12-2011 в 06:50.


Отправлено: 02:59, 06-12-2011 | #330



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 4]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Test ferget Тест-форум 0 24-08-2011 01:25
test ! ! Aaa ! ! Тест-форум 0 23-04-2011 11:29
test Santa aka Snt Тест-форум 0 16-04-2011 22:35
test xolod. Программное обеспечение Linux и FreeBSD 0 19-04-2009 21:03
Test memory KEugeNik Хочу все знать 11 23-11-2003 23:11




 
Переход