Arquivos em lote para instalar o serviço do Windows como administrador

2

Estou tentando automatizar a instalação de um Windows Service quando estou testando localmente. Ele é construído em .NET ... Normalmente, eu abro o Visual Studio Command Prompt como Administrator e, em seguida, digito o comando installutil , estou querendo transformá-lo em uma instalação de "um clique".

Portanto, criei o seguinte script em lote para garantir que a versão mais recente seja criada e, em seguida, me elevar para fazer a instalação real do serviço (UserAdmin é minha conta de administrador).

cd C:\Path\To\Solution
echo Building Service
msbuild WinService.sln /noconlog /nologo

cd C:\Path\To\Solution\bin\Debug
runas /user:UserAdmin "cmd /k C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil C:\Path\To\Solution\bin\Debug\WinService.exe"

No entanto, o installutil sempre me fornece o seguinte erro:

An exception occurred during the Install phase.
System.Security.SecurityException: The source was not found, but some 
or all event logs could not be searched.  Inaccessible logs: Security.

Não tenho certeza se isso é problema de configuração ou se meu script em lote está errado. Mas como não consigo criar um diretório na pasta C: \ Windows \ System32 \ em que o prompt de comando runas foi iniciado, suspeito que não esteja obtendo as permissões que esperava. Existe uma maneira de verificar qual usuário / nível de permissão estou executando no prompt de comando?

Observação: desejo tornar esse script o mais genérico possível. No ambiente em que estou trabalhando, a conta de administrador de todos é garantida como 'UserAdmin'. O caminho para a solução também será o mesmo. Esse script será adicionado ao SVN, então algo como adicionar minha senha específica para a conta UserAdmin não seria aceitável.

    
por Jeff Bridgman 11.09.2012 / 15:55

3 respostas

2

Aqui está uma solução que pode ser útil para alguém:

%WINDIR%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /username=domain\YourUserName /password=YourPassword YourApplication.exe
    
por 08.04.2013 / 23:21
1
@echo off

SET PROG="c:\YourServiceLocation\Service.exe" SET FIRSTPART=%WINDIR%"\Microsoft.NET\Framework\v" SET SECONDPART="\InstallUtil.exe" SET DOTNETVER=4.0.30319 IF EXIST %FIRSTPART%%DOTNETVER%%SECONDPART% GOTO install

GOTO fail :install ECHO Found .NET Framework version %DOTNETVER% ECHO Installing service %PROG% %FIRSTPART%%DOTNETVER%%SECONDPART% %PROG% GOTO end :fail echo FAILURE -- Could not find .NET Framework install :param_error echo USAGE: installNETservie.bat [install type (I or U)] [application (.exe)] :end ECHO DONE!!! Pause

Execute este arquivo bat como administrador

    
por 30.05.2014 / 13:47
0

você pode usar o sc.exe para criar o serviço em vez do installutil ...

exemplo:

sc [Nome_do_servidor] create Nome_do_serviço [Optionname = Optionvalue ...

aqui é um que eu crio frequentemente:

sc criar syscmd binpath="% COMSPEC% / c start" type = tipo próprio = interagir

isto abre um prompt de comando (com privs do sistema)

    
por 11.09.2012 / 16:26