Inno Setup (создание инсталяционных пакетов). Часть 2

Статус
В этой теме нельзя размещать новые ответы.

SaintPaul

Участник
deaddima, я не думаю, что у него получиться скачать файл по той ссылке, что ты дал. Он же Newbie. :)
 

Devils Night

Ветеран
Последнее редактирование:

Darck

Новичок
спасибо!
Мне бы хотелось что бы было как тут что бы можно было останавливать и т.д
 
Последнее редактирование:

Hachapury

Участник
Darck, есть же модуль bass в файловом архиве, его и юзай. там только пару строк добавить в скрипт нужно, но он использует батву, но думаю это не проблема, да и чего это должно быть проблемой :)
 

Darck

Новичок
Darck, есть же модуль bass в файловом архиве, его и юзай. там только пару строк добавить в скрипт нужно, но он использует батву, но думаю это не проблема, да и чего это должно быть проблемой :)
Если бы я в скриптах шарил бы сюда бы не писал)
 

Suhov

Новичок
Код:
#define MyAppName "DiRT"


[Icons]
Name: {group}\Играть DiRT ; Filename: {app}\DiRT.exe; WorkingDir: {app};  Comment: {#MyAppName};
Name: {group}\Удалить DiRT; Filename: {uninstallexe}; WorkingDir: {app}\*; IconFilename: {uninstallexe}; Comment: Удалить игру {#MyAppName};
Name: {commondesktop}\DiRT; Filename: {app}\DiRT.exe; WorkingDir: {app}; Comment: {#MyAppName};


[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
снимаю галочку в исталяторе (Добавить ярлык на рабочий стол), но он все равно дабаляет... как исправить это?
 

YURSHAT

Тех. админ
Администратор
Suhov, [SOURCE="iss"]Name: {commondesktop}\DiRT; Filename: {app}\DiRT.exe; WorkingDir: {app}; Comment: {#MyAppName}; Tasks: desktopicon[/SOURCE]
 

Devils Night

Ветеран
Как переместить сюда?
вот



Мужики, помогите отшлифовать код, в общем не могу совместить их друг с другом, Join Scripts бессилен.
[SOURCE="iss"]
#define AppName "My Program"

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

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

[Messages]
rus.SetupWindowTitle={#AppName}

[Icons]
Name: "{group}\{cm:UninstallProgram,{#AppName}}"; Filename: "{uninstallexe}"

[Files]
Source: compiler:Dll Pack\ISTask.dll; DestDir: {app}; Flags: dontcopy
Source: compiler:Dll Pack\ISTask.dll; DestDir: {app}

Код:
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';
function KillTask(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';
function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
  if RunTask('programm.exe', False) then
    begin
      // прячем форму
      UninstallProgressForm.Visible:= False;
      if MsgBox('Программа programm.exe используется. Закрыть и продолжить удаление?', mbConfirmation, MB_YESNO) = IDYES then
        begin
          KillTask('programm.exe');
          UnloadDll(ExpandConstant('{app}\ISTask.dll'));
          // показываем форму
          UninstallProgressForm.Visible:= True;
        end
      else
        begin
          MsgBox('Завершите работу programm.exe, затем снова запустите программу удаления.', mbInformation, MB_OK);
          UnloadDll(ExpandConstant('{app}\ISTask.dll'));
          Abort;
        end;
    end;
end;


//**************************************************//
function InitializeSetup(): Boolean;
begin
  If RunTask('programm.exe', false) then
    begin
      if MsgBox('Программа programm используется. Закрыть и продолжить установку?', mbInformation, mb_YesNo) = idYes then
        begin
          KillTask('programm.exe');
          Result:= True;
        end else
          Exit;
    end;
Result:=True;
end;
[/SOURCE][/SPOILER]
 
Последнее редактирование:

LexBell

Борода
Супер модератор
[SOURCE="iss"]#define AppName "My Program"

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

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

[Messages]
rus.SetupWindowTitle={#AppName}

[Icons]
Name: "{group}\{cm:UninstallProgram,{#AppName}}"; Filename: "{uninstallexe}"

[Files]
Source: compiler:Dll Pack\ISTask.dll; DestDir: {app}

Код:
function RunTask(FileName: AnsiString; bFullpath: Boolean): Boolean;
  external 'RunTask@files:ISTask.dll stdcall';
function KillTask(ExeFileName: AnsiString): Integer;
  external 'KillTask@files:ISTask.dll stdcall';

function RunTaskU(FileName: AnsiString; bFullpath: Boolean): Boolean;
  external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';
function KillTaskU(ExeFileName: AnsiString): Integer;
  external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';

//**************************************************//

function InitializeSetup(): Boolean;
begin
  if RunTask('Compil32.exe', False) then
  begin
    if MsgBox('Программа Compil32.exe используется. Закрыть и продолжить установку?', mbInformation, mb_YesNo) = idYes then
    begin
      KillTask('Compil32.exe');
      Result := True;
    end else
      Exit;
  end;
  Result := True;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
    if RunTaskU('Compil32.exe', False) then
    begin
    // прячем форму
      UninstallProgressForm.Hide;
      if MsgBox('Программа Compil32.exe используется. Закрыть и продолжить удаление?', mbConfirmation, MB_YESNO) = IDYES then
      begin
        KillTaskU('Compil32.exe');
        UnloadDll(ExpandConstant('{app}\ISTask.dll'));
    // показываем форму
        UninstallProgressForm.Show;
      end
      else
      begin
        MsgBox('Завершите работу Compil32.exe, затем снова запустите программу удаления.', mbInformation, MB_OK);
        UnloadDll(ExpandConstant('{app}\ISTask.dll'));
        Abort;
      end;
    end;
end;
[/SOURCE][/SPOILER] Задачка из разряда на сообразительность :)
 

Adil

Старожил
Всем Добрый день.
Помогите можете дать пример скрипта для создания 1 кнопки в botva2+b2p, т.е что надо прописывать
в var, initialyze wizzard, curstepchanged, inner и outterbotebook спрятаны
Заранее спс
[MOD="Gnom"]Качай модуль, там есть все примеры, адаптированные под b2p[/MOD].

Добавлено через 19 минут
Качай модуль, там есть все примеры, адаптированные под b2p.[/QUOTE]

Gnom спасибо понял

Добавлено через 1 час 42 минуты
Gnom спасибо
но тама я ничего не понял
 
Последнее редактирование модератором:

Devils Night

Ветеран
Задачка из разряда на сообразительность :)
Спасибо!
Вот блин, тоже самое!

Просто надеялся что можно что-то лишнее из этого удалить
[SOURCE="iss"]
function KillTask1(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';
function RunTask1(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';

function KillTask2(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';
function RunTask2(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';[/SOURCE]
, уже много вариантов перепробовал и нифига.

Получается только так
[SOURCE="iss"]
#define AppName "My Program"

#define InstallKill
#define InstallKill_1
#define InstallKill_2

#define UnInstallKill
#define UnInstallKill_1
#define UnInstallKill_2
[Setup]
AppName={#AppName}
AppVerName={#AppName}
DefaultDirName={pf}\{#AppName}
DefaultGroupName={#AppName}

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

[Messages]
rus.SetupWindowTitle={#AppName}

[Icons]
Name: "{group}\{cm:UninstallProgram,{#AppName}}"; Filename: "{uninstallexe}"




[Files]
Source: compiler:Dll Pack\ISTask.dll; DestDir: {app}; Flags: dontcopy
Source: compiler:Dll Pack\ISTask.dll; DestDir: {app}; Flags: ignoreversion

Код:
#ifdef InstallKill
    #ifdef InstallKill_1
function KillTask1(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';
function RunTask1(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';
    #endif

    #ifdef InstallKill_2
function KillTask2(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';
function RunTask2(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';
    #endif
#endif

#ifdef InstallKill
function InitializeSetup(): Boolean;
begin
    #ifdef InstallKill_1
  If RunTask1('Programm1.exe', false) then
    begin
      if MsgBox('Программа Programm1 используется. Закрыть и продолжить установку?', mbInformation, mb_YesNo) = idYes then
        begin
          KillTask1('Programm1.exe');
          Result:= True;
        end else
          Exit;
    end;
Result:=True;
    #endif

    #ifdef InstallKill_2
  If RunTask2('Programm2.exe', false) then
    begin
      if MsgBox('Программа Programm2 используется. Закрыть и продолжить установку?', mbInformation, mb_YesNo) = idYes then
        begin
          KillTask2('Programm2.exe');
          Result:= True;
        end else
          Exit;
    end;
Result:=True;
end;
    #endif
#endif


#ifdef UnInstallKill
    #ifdef UnInstallKill_1
function RunTask3(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';
function KillTask3(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';
    #endif

    #ifdef UnInstallKill_2
function RunTask4(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';
function KillTask4(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';
    #endif
#endif

#ifdef UnInstallKill
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
    #ifdef UnInstallKill_1
  if CurUninstallStep = usUninstall then
  if RunTask3('Programm1.exe', False) then
    begin
      // прячем форму
      UninstallProgressForm.Visible:= False;
      if MsgBox('Программа Programm1.exe используется. Закрыть и продолжить удаление?', mbConfirmation, MB_YESNO) = IDYES then
        begin
          KillTask3('Programm1.exe');
          UnloadDll(ExpandConstant('{app}\ISTask.dll'));
          // показываем форму
          UninstallProgressForm.Visible:= True;
        end
      else
        begin
          MsgBox('Завершите работу Programm1.exe, затем снова запустите программу удаления.', mbInformation, MB_OK);
          UnloadDll(ExpandConstant('{app}\ISTask.dll'));
          Abort;
        end;
    #endif
    end;
    #ifdef UnInstallKill_2
  if CurUninstallStep = usUninstall then
      if RunTask4('Programm2.exe', False) then
    begin
      // прячем форму
      UninstallProgressForm.Visible:= False;
      if MsgBox('Программа Programm2.exe используется. Закрыть и продолжить удаление?', mbConfirmation, MB_YESNO) = IDYES then
        begin
          KillTask4('Programm2.exe');
          UnloadDll(ExpandConstant('{app}\ISTask.dll'));
          // показываем форму
          UninstallProgressForm.Visible:= True;
        end
      else
        begin
          MsgBox('Завершите работу Programm2.exe, затем снова запустите программу удаления.', mbInformation, MB_OK);
          UnloadDll(ExpandConstant('{app}\ISTask.dll'));
          Abort;
        end;
    end;
    #endif
end;
#endif
[/SOURCE][/SPOILER] и больше никак :(.
 
Последнее редактирование:

LexBell

Борода
Супер модератор
Для деинсталляции нужно вызывать из app
KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';
и обрати внимание :
На работе в анси не должно сказаться, а на юникоде работает только с типом AnsiString а не String, поскольку в юникоде String равен WideString а на анси может быть равен и String и AnsiString. В частности - путь к файлам обычно идет в типах AnsiString и PAnsiChar.
Получается только так
Я свой вариант проверил, прежде чем выкладывать :)
 
Последнее редактирование:

Devils Night

Ветеран
Я свой вариант проверил, прежде чем выкладывать :)
Ну это я понял. Просто хотел немного скрипт укоротить, т.к на мой взгяд
[SOURCE="iss"]function KillTask1(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';[/SOURCE]
и
[SOURCE="iss"]function KillTask1(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';[/SOURCE]
являются дубликатами, но опять же, подозреваю что без них никак т.к от них могут зависеть другие функции без чего и происходят ошибки, если так, то пусть так и останется.

А вот главный вопрос который покоя не даёт:
Идёт деинсталяция, допустим процесс не запущен, собственно и завершать то не чего, но проблема вот в чём, после деинсталирования в папке остаётся библиотека ISTask.dll, что в итоге папка не удаляется, пробовал
[SOURCE="iss"][UninstallDelete]
Name: {app}; Type: filesandordirs.[/SOURCE] и всё равно папка с библиотекой остаётся.
А если процесс запущен, то библиотека удаляется.
 

LexBell

Борода
Супер модератор
Это потому, что ты обращаешься к ней. можно попробовать перенести вызов из app в tmp и в начале деинсталляции копировать ее туда.
являются дубликатами
Вовсе нет. просто инно не хочет делать одинаковые обращения в них, изза чего приходится делать отдельно обращение при установке и отдельное при удалении.
Код:
[Files]
Source: compiler:Dll Pack\ISTask.dll; DestDir: {app}; Flags: dontcopy
Source: compiler:Dll Pack\ISTask.dll; DestDir: {app}; Flags: ignoreversion
- не очень понятна логика...
разберем:

Код:
исходный файл: Source: compiler:Dll Pack\ISTask.dll; 
 папка назначения: DestDir: {app};   
Не использовать папку назначения(файл не будет распакован) Flags: dontcopy
 

Devils Night

Ветеран
Это потому, что ты обращаешься к ней. можно попробовать перенести вызов из app в tmp и в начале деинсталляции копировать ее туда.
Т.е в процессе деинсталяции файл ISTask.dll копируестя из папки app в tmp и от туда отрабатывается, так? Это как, пример можно?

Вовсе нет. просто инно не хочет делать одинаковые обращения в них, изза чего приходится делать отдельно обращение при установке и отдельное при удалении.
Всё, понял.
 

SaintPaul

Участник
Как можно решить такую проблему
Посмотреть вложение 176
Чтобы ребята смогли тебе помочь, то укажи, сначала, действия, которые приводят к этой ошибке, например:
-"При добавлении такой-то строки у меня вылетает такая-то ошибка"
-"Я запускаю setup.exe и наблюдаю такую ошибку"
-"Я что-нибудь делаю и получаю такую ошибку"

Понимаешь, решение этой ошибки может варьироваться в большом диапазоне, скажем от установки дополнительных библиотек MV C++, до проблемы в прописанном dll... Поэтому учимся формулировать вопросы и давать минимальную информацию по возникших проблемах...
 

Adil

Старожил
Спс SaintPaul проблему решил
оказывается для кнопок нужен callbackctrl.dll
а я его забыл

Теперь назрела след. проблема
Я юзаю ISDone0.6 final
На странице установки (wpinstalling)
отображается и кнопка "отмена" и кнопка "отмена распаковки"

Как с этим быть?

Ах да, Заранее Спасибо:)
 
Последнее редактирование:

LexBell

Борода
Супер модератор
Это как, пример можно?
[SOURCE="iss"]#define AppName "My Program"

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

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

[Messages]
rus.SetupWindowTitle={#AppName}

[Icons]
Name: "{group}\{cm:UninstallProgram,{#AppName}}"; Filename: "{uninstallexe}"

[Files]
Source: compiler:Dll Pack\ISTask.dll; DestDir: {app}

Код:
function RunTask(FileName: AnsiString; bFullpath: Boolean): Boolean;
  external 'RunTask@files:ISTask.dll stdcall';
function KillTask(ExeFileName: AnsiString): Integer;
  external 'KillTask@files:ISTask.dll stdcall';

function RunTaskU(FileName: AnsiString; bFullpath: Boolean): Boolean;
  external 'RunTask@{tmp}\ISTask.dll stdcall delayload uninstallonly';
function KillTaskU(ExeFileName: AnsiString): Integer;
  external 'KillTask@{tmp}\ISTask.dll stdcall delayload uninstallonly';

//**************************************************//

function InitializeSetup(): Boolean;
begin
  if RunTask('Compil32.exe', False) then
  begin
    if MsgBox('Программа Compil32.exe используется. Закрыть и продолжить установку?', mbInformation, mb_YesNo) = idYes then
    begin
      KillTask('Compil32.exe');
      Result := True;
    end else
      Exit;
  end;
  Result := True;
end;

function InitializeUninstall(): Boolean;
begin
  if not FileExists(ExpandConstant('{tmp}\ISTask.dll')) then
  FileCopy(ExpandConstant('{app}\ISTask.dll'),ExpandConstant('{tmp}\ISTask.dll'),False);
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
    if RunTaskU('Compil32.exe', False) then
    begin
    // прячем форму
      UninstallProgressForm.Hide;
      if MsgBox('Программа Compil32.exe используется. Закрыть и продолжить удаление?', mbConfirmation, MB_YESNO) = IDYES then
      begin
        KillTaskU('Compil32.exe');
        UnloadDll(ExpandConstant('{tmp}\ISTask.dll'));
    // показываем форму
        UninstallProgressForm.Show;
      end
      else
      begin
        MsgBox('Завершите работу Compil32.exe, затем снова запустите программу удаления.', mbInformation, MB_OK);
        UnloadDll(ExpandConstant('{tmp}\ISTask.dll'));
        Abort;
      end;
    end;
end;[/SOURCE][/SPOILER] Так у меня нормально отработало. 
[quote="nazbek010, post: 9747"]Как с этим быть?[/quote]
Эммм... Может, скрыть одну из кнопок? Как это сделано в изначальном примере к библиотеке. И не нужно спрашивать, где его взять.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху