Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 4]
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
Ладно спасибо), если разберусь напишу как)
Можно ли и что прописать в скрипте, чтобы у скомпилированного приложения в папке Output была не стандартная, а нужная мне иконка, к примеру иконка exe-файла из {app}?
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.
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.