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

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

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

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

Ветеран


Contributor


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


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

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


Изменения
Автор: El Sanchez
Дата: 16-02-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
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] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Отправлено: 19:06, 28-03-2013

 

Ветеран


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

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


habib2302, если мне не изменяет память, в оригинале у Johny777 это код выглядит несколько иначе:
читать дальше »
Код: Выделить весь код
function GetUninstallPath(const AppIds: array of String): array of String;
var
  StringList: TStringList;
  i, Len: Integer;
  Buff: String;
begin
  for i := 0 to GetArrayLength(AppIds)-1 do
  begin
    Buff := RemoveQuotes(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + AppIds[i] + '_is1,UninstallString|}'));
    if Buff <> '' then
    begin
      Len := GetArrayLength(Result);
      SetArrayLength(Result, Len+1);
      Result[Len] := Buff;
    end;
  end;
end;


procedure UninstallApps(const UninstallPathes: array of String);
var
  pi: _PROCESS_INFORMATION;
  si: _STARTUPINFO;
  i: Integer;
begin
  for i := 0 to GetArrayLength(UninstallPathes)-1 do
  begin
    si.cb := SizeOf(si);
    si.dwFlags := STARTF_USESHOWWINDOW;
    si.wShowWindow := SW_SHOWNORMAL;
    #ifdef UNICODE
      if not CreateProcess('', PAnsiChar(UninstallPathes[i]), 0, 0, False, NORMAL_PRIORITY_CLASS, '', '', si, pi) then
    #else
      if not CreateProcess('', PChar(UninstallPathes[i]), 0, 0, False, NORMAL_PRIORITY_CLASS, '', '', si, pi) then
    #endif
    begin
      MsgBox(SysErrorMessage(DLLGetLastError), mbCriticalError, MB_OK);
      Exit;
    end;
    try
      while WaitForSingleObject(pi.hProcess, INFINITE) <> WAIT_OBJECT_0 do Application.ProcessMessages;
    finally
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
    end;
  end;
end;

function InitializeSetup:boolean;
var
  i, Len: Integer;
  uArray: array of String;
begin
  uArray := GetUninstallPath( ['{#SetupSetting("AppID")}', APPID_AIDA_EXTREME, APPID_AIDA_BUISNES, APPID_AIDA_ENGINEER] );
  Len := GetArrayLength(uArray);
  Result := Len = 0;
  if not Result then if MsgBox('Перед установкой необходимо удалить все старые версии приложения, вызвать программы удаления сейчас?', mbError, MB_YESNO) = IDYES then
  begin
    UninstallApps(uArray);
    Result := InitializeSetup();
  end;
end;

А вот это вот что:
Код: Выделить весь код
if MsgBox('Перед установкой необходимо удалить предыдущую версию приложения. Продолжить?', mbError, MB_YESNO) = IDNO then Exit;
Зачем MsgBox вызывается в самом начале функции без каких либо условий, тогда когда его нужно вызывать только в том случае, если результат поиска установленного приложения будет True. Естественно он будет светится всегда. Что перевернули в скрипте, переворачивайте обратно и все будет работать.

P.S.
Я понимаю, что вы не ищите легких путей, однако зачем использовать такую махину для банального удаления программы, когда можно обойтись всего несколькими строчками?

Последний раз редактировалось saurn, 29-06-2013 в 20:31.

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

Отправлено: 20:23, 29-06-2013 | #711



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

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


Ветеран


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

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


Всем доброго времени суток. Объясните пожалуйста неучу, как реализовать следующее: нужно, чтобы в процессе работы инсталл периодически проверял наличие некоего файла на диске, если файл, вдруг, будет удален в процессе работы, то станет неактивной некая кнопка, если же файл появится кнопка вновь будет задействована. Самодостаточный пример не обязателен, хочу узнать сам принцип.

Отправлено: 10:32, 30-06-2013 | #712


Аватара для Johny777

Ветеран


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

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


