Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.216.94.152] |
|
Сообщ.
#1
,
|
|
|
Помогите пожалуйста!
Никак не могу решить проблемму. (Inno Setup 5.1.12) [Run] Filename: "{pf}\nnCron\Add\nncron191.exe"; Parameters: "/S /D={pf}\nnCron" Filename: "{cmd}"; Parameters: "/c net stop nncron"; Flags: runhidden Filename: "{pf}\nnCron\Add\Setup.cmd"; Flags: runhidden Спасибо. |
Сообщ.
#2
,
|
|
|
Сделай запуск через секцию [Code].
|
Сообщ.
#3
,
|
|
|
Если бы я мог сделать запуск через секцию [Code], я бы не стал задавать этот вопрос.
|
Сообщ.
#4
,
|
|
|
procedure CurPageChanged(CurPageID: Integer); var ResultCode: Integer; begin if CurPageID=wpInfoAfter then begin if Exec(ExpandConstant('{pf}\nnCron\Add\nncron191.exe'), ExpandConstant('/S /D={pf}\nnCron'), '', SW_SHOW, ewWaitUntilIdle, ResultCode) then begin Exec(ExpandConstant('{cmd}'), '/c net stop nncron', '', SW_HIDE, ewNoWait, ResultCode); Exec(ExpandConstant('{pf}\nnCron\Add\Setup.cmd'), '', '', SW_HIDE, ewNoWait, ResultCode); end; end; end; Писал сразу сюда, так что проверь, особенно ewWaitUntilIdle. |
Сообщ.
#5
,
|
|
|
Удалил раздел [Run], вставил раздел [Code] с твои кодом, везде заменил SW_HIDE на
SW_SHOW (чтобы видеть). Ни одна из команд не отработала! nnCron\Add\nncron191.exe /c net stop nncron nnCron\Add\Setup.cmd И еще один важный момент - в приведенном тобой коде (как я понял), нет ожидания появления процесса nncron.exe после выполнения nnCron\Add\nncron191.exe |
Сообщ.
#6
,
|
|
|
А вызовы вообще происходили? ewWaitUntilIdle ждет пока процесс не освободиться. Или используй стороннюю dll для определения запущен ли процесс.
|
Сообщ.
#7
,
|
|
|
Цитата А вызовы вообще происходили? Вызовы не происходили. Цитата ewWaitUntilIdle ждет пока процесс не освободиться В этом случае, получится все тоже самое что и в разделе [Run] Цитата используй стороннюю dll для определения запущен ли процесс Неужели в Паскале нельзя узнать, запущен ли процесс? Со сторонней dll как то сложновато получится, и разбираться из за жуткого количества проблемм, совершенно некогда. |
Сообщ.
#8
,
|
|
|
Я как понимаю, nncron191.exe не твоя программа? Создает ли она Mutex? А всегда ли запуск 4 секунды?
|
Сообщ.
#9
,
|
|
|
Цитата Создает ли она Mutex? Не знаю что такое Mutex. Цитата Я как понимаю, nncron191.exe не твоя программа? Да, nncron191.exe не моя программа. Я писал к ней плагин. nncron191.exe /S /D={pf}\nnCron - это тихая установка проги nnCron, последующие команды, это установка плагина и настроек (при запущеной службе, приводит к ошибкам). Цитата А всегда ли запуск 4 секунды? А установленная служба , сам понимаешь, на разных компах будет стартовать по разному, где то за 1сек. а где то за 10сек. |
Сообщ.
#10
,
|
|
|
function IsRunning( sName : string ) : boolean; var han : THandle; ProcStruct : PROCESSENTRY32; sID : string; begin Result := false; han := CreateToolhelp32Snapshot( TH32CS_SNAPALL, 0 ); if han = 0 then exit; ProcStruct.dwSize := sizeof( PROCESSENTRY32 ); if Process32First( han, ProcStruct ) then begin repeat sID := ExtractFileName( ProcStruct.szExeFile ); if uppercase( copy( sId, 1, length( sName ) ) ) = uppercase( sName ) then begin Result := true; Break; end; until not Process32Next( han, ProcStruct ); end; CloseHandle( han ); end; Эта функция вернет true, когда nncron191.exe появиться. Следовательно делай так: Exec(ExpandConstant('{pf}\nnCron\Add\nncron191.exe'), ExpandConstant('/S /D={pf}\nnCron'), '', SW_SHOW, ewNoWait, ResultCode); While not IsRunning('nncron191.exe') do begin sleep(100); end; Exec(ExpandConstant('{cmd}'), '/c net stop nncron', '', SW_HIDE, ewNoWait, ResultCode); Exec(ExpandConstant('{pf}\nnCron\Add\Setup.cmd'), '', '', SW_HIDE, ewNoWait, ResultCode); Написать dll и потключить к Inno Setup сможешь? |
Сообщ.
#11
,
|
|
|
Кстати, а так:
procedure CurPageChanged(CurPageID: Integer); var ResultCode: Integer; begin if CurPageID=wpFinished then begin if Exec(ExpandConstant('{pf}\nnCron\Add\nncron191.exe'), ExpandConstant('/S /D={pf}\nnCron'), '', SW_SHOW, ewWaitUntilIdle, ResultCode) then begin Exec(ExpandConstant('{cmd}'), '/c net stop nncron', '', SW_HIDE, ewNoWait, ResultCode); Exec(ExpandConstant('{pf}\nnCron\Add\Setup.cmd'), '', '', SW_HIDE, ewNoWait, ResultCode); end; end; end; |