Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 7]
svs23
Тогда предложите пользователю установку notepad++, а он уже сам решит, нужен он ему или нет. Да и, на мой взгляд, совершенно не обязательно, чтобы файл открывался именно notepad++. Существует множество других редакторов. Я, например, пользуюсь, другой программой. Так что лучше будет устанавливать по выбору, чтобы потом уши не горели)).
Dodakaedr
09-12-2014, 14:03
Процесс WorldOfTanks.exe, да пробовал, процесс не убивается ( »
Должен. Тестировал на Калькуляторе. DLL-ка думаю имеется.
не работает на Unicode версии »
работает
[Setup]
AppName=My Program
AppVerName=My Program ver.1.5
DefaultDirName={pf}\My Program
[Files]
Source: "compiler:Dll Pack\ISTask.dll"; DestDir: "{app}"
[Code]
function KillTask(ExeFileName: ansistring): Integer; external 'KillTask@files:ISTask.dll stdcall delayload setuponly';
function RunTask(FileName: ansistring; bFullpath: Boolean): Boolean; external 'RunTask@files:ISTask.dll stdcall delayload setuponly';
function KillTaskA(ExeFileName: ansistring): Integer; external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';
function RunTaskA(FileName: ansistring; bFullpath: Boolean): Boolean; external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';
function InitializeSetup(): Boolean;
begin
If RunTask('calc.exe', false) then begin
if MsgBox('Программа установки обнаружила, что программа Калькулятор запущена в данный момент.'#13#13'Закрыть программу и продолжить установку?', mbError, mb_YesNo) = idYes then begin
KillTask('calc.exe');
Result := True;
end else
Exit;
end;
Result := True;
end;
function InitializeUninstall(): Boolean;
begin
If RunTaskA('calc.exe', false) then begin
if MsgBox('Программа удаления обнаружила, что программа Калькулятор запущена в данный момент.'#13#13'Закрыть программу и продолжить установку?', mbError, mb_YesNo) = idYes then begin
KillTaskA('calc.exe');
Result := True;
end else
Exit;
end;
Result := True;
UnloadDLL(ExpandConstant('{app}\ISTask.dll'));
end;
Тогда предложите пользователю установку notepad++, а он уже сам решит, нужен он ему или нет. Да и, на мой взгляд, совершенно не обязательно, чтобы файл открывался именно notepad++. Существует множество других редакторов. Я, например, пользуюсь, другой программой. Так что лучше будет устанавливать по выбору, чтобы потом уши не горели)). »
сделать предложение на установку notepad++ не проблема
просто есть люди для которых огромная проблема "Открыть с помощью" и найти там "подходящую" программу
txt они еще откроют, т.к. в системе имеется текстовый редактор, которым не рекомендуют править файлы настроек модов, а вот что делать с xml для них уже проблема (проверено на личном опыте, ТАКИЕ люди есть).....
как добавить пустую строку в лог после окончания установки? чтобы видеть моменты между установками?
procedure ExtLog();
begin
SaveStringToFile(ExpandConstant('{app}\res_mods\SVS_mini_mod_pack_setup.log'), #13#10 + GetDateTimeString('dd/mm/yyyy hh:nn:ss', '-', ':') + ' - ' + ExpandConstant(CurrentFileName), True);
end;
Dodakaedr
09-12-2014, 15:09
Потому что на деле используете ISTaskU.dll. Обычная же в юникоде не работает »
Нет, я использовал ISTask.dll.
Нет, я использовал ISTask.dll. »
Действительно, работает. Но игнорирует некоторые процессы. В 64-х разрядной среде в упор не видит, к примеру, тот же запущенный калькулятор.
Kashtan007
09-12-2014, 17:52
saurn, хм.. у меня 64-х разрядная среда, и процесс закрывается (по примеру Dodakaedr).
Kashtan007
10-12-2014, 18:13
Dodakaedr, обнаружил проблему, когда нажимаю "Нет", то установка продолжается, и процесс не закрывается.
kotyarko@fb
10-12-2014, 19:21
когда нажимаю "Нет", то установка продолжается, и процесс не закрывается »
На нажатие "нет" можно повесить процедуру Abort. При этом не стоит забывать, что при аборте будет вызываться процедура DeinitializeSetup, и если в ней есть что-то связанное с визадом (например, WizardForm.Free), то программа будет ругаться. Это можно решить создав булевую переменную, и присваивать ей определённые значения, которые будут проверяться; и в зависимости от результата выполняться та же WizardForm.Free.
Это решение при нескольких функциях InitializeSetup, когда Result := False не решает.
habib2302
10-12-2014, 21:12
Доброе время суток. Есть один вопрос. Дело в том, что когда идет распаковка в {tmp} нету никакого диалогового окна т.е приложение запущено, а окна или хотя бы прогресбара нет особенно если еще большой объем файлов. как избавиться
хм.. у меня 64-х разрядная среда, и процесс закрывается »
То у моей системы глюки были.
обнаружил проблему, когда нажимаю "Нет", то установка продолжается, и процесс не закрывается. »
Да нет, работает, но, на всякий, альтернативный вариант:
function IsRunTask(): Boolean;
begin
Result := ( not RunTask( 'calc.exe', False ) );
if ( not Result ) then
if ( mrYes = MsgBox( 'Программа установки обнаружила, что программа Калькулятор запущена в данный момент.'#13#13'Закрыть программу и продолжить установку?', mbError, mb_YesNo ) ) then
Result := ( KillTask( 'calc.exe' ) <> 0 );
end;
function InitializeSetup(): Boolean;
begin
Result := IsRunTask();
end;
Dodakaedr
10-12-2014, 21:41
обнаружил проблему, когда нажимаю "Нет", то установка продолжается, и процесс не закрывается. »
Какие еще задания выполняются у вас в InitializeSetup?
Здравствуйте :) Может кто подскажет, как создать ярлык в формате exe, чтобы этот ярлык просто открывал страницу в браузере? Нужен ярлык именно в формате exe, чтобы его можно было при создании скрипта назначить главным исполняемым файлом exe.
Ну или наоборот. Если я создам обычный ярлык со ссылкой, как тогда отредактировать скрипт, чтобы установщик автоматически выводил этот ярлык на рабочий стол (т.е. приложение установилось и на рабочем столе появился мой ярлык со ссылкой)? Спасибо :)
Если я создам обычный ярлык со ссылкой, как тогда отредактировать скрипт, чтобы установщик автоматически выводил этот ярлык на рабочий стол (т.е. приложение установилось и на рабочем столе появился мой ярлык со ссылкой)? »
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp
[INI]
Filename: {userdesktop}\Перейти на сайт.url; Section: InternetShortcut; Key: URL; String: http://forum.oszone.net;
[UninstallDelete]
Name: {userdesktop}\Перейти на сайт.url; Type: files;
icetanker
11-12-2014, 11:11
Добрый день,а кто нибудь знает как написать так,чтобы файл активх скачивался с сервера,а то постоянно новый вкладывать в инсталлятор неудобно????
icetanker,
#443 (http://forum.oszone.net/post-2149513-443.html), #1618 (http://forum.oszone.net/post-2267585-1618.html)
Пример из шапки Загрузка файла из Интернет (http://forum.oszone.net/post-2267694-1626.html)
InnoTools Downloader (http://www.sherlocksoftware.org/page.php?id=50)
Kashtan007
11-12-2014, 16:49
Какие еще задания выполняются у вас в InitializeSetup? »
Использование скина и автоопределение установки в реестре.
icetanker
11-12-2014, 16:58
icetanker,
#443, #1618
Пример из шапки Загрузка файла из Интернет
InnoTools Downloader »
а можно как нибудь сделать без прогресс бара,он скачал в определенную папку и после этого зарегистрировал ActiveX,просто не совсем понятно как там исправить,чтобы он скачал,а потом зарегистривовал????
Dodakaedr
11-12-2014, 17:36
Использование скина и автоопределение установки в реестре. »
Если проблема не решилась, то попробуйте таким способом:
function InitializeSetup1(): Boolean;
begin
If RunTask('calc.exe', false) then begin
if MsgBox('Программа установки обнаружила, что программа Калькулятор запущена в данный момент.'#13#13'Закрыть программу и продолжить установку?', mbError, mb_YesNo) = idYes then begin
KillTask('calc.exe');
Result := True;
end else
Exit;
end;
Result := True;
end;
function InitializeSetup2(): Boolean;
begin
ExtractTemporaryFile('{#SKinDll}');
ExtractTemporaryFile('{#SKin}');
LoadSkin(ExpandConstant('{tmp}\{#SKin}'), '{#SKinIni}');
Result:=True;
end;
function InitializeSetup3(): Boolean;
begin
Result:= True;
if not RegKeyExists(HKLM, 'SOFTWARE\Company\ProgramNamePro') then
begin
if not RegKeyExists(HKLM, 'SOFTWARE\Company\ProgramNameLight') then
begin
MsgBox('Программа не найдена!', mberror, mb_ok);
Result:=False;
exit;
end
end
end;
function InitializeSetup(): Boolean;
begin
Result := InitializeSetup1(); if not Result then exit;
Result := InitializeSetup2(); if not Result then exit;
Result := InitializeSetup3(); if not Result then exit;
end;
Kashtan007
11-12-2014, 17:52
Dodakaedr, ругается на строку WizardForm.Free;
procedure DeinitializeSetup();
begin
RemoveFontResource(ExpandConstant('{tmp}\{#Font}'), FR_PRIVATE, 0);
WizardForm.Free;
UnloadSkin;
end;
Это при нажатии "Нет".
P.S. Вот ошибка http://s019.radikal.ru/i619/1412/60/5a6b30b1c447.png
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC