Войти

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


Страниц : 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

kenny_danger
21-11-2011, 22:12
извините за глупый вопрос
но как сделать так чтобы после установи инсталятор предложил перейти на сайт автора
всю голову уже сломал

Belial4444
21-11-2011, 22:20
kenny_danger, прописываешь в секцию [Run]
Filename: "http://www.oszone.net"; Description: "Форум для продвинутых"; Flags: postinstall shellexec skipifsilent
R.i.m.s.k.y, что мне сделать тогда предлагаешь?:) Да кстати есть ещё проблемка, при указании директории установки к ней дописывается последняя папка, приведу пример, по дефолту папка установки C:\Valve\Left4Dead2\ , хочу установить в C:\Valve2\Left4Dead2\ выбираю эту папку а у меня пишется C:\Valve2\Left4Dead2\Left4Dead2 подскажите пожалуйста как избавиться от этого бага, в NSIS такой баг лечился добавлением "\" в конце дефолтной папки, но я я так и делал а баг все равно возникает

R.i.m.s.k.y.
21-11-2011, 22:26
Belial4444, про исдоне я тебе ничего конкретно не скажу, извини
если мое предположение верно я бы попробовал функции распаковки не раскидывать по двум CurStep'ам, а в одной CurStep=ssInstall собрать

а про дубли в пути если это стандартными средствами - попробуй в секции Setup у параметра DefaultDirName={pf}\Left4Dead2 удали хвост Left4Dead2
[Setup]
DefaultDirName={pf}\

в инно писать научился, а разделять предложения знаками пунктуации - нет :read:

Belial4444
21-11-2011, 22:28
R.i.m.s.k.y, попробовал сейчас как ты сказал, все так же, теперь приписывает в конце Program Files :)

valyok666
21-11-2011, 22:30
Belial4444, DefaultDirName=\valve\{#MyAppName}

R.i.m.s.k.y.
21-11-2011, 22:34
Belial4444,
[Setup]
DefaultDirName=\
или вообще параметр оставь пустым

Belial4444
21-11-2011, 22:34
valyok666, попробовал баг остался)
#define MyAppName "Left4Dead2"
[Setup]
DefaultDirName={pf}\{#MyAppName}
R.i.m.s.k.y, ок сейчас попробую..
Попробовал DefaultDirName=\ кгдазаупскаю путь по дефолту ставится C:\, а когда любую папку выбираю к ней дописывается \Новая папка 0_0 Сейчас просто пустой попробую..
С пустым параметром путь по умолчанию пуст, но все равно приписывается \новая папка , что делать?))

valyok666
21-11-2011, 22:36
Belial4444, замени его DefaultDirName=\valve\{#MyAppName}
{pf} убери

R.i.m.s.k.y.
21-11-2011, 22:37
Belial4444, в общем истина где-то рядом
комбинируй :)

valyok666
21-11-2011, 22:37
Belial4444, всё понял сам описался)

R.i.m.s.k.y.
21-11-2011, 22:43
у меня вопрос не такой простой как с папками
подскажите, пожалуйста, как узнать запущено ли программа у пользователя или нет не используя WMI
вопрос со звездочкой - исдоне для этого использует WMI или нет?
я бы и сам попробовал, но не могу воспроизвести проблему с крашащимися WMI-запросами инсталлера, у меня все робит
Ошибка инсталлера - SWbemSecurity: Generic Failure

kenny_danger
21-11-2011, 22:55
Belial4444,
[Setup]
AppendDefaultDirName=False

Belial4444
21-11-2011, 22:57
kenny_danger,спасибо большое! Ты меня просто спас :) Может ты знаешь ответ и на мой вопрос про исдан?

kenny_danger
21-11-2011, 23:02
Belial4444, к сожалению не знаю)

Belial4444
21-11-2011, 23:10
Ладно спасибо), если разберусь напишу как)

BigBoo
22-11-2011, 13:24
Можно ли и что прописать в скрипте, чтобы у скомпилированного приложения в папке Output была не стандартная, а нужная мне иконка, к примеру иконка exe-файла из {app}?

nik1967
22-11-2011, 13:59
BigBoo,
[Setup]
SetupIconFile=путь до файла .ico

El Sanchez
22-11-2011, 14:04
как узнать запущено ли программа у пользователя или нет не используя WMI »
R.i.m.s.k.y.,

[Code]
const
TH32CS_SNAPPROCESS = $2;
INVALID_HANDLE_VALUE = -1;

type
TPROCESSENTRY32 = record
dwSize, cntUsage, th32ProcessID: DWORD;
th32DefaultHeapID: Longint;
th32ModuleID, cntThreads, th32ParentProcessID: DWORD;
pcPriClassBase: Longint;
dwFlags: DWORD;
szExeFile: array [0..259] of char;
end;

function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): THandle; external 'CreateToolhelp32Snapshot@kernel32.dll stdcall';
function Process32First(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32First@kernel32.dll stdcall';
function Process32Next(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32Next@kernel32.dll stdcall';
function CloseHandle(hObject: THandle): Boolean; external 'CloseHandle@kernel32.dll stdcall';


function IsProcessRunning(FileName: String): Boolean; //FileName - имя exe-файла процесса
var
hProcessSnap: THandle;
pe32: TPROCESSENTRY32;
szExeFile: String;
begin
hProcessSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if hProcessSnap = INVALID_HANDLE_VALUE then Exit;
pe32.dwSize := sizeof(pe32);
if not Process32First(hProcessSnap, pe32) then Exit;
while not Result and Process32Next(hProcessSnap, pe32) do
begin
szExeFile := '';
while not (pe32.szExeFile[Length(szExeFile)] = #0) do szExeFile := szExeFile + pe32.szExeFile[Length(szExeFile)];
Result := LowerCase(FileName) = LowerCase(szExeFile);
end;
CloseHandle(hProcessSnap);
end;

procedure InitializeWizard();
begin
// запущен ли калькулятор
if IsProcessRunning('calc.exe') then
MsgBox('yes', mbInformation, MB_OK)
else
MsgBox('no', mbError, MB_OK);
end;



но не могу воспроизвести проблему с крашащимися WMI-запросами инсталлера, у меня все робит
Ошибка инсталлера - SWbemSecurity: Generic Failure »
R.i.m.s.k.y., пример можно?

Можно ли и что прописать в скрипте, чтобы у скомпилированного приложения в папке Output была не стандартная, а нужная мне иконка, к примеру иконка exe-файла из {app}? »
BigBoo, иконку придется выдирать самому из файла и использовать с директивой SetupIconFile секции Setup.

nik1967
22-11-2011, 14:09
BigBoo, иконку придется выдирать самому из файла и использовать с директивой SetupIconFile секции Setup. »А я не то же самое написал?

R.i.m.s.k.y.
22-11-2011, 14:12
R.i.m.s.k.y., пример можно? »
вот тут ветка (http://www.svp-team.com/forum/viewtopic.php?id=412)
Куски скрипта

function IsProcessRunning(FileName: String): Boolean;
var
objSWbemLocator, objSWbemServices: Variant;
begin
try
objSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
except
ShowExceptionMessage;
Exit;
end;
objSWbemServices := objSWbemLocator.ConnectServer();
objSWbemServices.Security_.ImpersonationLevel := 3;
Result := (objSWbemServices.ExecQuery('SELECT * FROM Win32_Process WHERE Name="' + FileName + '"').Count > 0);
end;


Function InitializeSetup: Boolean;
Begin
...
if IsProcessRunning('mpc-hc.exe') then s_apprun := s_apprun + #13#10 + '- Media Player Classic Home Cinema'; //формируется строка с перечислением приложений которые надо закрыть
...


Спасибо!




© OSzone.net 2001-2012