saurn, создавай таймер на этапе ssInstall , а на ssPostInstall освобождай. В процедуре которую он будет выполнять опиши нужное тебе действие типа MyButton.Enabled := FileExists('...');

=============================================
Цитата saurn:
зачем использовать такую махину для банального удаления программы, когда можно обойтись всего несколькими строчками? »
Целью было ожидание завершение процесса создаваемого при запуске. Ожидание через WaitForSingleObject() http://fkn.ktu10.com/?q=node/633 с "бесконечным" ожиданием, пока процесс не завершится, но ей нужен хэндл (описатель) процесса, которой можно получить напрямую из структуры _PROCESS_INFORMATION, Его также можно получить по ай-ди процесса и даже по хэндлу окна, но стандартны функции инно не возвращают всего этого и ждать завершения не получитсая. Просто на ранних этапах с использованием Exec(... ,ewWaitUntilTerminated) я получал сразу несколько окон на запрос деинсталляции и окно программы установки, а теперь всё по порядку
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:39, 30-06-2013 | #713


Ветеран


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

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


Johny777, в том случае понятно для чего, там могло выполнятся удаление сразу нескольких приложений, но в последнем случае только одно, так что наверное будет достаточно и Exec с ewWaitUntilTerminated))
Цитата Johny777:
создавай таймер на этапе ssInstall »
Благодарю за подсказку, всё получилось, как нужно

Последний раз редактировалось saurn, 30-06-2013 в 13:07.

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

Отправлено: 12:51, 30-06-2013 | #714


Аватара для Johny777

Ветеран


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

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


Цитата saurn:
так что наверное будет достаточно и Exec с ewWaitUntilTerminated)) »
так точно.


habib2302, вот пример:
читать дальше »
Код: Выделить весь код
[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;


UPD: Улучшил пример!

Последний раз редактировалось Johny777, 30-06-2013 в 14:22.

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

Отправлено: 13:24, 30-06-2013 | #715


Аватара для habib2302

Ветеран


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

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


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

-------
Помог? От "Полезное сообщение" не откажусь!!!


Отправлено: 14:33, 30-06-2013 | #716


Ветеран


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

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


habib2302, при помощи CustomMessages ,было уже: http://forum.oszone.net/post-2169481-665.html

Отправлено: 15:03, 30-06-2013 | #717


Аватара для habib2302

Ветеран


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

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


saurn, т.е ты имеешь виду перевести info.rtf

-------
Помог? От "Полезное сообщение" не откажусь!!!


Отправлено: 15:39, 30-06-2013 | #718


Аватара для Johny777

Ветеран


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

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


habib2302, saurn,
Цитата habib2302:
info.rtf »
[Languages]
Name: Russian; MessagesFile: compiler:Languages\Russian.isl; InfoBeforeFile: Russian.rtf
Name: English; MessagesFile: compiler:Languages\English.isl; InfoBeforeFile: English.rtf

с InfoAfter, лицензионным соглашением нужно также, чтоб они отображались в зависимости от активного языка

PS habib2302,
Цитата habib2302:
всем доброе время суток.как сделать,чтобы файл информации о том же самом репаке переводился в зависимости от выбранного языка? »
Когда ты наконец прочитаешь долбаную справку? всё это описано в разделе [Languages]. Дальше по таким вопросам отвечать не буду!
К тому же этот вопрос уже задавался, юзай пожалуйста поиск перед тем как спрашивать!
Я б сейчас не наезжал, но такие вопросы с твоей стороны задаются слишком часто

Последний раз редактировалось Johny777, 30-06-2013 в 16:09.

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

Отправлено: 15:56, 30-06-2013 | #719


Старожил


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

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


Вот еще один пример только теперь для Лицензии
[Languages]
Name: Russian; MessagesFile: "compiler:Languages\Russian.isl"; LicenseFile: "InfoRu.rtf";
Name: English; MessagesFile: "compiler:Languages\English.isl"; LicenseFile: "InfoEn.rtf";
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:16, 30-06-2013 | #720



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 5] El Sanchez Автоматическая установка приложений 1999 28-03-2013 19:09
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59




 
Переход