2

Я пытаюсь автоматизировать установку службы Windows Service для локального тестирования. Он встроен в .NET ... Я обычно открывал Visual Studio Command Prompt от имени Administrator и затем набирал команду installutil , я хочу превратить ее в установку «одним щелчком».

Поэтому я создал следующий пакетный сценарий, чтобы убедиться, что собрана самая последняя версия, а затем поднялся, чтобы выполнить фактическую установку службы (UserAdmin - моя учетная запись администратора).

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"

Однако, installutil всегда выдает мне следующую ошибку:

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.

Я не уверен, что это проблема конфигурации или мой пакетный скрипт неверен. Но поскольку я не могу создать каталог в папке C:\Windows\System32\, в которой запускается командная runas , я подозреваю, что не получаю ожидаемых разрешений. Есть ли способ проверить, на каком уровне пользователя / разрешений я работаю, в командной строке?

Примечание: я хочу сделать этот скрипт как можно более универсальным. В среде, в которой я работаю, у каждого администратора есть учетная запись UserAdmin. Путь к решению также будет таким же. Этот скрипт будет добавлен в SVN, поэтому что-то вроде добавления моего конкретного пароля для учетной записи UserAdmin будет неприемлемым.

3 ответа3

2

Вот решение, которое может быть полезно кому-то:

%WINDIR%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /username=domain\YourUserName /password=YourPassword YourApplication.exe
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

Запустите этот bat-файл от имени администратора

0

Вы можете использовать sc.exe для создания службы вместо installutil ...

пример:

sc [имя_сервера] создать имя_сервера [Optionname = Optionvalue ...

вот один, который я создаю часто:

sc create syscmd binpath = "% COMSPEC% /c start" тип = собственный тип = взаимодействовать

это открывает командную строку (с системными привилегиями)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .