drem1lin
@drem1lin
чуть программист, чуть чуть админ...

Как правильно вызвать запустить свою программу из инсталлятора?

Всем привет, столкнулся с проблемой. Написал небольшую программу, которая может устанавливаться как сервис Windows, сделал базовый инсталлятор и столкнулся с проблемой, если я запускаю инсталлятор при установке вылезает окно, которое говорит, что "<Имя сервиса> использует файлы которые должны быть обновлены входе установки и т.д." Я решил написать процедуру, которое вызовет мою программу с параметром удаления сервиса и типа сервис мешать установке не будет. Написал функцию
function IsX64: Boolean;
begin
  Result := Is64BitInstallMode and (ProcessorArchitecture = paX64);
end;

function IsX86: Boolean;
begin
  Result := not IsX64;
end;

function PrepareToInstall(var NeedsRestart: Boolean) : String;
var
	ResultCode: Integer;
begin
	if IsX86 then
	begin
    Exec ('{syswow64}\MyService.exe', '-Service -sr', '', SW_SHOW, ewWaitUntilTerminated, ResultCode)
  end;
	if IsX64 then
  begin
		Exec ('{sys}\MyService.exe', '-Service -sr', '', SW_SHOW, ewWaitUntilTerminated, ResultCode)
  End;
  NeedsRestart := False;
  Result := '';
end;


Как сделать установку без этого окна?
  • Вопрос задан
  • 171 просмотр
Решения вопроса 1
drem1lin
@drem1lin Автор вопроса
чуть программист, чуть чуть админ...
Нашел ответ на свой вопрос. Оказывается Inno Setup не подставляет имена в строки. поэтому все вызовы надо проводить через ExpandConstant()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@dmfun
Просто остановите сервис, файлы станут доступными и инсталлятор сможет их обновить.

Для остановки сервиса можно net stop использовать команду.
Если Вы удалите сервис, то сервис не остановится, всё равно.. Пометится, как подлежащий удалению и после перезагрузки будет удален.

Еще eсть SC команда.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы