Скрипты Inno Setup. Помощь и советы [часть 8]

Ответить
 • Просмотры: 37
Аватара пользователя
Uragan66

Re: Скрипты Inno Setup. Помощь и советы [часть 8]

Сообщение Uragan66 »

Всем доброго времени суток ! Может кто поможет реализовать такую идею : Нужно до страницы выбора папки назначения вставить страницу с выбором типа установки :

"Установка" или "Распаковка" (они должны быть взаимоисключающими т.е. с флагом exclusive ).

Если выбрана "Установка" то дальше установка должна идти как обычно (выбор папки, выбор компонентов и т.д. )

При выборе "Распаковка" должна быть страница выбора папки назначения и дальше просто распаковка в указанную пользователем папку. Можно это решить ?
Аватара пользователя
palsn2000

Re: Скрипты Inno Setup. Помощь и советы [часть 8]

Сообщение palsn2000 »

Доброе время суток. У меня возникли трудности с закрытием процесса. Нашел пример и на его основе попытался изобразить для своего случая:



Код:

Код: Выделить всё

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
  begin
    if CurUninstallStep=usUninstall then
      begin
      Exec('taskkil','/f /im FmsProxy.exe', '', SW_Hide, ewWaitUntilTerminated, ErrorCode);
      end;
  end;

В итоге ничего не происходит - процесс как работал, так и продолжает работать.



На всякий случай:


скриншот

[spoiler]Изображение[/spoiler]






Что у меня в записи с taskkil не так?

Заранее спасибо.

________

P.S. И кстати ещё один момент - как видно на скриншоте этих процессов FmsProxy.exe может быть несколько - может из-за этого не работает, и тогда как убить их все разом?
Аватара пользователя
habib2302

Re: Скрипты Inno Setup. Помощь и советы [часть 8]

Сообщение habib2302 »

palsn2000,



На этапе установки убить процесс

[spoiler]Код:
[/spoiler]

Код: Выделить всё

[Files]
Source: ISTask.dll; DestDir: {app}; Flags: dontcopy
[Code]
function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';
//**************************************************//
function InitializeSetup(): Boolean;
begin
  If RunTask('winamp.exe', false) then
    begin
      if MsgBox('Программа Winamp используется. Закрыть и продолжить установку?', mbInformation, mb_YesNo) = idYes then
        begin
          KillTask('winamp.exe');
          Result:= True;
        end else
          Exit;
    end;
Result:=True;
end;









На этапе деинсталляции убить процесс

[spoiler]Код:
[/spoiler]

Код: Выделить всё

[Files]
Source: ISTask.dll; DestDir: {app}; Flags: ignoreversion
[Code]
// функции используемые при деинсталляции
// RunTask@{app}\ISTask.dll - название функции (в данном случае, если программа работает)
// и путь dll'ки где она расположена...
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';
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
  if RunTask('winamp.exe', False) then
    begin
      // прячем форму
      UninstallProgressForm.Visible:= False;
      if MsgBox('Программа winamp.exe используется. Закрыть и продолжить удаление?', mbConfirmation, MB_YESNO) = IDYES then
        begin
          KillTask('winamp.exe');
          UnloadDll(ExpandConstant('{app}\ISTask.dll'));
          // показываем форму
          UninstallProgressForm.Visible:= True;
        end
      else
        begin
          MsgBox('Завершите работу winamp.exe, затем снова запустите программу удаления.', mbInformation, MB_OK);
          UnloadDll(ExpandConstant('{app}\ISTask.dll'));
          Abort;
        end;
    end;
end;
Аватара пользователя
Dodakaedr

Re: Скрипты Inno Setup. Помощь и советы [часть 8]

Сообщение Dodakaedr »

vadjliss,

[Setup]

;AllowNoIcons=yes не создавать папку в меню пуск



Вы закомментировали?



Посмотрите, у вас в коде нет этого.

var

No_Icons_CheckBox: TNewCheckBox;
Аватара пользователя
palsn2000

Re: Скрипты Inno Setup. Помощь и советы [часть 8]

Сообщение palsn2000 »

Dodakaedr, Большое спасибо, а то я всю голову изломал, что не так. Всё из-за моей невнимательности - всю жизнь мне мешает: пропущу какую-нибудь мелочь, а потом сам над собой смеюсь.
Аватара пользователя
nik1967

Re: Скрипты Inno Setup. Помощь и советы [часть 8]

Сообщение nik1967 »

vadjliss, Удалите:



Код:

