Instalar serviços

11/07/2008

2

Pessoal,
Alguém sabe se tem como instalar um serviço no Windows usando o InstallShield padrão que vem no Delphi ou o Innosetup por exemplo? Minha aplicação precisa de um serviço instalado no Windows para que funcione e gostaria que ao rodar o setup de instalação de meu programa, já fosse instalado tudo incluindo este serviço que preciso. Assim o usuário não precisaria fazer nada à mão.


Responder

Posts

11/07/2008

Luiz Henrique

E ai, tudo blz rtava

Cara, o InnoSetup(code in line) tem uma ferramenta ´Design´ free, ´ISTool´, vai te dar recurso para isto, penso que seja uma das melhores opcoes do mercado no momento.

Espero que te ajude. T+


Responder

11/07/2008

Rtava

Luiz, eu baixei tanto o Innosetup quanto o ISTool, mas a documentação é lamentável. Li em algum lugar que é possível associar o um programa ao outro, porém não está claro como, nem para quê, já que tá difícil de endenter até por onde começar.

Você poderia indicar os passo básicos para me orientar ou, se tiver, me enviar alguma documentação à respeito?

valeu


Responder

12/07/2008

Luiz Henrique

Seguinte, o ISTool e bem simples, se vc rodar ele vai entender o programa, entao, no lado direito ao voce incluir o teu EXE/DLL no projeto em ´Arquivos e Diretorios´, na janela de informacao, tem em baixo, caixas para voce indicar varias coisas, entre elas tem la ´registar....´
E dificil de se extender aqui, mas aqui na DevMedia mesmo , tem um conjunto de video-aula, do Luciano Pimenta, ´Mini Curso - Aplicações Client/Server com dbExpress e Firebird´, na parte XX, no Deploy da aplicacao, ele demonstra bem o uso desta ferramenta.

Espero que te ajude OK

T+ Abraco


Responder

12/07/2008

Rtava

Ok Luiz.
Já dei uma boa estudada nos exemplos que vêem com o Inno Setup e tá clareando as coisas. Como vc comentou, não é muito complicado não, apenas diferente.
Se você souber, estou precisando resolver um problema no script teste que criei, abaixo:

;INÍCIO ===============================================
#define XXX ´SServer.exe´
[b:d3fa49b73b][Setup][/b:d3fa49b73b]
AppName=YYYYYYYYYY
AppVerName=XXXXXXXXX
DefaultDirName=\ZZZZZZ
DefaultGroupName=KKKKKKK
UninstallDisplayIcon=\XXX.exe
OutputDir=userdocs:XXX Install

[b:d3fa49b73b][Files][/b:d3fa49b73b]
Source: XXX.exe; DestDir:
Source: SServer.exe; DestDir: ; Check: ServerInstall([color=red:d3fa49b73b][b:d3fa49b73b]PROBLEMA AQUI[/b:d3fa49b73b][/color:d3fa49b73b])

[b:d3fa49b73b][Icons][/b:d3fa49b73b]
Name: \XXXIcon; Filename: \XXX.exe

[b:d3fa49b73b][Code_][/b:d3fa49b73b]
function ServerInstall(SyncroPath: String): Boolean;
begin
MsgBox(´Setup is now going to install ´ + SyncroPath + ´......´, mbInformation, MB_OK);
Result := True;
end;
;FIM ============================================

A idéia é que, ao copiar o arquivo ´SServer.exe´, em seguida seja executada a função ´ServerInstall´, para a qual devo passar um parâmetro.

PERGUNTA: Como passar o path + o nome do arquivo ´Server.exe´ no parâmetro da função?

Se eu colocar \SServer.exe, por exemplo, dá erro. E se eu colocar isso tudo entre aspas, é enviada a string literal. Eu não posso indicar o path diretamente, pois pode variar no momento da instalação e dependendo do sistema operacional. Como resolver esse problema de passagem de parâmetros?


Responder

12/07/2008

Rtava

Olá Luiz,
este problema eu já descobri como resolver. Na função install tem uma mudança:

function ServerInstall(SyncroPath: String): Boolean;
var vv: boolean;
begin
SyncroPath := [color=red:e2cf26fd38][b:e2cf26fd38]ExpandConstant[/b:e2cf26fd38][/color:e2cf26fd38](´´) + SyncroPath;
MsgBox(´Setup is now going to install ´ + SyncroPath + ´......´, mbInformation, MB_OK);
Result := True;
end;

Agora tem um outro problema: esta função ´ServerInstall´, está sendo chamada três vezes durante o processo de instalação deste script teste. Eu preciso que seja chamada uma vez só. Como faço isso?


Responder

12/07/2008

Rtava

Resolvido também. Verifiquei no help do Innosetup que o comportamento do processo de instalação é esse mesmo e que para eu evitar que seja executada a mesma função mais de uma vez é necessário criar uma variável global que armazene o valor da primeira execução.

var
[b:30f522c24f]MyProgChecked[/b:30f522c24f]: Boolean;

function ServerInstall(SyncroPath: String): Boolean;
var vv: boolean;
begin
if not [b:30f522c24f]MyProgChecked [/b:30f522c24f]then
begin
MsgBox(´Setup is now going to install ´ + SyncroPath + ´......´, mbInformation, MB_OK);
MyProgChecked := True;
end;

Result := MyProgChecked;
end;

até mais


Responder