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


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

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



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


Выразить свое отношение к модераторам раздела можно здесь: Profi, Fester
Модераторы: Fester
  
> Inno Setup - нужна помощь! , дождаться появления процесса
    Помогите пожалуйста!
    Никак не могу решить проблемму. (Inno Setup 5.1.12)
    ExpandedWrap disabled
      [Run]
      Filename: "{pf}\nnCron\Add\nncron191.exe"; Parameters: "/S /D={pf}\nnCron"
    ; После выполнения этой строки, через 4 сек. запустится служба nnCron, т.е. надо дождаться появления процесса nncron.exe, и только потом выполнять следующие строки.
    ExpandedWrap disabled
      Filename: "{cmd}"; Parameters: "/c net stop nncron"; Flags: runhidden
      Filename: "{pf}\nnCron\Add\Setup.cmd"; Flags: runhidden

    Спасибо.
    Сообщение отредактировано: Profi -
      Сделай запуск через секцию [Code].
        Если бы я мог сделать запуск через секцию [Code], я бы не стал задавать этот вопрос.
          ExpandedWrap disabled
            procedure CurPageChanged(CurPageID: Integer);
            var
              ResultCode: Integer;
            begin
             if CurPageID=wpInfoAfter then begin
              if Exec(ExpandConstant('{pf}\nnCron\Add\nncron191.exe'), ExpandConstant('/S /D={pf}\nnCron'), '', SW_SHOW,
                 ewWaitUntilIdle, ResultCode) then begin
                  Exec(ExpandConstant('{cmd}'), '/c net stop nncron', '', SW_HIDE, ewNoWait, ResultCode);
                  Exec(ExpandConstant('{pf}\nnCron\Add\Setup.cmd'), '', '', SW_HIDE, ewNoWait, ResultCode);
              end;
             end;
            end;

          Писал сразу сюда, так что проверь, особенно ewWaitUntilIdle.
            Удалил раздел [Run], вставил раздел [Code] с твои кодом, везде заменил SW_HIDE на
            SW_SHOW (чтобы видеть).
            Ни одна из команд не отработала!
            nnCron\Add\nncron191.exe
            /c net stop nncron
            nnCron\Add\Setup.cmd
            И еще один важный момент - в приведенном тобой коде (как я понял), нет ожидания
            появления процесса nncron.exe
            после выполнения nnCron\Add\nncron191.exe
              А вызовы вообще происходили? ewWaitUntilIdle ждет пока процесс не освободиться. Или используй стороннюю dll для определения запущен ли процесс.
                Цитата
                А вызовы вообще происходили?

                Вызовы не происходили.
                Цитата
                ewWaitUntilIdle ждет пока процесс не освободиться

                В этом случае, получится все тоже самое что и в разделе [Run]
                Цитата
                используй стороннюю dll для определения запущен ли процесс

                Неужели в Паскале нельзя узнать, запущен ли процесс? Со сторонней dll как то
                сложновато получится, и разбираться из за жуткого количества проблемм, совершенно некогда.
                  Я как понимаю, nncron191.exe не твоя программа? Создает ли она Mutex? А всегда ли запуск 4 секунды?
                    Цитата
                    Создает ли она Mutex?

                    Не знаю что такое Mutex.
                    Цитата
                    Я как понимаю, nncron191.exe не твоя программа?

                    Да, nncron191.exe не моя программа. Я писал к ней плагин.
                    nncron191.exe /S /D={pf}\nnCron - это тихая установка проги nnCron, последующие команды, это установка плагина и настроек (при запущеной службе, приводит к ошибкам).
                    Цитата
                    А всегда ли запуск 4 секунды?

                    А установленная служба , сам понимаешь, на разных компах будет стартовать по разному, где то за 1сек. а где то за 10сек.
                      ExpandedWrap disabled
                        function IsRunning( sName : string ) : boolean;
                        var
                          han : THandle;
                          ProcStruct : PROCESSENTRY32;
                          sID : string;
                        begin
                          Result := false;
                          han := CreateToolhelp32Snapshot( TH32CS_SNAPALL, 0 );
                          if han = 0 then
                            exit;
                          ProcStruct.dwSize := sizeof( PROCESSENTRY32 );
                          if Process32First( han, ProcStruct ) then
                            begin
                              repeat
                                sID := ExtractFileName( ProcStruct.szExeFile );
                                if uppercase( copy( sId, 1, length( sName ) ) ) = uppercase( sName ) then
                                  begin
                                    Result := true;
                                    Break;
                                  end;
                              until not Process32Next( han, ProcStruct );
                            end;
                          CloseHandle( han );
                        end;

                      Эта функция вернет true, когда nncron191.exe появиться. Следовательно делай так:
                      ExpandedWrap disabled
                        Exec(ExpandConstant('{pf}\nnCron\Add\nncron191.exe'), ExpandConstant('/S /D={pf}\nnCron'), '', SW_SHOW, ewNoWait, ResultCode);
                        While not IsRunning('nncron191.exe') do begin
                         sleep(100);
                        end;
                        Exec(ExpandConstant('{cmd}'), '/c net stop nncron', '', SW_HIDE, ewNoWait, ResultCode);
                        Exec(ExpandConstant('{pf}\nnCron\Add\Setup.cmd'), '', '', SW_HIDE, ewNoWait, ResultCode);

                      Написать dll и потключить к Inno Setup сможешь?
                        Кстати, а так:
                        ExpandedWrap disabled
                          procedure CurPageChanged(CurPageID: Integer);
                          var
                            ResultCode: Integer;
                          begin
                           if CurPageID=wpFinished then begin
                            if Exec(ExpandConstant('{pf}\nnCron\Add\nncron191.exe'), ExpandConstant('/S /D={pf}\nnCron'), '', SW_SHOW,
                               ewWaitUntilIdle, ResultCode) then begin
                                Exec(ExpandConstant('{cmd}'), '/c net stop nncron', '', SW_HIDE, ewNoWait, ResultCode);
                                Exec(ExpandConstant('{pf}\nnCron\Add\Setup.cmd'), '', '', SW_HIDE, ewNoWait, ResultCode);
                            end;
                           end;
                          end;
                        1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                        0 пользователей:


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