Код: Выделить всё

AllowNoIcons=yes

или замените yes на no:



Код:

Код: Выделить всё

AllowNoIcons=no
Аватара пользователя
Uragan66

Re: Скрипты Inno Setup. Помощь и советы [часть 8]

Сообщение Uragan66 »

nik1967, спасибо большое ! Ваш скрипт отлично подходит. А как можно сделать чтобы конечные папки DestDir у распаковки и установки были разные ? Просто для установки вложенность папок большая и для распаковки это в конечном итоге не совсем удобно. Спасибо за помощь.
Аватара пользователя
Dodakaedr

Re: Скрипты Inno Setup. Помощь и советы [часть 8]

Сообщение Dodakaedr »

нужна помощь

как сделать

чтобы перед установкой удалило старую версию программы

потом установила новую версию



с меня плюсик
Аватара пользователя
Uragan66

Re: Скрипты Inno Setup. Помощь и советы [часть 8]

Сообщение Uragan66 »

Цитата vadjliss:



перед установкой удалило старую версию программы
Скрипты Inno Setup. Помощь и советы [часть 8]




Как-то так:



Скрипт

[spoiler]Код:
[/spoiler]

Код: Выделить всё

#define gameid "{11110000-2222-3333-4444-555500000000}"
#define appname "My Program"
#define appversion "1.0"
[Setup]
AppId={{#gameid}
AppName={#appname}
AppVerName={#appname}
AppVersion={#appversion}
DefaultDirName={pf}\{#appname}
OutputDir=.
OutputBaseFilename=setup
Compression=lzma2/ultra64
SolidCompression=true
PrivilegesRequired=poweruser
[Languages]
Name: "rus"; MessagesFile: "compiler:Languages\Russian.isl";
[CustomMessages]
rus.DeleteInfo1=Перед установкой необходимо удалить предыдущую версию приложения. Удалить?
rus.DeleteInfo2=Удаление предыдущей версии  приложения завершилось неудачей.
[Code_]
function UninstallMyApp(): Boolean;
var
  Buff: String;
  i: Integer;
begin
  Result:= not RegQueryStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#gameid}_is1', 'UninstallString', Buff);
  if not Result then Result:= not FileExists(RemoveQuotes(Buff));
  if not Result then
  if MsgBox(ExpandConstant('{cm:DeleteInfo1}'), 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\{#gameid}_is1', 'UninstallString', Buff );
  if not Result then MsgBox(ExpandConstant('{cm:DeleteInfo2}'), mbError, MB_OK);
  end;
end;
function InitializeSetup(): Boolean;
begin
  Result:= UninstallMyApp();
end;
Аватара пользователя
nik1967

Re: Скрипты Inno Setup. Помощь и советы [часть 8]

Сообщение nik1967 »

Цитата Sotonisto:



#define gameid "{11110000-2222-3333-4444-555500000000}"

#define appname "My Program"

#define appversion "1.0"

[Setup]

AppId={{#gameid}

AppName={#appname}

AppVerName={#appname}

AppVersion={#appversion}

DefaultDirName={pf}\{#appname}

OutputDir=.

OutputBaseFilename=setup

Compression=lzma2/ultra64

SolidCompression=true

PrivilegesRequired=poweruser

[Languages]

Name: "rus"; MessagesFile: "compiler:Languages\Russian.isl";

[CustomMessages]

rus.DeleteInfo1=Перед установкой необходимо удалить предыдущую версию приложения. Удалить?

rus.DeleteInfo2=Удаление предыдущей версии приложения завершилось неудачей.

[Code_]

function UninstallMyApp(): Boolean;

var

Buff: String;

i: Integer;

begin

Result:= not RegQueryStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#gameid}_is1', 'UninstallString', Buff);

if not Result then Result:= not FileExists(RemoveQuotes(Buff));

if not Result then

if MsgBox(ExpandConstant('{cm:DeleteInfo1}'), 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\{#gameid}_is1', 'UninstallString', Buff );

if not Result then MsgBox(ExpandConstant('{cm:DeleteInfo2}'), mbError, MB_OK);

end;

end;

function InitializeSetup(): Boolean;

begin

Result:= UninstallMyApp();

end;
Скрипты Inno Setup. Помощь и советы [часть 8]




что то не выходит

не отображаются надписи

ред установкой необходимо удалить предыдущую версию приложения. Удалить?

Удаление предыдущей версии приложения завершилось неудачей.
Ответить

Вернуться в «Автоматическая установка приложений»