На главную Наши проекты:
Журнал   ·   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
    помогите пожалуйста.. очень нужно..
      Приведи полный код.
        В программе:

        ExpandedWrap disabled
          // создается событие для выключения программы:
            hTermEvent := CreateEvent(nil, false, false, TermEventName);
            CloseHandle(CreateThread(nil, 0, @ThreadTerminateEvent, nil, 0, idThread));
           
          function ThreadTerminateEvent(Param: Pointer): DWORD; stdcall;
          begin
            WaitForSingleObject(hTermEvent, INFINITE);
            // сохраняем то что нужно сохранить и выключаем программу
            Application.Terminate;
            Result := 0;
          end;


        В библиотека которая встраивается в инсталлятор Setup.dll:

        ExpandedWrap disabled
          function TerminatePrg: boolean; stdcall;
          var
            hTermEvent: THandle;
          begin
            hTermEvent := CreateEvent(nil, false, false, TermEventName);
            if GetLastError = ERROR_ALREADY_EXISTS then
              SetEvent(hTermEvent);
            CloseHandle(hTermEvent);
            Result := true;
          end;
           
          exports
            TerminatePrg;


        В самом инсталляторе:

        ExpandedWrap disabled
          [Files]
          Source: "E:\Setup\Setup.dll"; Flags: dontcopy
           
          [Code]
          function TerminatePrg: boolean;
          external 'TerminatePrg@files:Setup.dll stdcall';
           
          [UninstallDelete]
          Name: "{app}\MyProg.exe"; Type: files; Check: TerminatePrg
          Кстати, да. Есть такой баг у Inno, а может это фича, касаема "could not call proc" из некоторых мест скрипта.

          Вот куски моего скрипта:
          ExpandedWrap disabled
            [Files]
            Source: "sputil.dll"; Flags: dontcopy
            ...
             
             
            function UnInstall(UserPassword: PChar): Boolean; external 'UnInstall@files:sputil.dll stdcall';
             
            function InitializeUninstall(): Boolean;
            begin
              Result := UnInstall('some_pass');
            end;
            ...


          Так вот, единственный способ прекратить деинсталляцию, который я знаю - это отдать False при вызове InitializeUninstall.
          С другой стороны, в InitializeUninstall невозможно вызвать функцию из моей подключаемой библиотеки sputil.dll.
          Inno пишет "could not call proc".

          В то же время, если перенести вызов функции UnInstall из sputil.dll куда нибудь подальше :) вроде CurUninstallStepChanged, то естественно она зовется, но уже поздно, отменить инсталляцию нельзя. А мне нужно запросить пароль, отдать его на растерзание функции UnInstall и в зависимости от этого запретить/разрешить деинсталляцию.
          Посоветуйте, как быть :unsure:
          Сообщение отредактировано: Fork -
            Цитата Dmitry_177 @
            В самом инсталляторе:

            ExpandedWrap disabled
              [Files]
              Source: "E:\Setup\Setup.dll"; Flags: dontcopy
               
              [Code]
              function TerminatePrg: boolean;
              external 'TerminatePrg@files:Setup.dll stdcall';
               
              [UninstallDelete]
              Name: "{app}\MyProg.exe"; Type: files; Check: TerminatePrg

            Ну, а так:
            ExpandedWrap disabled
              [UninstallDelete]
              Name: "{app}\MyProg.exe"; Type: files; Check: TermService
               
              [Code]
              function TerminatePrg: boolean;
              external 'TerminatePrg@files:Setup.dll stdcall';
               
              Function TermService:boolean;
              begin
                Result:=TerminatePrg;
              end;
            1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
            0 пользователей:


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