PDA

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 7]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 [107] 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

saurn
09-12-2014, 13:58
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;

svs23
09-12-2014, 14:28
Тогда предложите пользователю установку notepad++, а он уже сам решит, нужен он ему или нет. Да и, на мой взгляд, совершенно не обязательно, чтобы файл открывался именно notepad++. Существует множество других редакторов. Я, например, пользуюсь, другой программой. Так что лучше будет устанавливать по выбору, чтобы потом уши не горели)). »
сделать предложение на установку notepad++ не проблема
просто есть люди для которых огромная проблема "Открыть с помощью" и найти там "подходящую" программу

txt они еще откроют, т.к. в системе имеется текстовый редактор, которым не рекомендуют править файлы настроек модов, а вот что делать с xml для них уже проблема (проверено на личном опыте, ТАКИЕ люди есть).....

svs23
09-12-2014, 15:04
как добавить пустую строку в лог после окончания установки? чтобы видеть моменты между установками?
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.

saurn
09-12-2014, 15:22
Нет, я использовал 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} нету никакого диалогового окна т.е приложение запущено, а окна или хотя бы прогресбара нет особенно если еще большой объем файлов. как избавиться

saurn
10-12-2014, 21:29
хм.. у меня 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?

Irenis
11-12-2014, 00:52
Здравствуйте :) Может кто подскажет, как создать ярлык в формате exe, чтобы этот ярлык просто открывал страницу в браузере? Нужен ярлык именно в формате exe, чтобы его можно было при создании скрипта назначить главным исполняемым файлом exe.

Ну или наоборот. Если я создам обычный ярлык со ссылкой, как тогда отредактировать скрипт, чтобы установщик автоматически выводил этот ярлык на рабочий стол (т.е. приложение установилось и на рабочем столе появился мой ярлык со ссылкой)? Спасибо :)

saurn
11-12-2014, 01:06
Если я создам обычный ярлык со ссылкой, как тогда отредактировать скрипт, чтобы установщик автоматически выводил этот ярлык на рабочий стол (т.е. приложение установилось и на рабочем столе появился мой ярлык со ссылкой)? »
[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
Добрый день,а кто нибудь знает как написать так,чтобы файл активх скачивался с сервера,а то постоянно новый вкладывать в инсталлятор неудобно????

saurn
11-12-2014, 15:07
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