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
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.
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
@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
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)