На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
Дорогие друзья! Поздравляем вас с днём Победы!
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ Inno Setup
Пожалуйста, выделяйте текст инсталлятора написанного на Inno Setup тегом [сode=ins] ... [/сode]. Для этого используйте кнопку [code=ins] в форме ответа или выпадающего списка, если нужно вставить код из другой программы.


Обязательно указывать:

  • Программу, используемую для создания инсталлятора.



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


Выразить свое отношение к модераторам раздела можно здесь: Profi, Fester
Модераторы: Fester
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Вопрос по Inno Setup
    Установленная программа создает файл конфигурации(INI), так вот при удалении как сделать так чтобы у пользователя спрашивалось удалять этот файл настроек или оставить?

    И еще вопрос, если я ставлю новую версию программы, а старая в это время запущенна и работает.. как сделать так чтобы старая программа заменилась на новую? скорей всего это надо через перезапуск компьютера, как так сделать чтобы после перезапуска записалась новая версия файла программы? и собственно как тогда осуществить сам перезапуск?
      Цитата Dmitry_177 @
      Установленная программа создает файл конфигурации(INI), так вот при удалении как сделать так чтобы у пользователя спрашивалось удалять этот файл настроек или оставить?

      ExpandedWrap disabled
        [UninstallDelete]
        Name: {app}\My Dir\My ini.ini; Type: files; Check: DelOrNo
         
        [Code]
        Function DelOrNo:boolean;
        begin
            Result:=MsgBox('Удалить Ini-файл?',mbConfirmation,MB_YESNO)=IDYES;
        end;

      Цитата Dmitry_177 @
      И еще вопрос, если я ставлю новую версию программы, а старая в это время запущенна и работает.. как сделать так чтобы старая программа заменилась на новую? скорей всего это надо через перезапуск компьютера, как так сделать чтобы после перезапуска записалась новая версия файла программы? и собственно как тогда осуществить сам перезапуск?

      Вот тут подробнее? Что если просто закрыть программу, установить новую и запустить её? Зачем перезагружать компьютер?
        Дело в том что она работает как сервис.. т.е. не имеет своего окна даже.. вот можноли такую программу остановить в InnoSetup?
          Цитата Dmitry_177 @
          Дело в том что она работает как сервис.. т.е. не имеет своего окна даже.. вот можноли такую программу остановить в InnoSetup?

          Пишется dll с функцией, которая завершает процесс, и подключается к инсталлятору.
            По поводу удаления Ini-файла.. Можно ли сделать так, чтобы было это не в виде MessageBox-а, а в виде окна, и там чтоб был CheckBox с выбором удалить настройки или нет.. Так просто в основном делается на сколько я знаю..
              Цитата Dmitry_177 @
              По поводу удаления Ini-файла.. Можно ли сделать так, чтобы было это не в виде MessageBox-а, а в виде окна, и там чтоб был CheckBox с выбором удалить настройки или нет.. Так просто в основном делается на сколько я знаю..

              Хм, судя по всему нет! Как вставить свою страницу в Uninstall, ровно, как и использовать для данных целей встроенные возможности, я не нашел.
                Может если присмотреть к демкам, в часности к CodeClasses.iss , то что нить прояснится? ;-)
                  Цитата jack128 @
                  Может если присмотреть к демкам, в часности к CodeClasses.iss , то что нить прояснится? ;-)

                  В Install'е я могу создать все что угодно, а вот в Uninstall'е - нет! Данный пример ничего нового мне не сказал.
                    Цитата Profi @
                    Данный пример ничего нового мне не сказал.

                    А если очень внимательно присмотреться к procedure FormButtonOnClick(Sender: TObject); ? ;-)
                      Цитата jack128 @
                      А если очень внимательно присмотреться к procedure FormButtonOnClick(Sender: TObject); ? ;-)

                      Угу. Ну, если исключить строку:
                      ExpandedWrap disabled
                        Form.CenterInsideControl(WizardForm, False);
                      , то работает!
                        Цитата
                        Пишется dll с функцией, которая завершает процесс, и подключается к инсталлятору.

                        написал DLL, пеодключил к инсталлятору:

                        ExpandedWrap disabled
                          [Code]
                          procedure TerminateService;
                          external 'TerminateService@files:Setup.dll stdcall';


                        Эта процедура делает сигнальным определенное событие, которое ожидает сам сервис, по которому завершает свою работу..

                        Вот как мне в при удалении программы(чтобы его остановить перед тем как удалить исполняемый файл сервиса) и при переустановки более новой версии запускать эту процедуру?
                          ExpandedWrap disabled
                            procedure CurStepChanged(CurStep: TSetupStep);
                            CurStep=ssInstall;
                             
                            procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
                            CurUninstallStep=usUninstall;
                            Что-то я не очень понял.. а как их в самой инсталляции вызывать? Ведь если сделать так:

                            ExpandedWrap disabled
                              [UninstallDelete]
                              Name: {app}\My Dir\KLServer.exe; Type: files; Check: TerminateService


                            где TerminateService процедура, т.е. никакого значения не возвращает, то при компиляции инсталлятора вызывается какая-то ошибка.. Сделал TerminateService как функцию, которая возвращает значение типа boolean, о оно всегда true, т.е. так:

                            ExpandedWrap disabled
                              [Code]
                              function TerminateServer: boolean;
                              external 'TerminateServer@files:Setup.dll stdcall';


                            то сам то инсталлятор компилируется, но при самой инсталляции почемуто выскакивает ошибка: "Внутренняя ошибка: Expression error 'Script error: Could not call proc.'"
                              Сделай так:
                              ExpandedWrap disabled
                                [UninstallDelete]
                                Name: {app}\My Dir\KLServer.exe; Type: files; Check: TermService
                                 
                                [Code]
                                Function TermService:boolean;
                                begin
                                  Result:=TerminateServer;
                                end;
                                а может это быть из-за того что у меня библиотека, в которой содержится эта функция в инсталляторе как:
                                ExpandedWrap disabled
                                  [Files]
                                  Source: "E:\Klient.RU\Setup\Setup.dll"; Components: KLServer; Flags: dontcopy
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0406 ]   [ 15 queries used ]   [ Generated: 12.05.24, 16:10 GMT ]