Скрипты Inno Setup. Помощь и советы [часть 8]
-
Uragan66
Re: Скрипты Inno Setup. Помощь и советы [часть 8]
Всем доброго времени суток ! Может кто поможет реализовать такую идею : Нужно до страницы выбора папки назначения вставить страницу с выбором типа установки :
"Установка" или "Распаковка" (они должны быть взаимоисключающими т.е. с флагом exclusive ).
Если выбрана "Установка" то дальше установка должна идти как обычно (выбор папки, выбор компонентов и т.д. )
При выборе "Распаковка" должна быть страница выбора папки назначения и дальше просто распаковка в указанную пользователем папку. Можно это решить ?
"Установка" или "Распаковка" (они должны быть взаимоисключающими т.е. с флагом exclusive ).
Если выбрана "Установка" то дальше установка должна идти как обычно (выбор папки, выбор компонентов и т.д. )
При выборе "Распаковка" должна быть страница выбора папки назначения и дальше просто распаковка в указанную пользователем папку. Можно это решить ?
-
palsn2000
Re: Скрипты Inno Setup. Помощь и советы [часть 8]
Доброе время суток. У меня возникли трудности с закрытием процесса. Нашел пример и на его основе попытался изобразить для своего случая:
Код:
В итоге ничего не происходит - процесс как работал, так и продолжает работать.
На всякий случай:
скриншот
[spoiler]
[/spoiler]
Что у меня в записи с taskkil не так?
Заранее спасибо.
________
P.S. И кстати ещё один момент - как видно на скриншоте этих процессов FmsProxy.exe может быть несколько - может из-за этого не работает, и тогда как убить их все разом?
Код:
Код: Выделить всё
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]
palsn2000,
На этапе установки убить процесс
[spoiler]Код: [/spoiler]
На этапе деинсталляции убить процесс
[spoiler]Код: [/spoiler]
На этапе установки убить процесс
[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]
vadjliss,
[Setup]
;AllowNoIcons=yes не создавать папку в меню пуск
Вы закомментировали?
Посмотрите, у вас в коде нет этого.
var
No_Icons_CheckBox: TNewCheckBox;
[Setup]
;AllowNoIcons=yes не создавать папку в меню пуск
Вы закомментировали?
Посмотрите, у вас в коде нет этого.
var
No_Icons_CheckBox: TNewCheckBox;
-
palsn2000
Re: Скрипты Inno Setup. Помощь и советы [часть 8]
Dodakaedr, Большое спасибо, а то я всю голову изломал, что не так. Всё из-за моей невнимательности - всю жизнь мне мешает: пропущу какую-нибудь мелочь, а потом сам над собой смеюсь.
-
nik1967
Re: Скрипты Inno Setup. Помощь и советы [часть 8]
vadjliss, Удалите:
Код:
или замените yes на no:
Код:
Код:
Код: Выделить всё
AllowNoIcons=yesили замените yes на no:
Код:
Код: Выделить всё
AllowNoIcons=no-
Uragan66
Re: Скрипты Inno Setup. Помощь и советы [часть 8]
nik1967, спасибо большое ! Ваш скрипт отлично подходит. А как можно сделать чтобы конечные папки DestDir у распаковки и установки были разные ? Просто для установки вложенность папок большая и для распаковки это в конечном итоге не совсем удобно. Спасибо за помощь.
-
Dodakaedr
Re: Скрипты Inno Setup. Помощь и советы [часть 8]
нужна помощь
как сделать
чтобы перед установкой удалило старую версию программы
потом установила новую версию
с меня плюсик
как сделать
чтобы перед установкой удалило старую версию программы
потом установила новую версию
с меня плюсик
-
Uragan66
Re: Скрипты Inno Setup. Помощь и советы [часть 8]
Цитата vadjliss:
перед установкой удалило старую версию программы
Как-то так:
Скрипт
[spoiler]Код: [/spoiler]
перед установкой удалило старую версию программы
Скрипты 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]
Цитата 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;
что то не выходит
не отображаются надписи
ред установкой необходимо удалить предыдущую версию приложения. Удалить?
Удаление предыдущей версии приложения завершилось неудачей.
#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]
что то не выходит
не отображаются надписи
ред установкой необходимо удалить предыдущую версию приложения. Удалить?
Удаление предыдущей версии приложения завершилось неудачей.