web-dev-qa-db-ja.com

管理者としてWindowsサービスをインストールするためのバッチファイル

ローカルでテストするときに、Windows Serviceのインストールを自動化しようとしています。組み込みの.NET...通常はVisual Studio Command PromptAdministratorとして開き、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.

これが構成の問題なのか、バッチスクリプトが間違っているのかわかりません。しかし、runasコマンドプロンプトが開始されるC:\ Windows\System32 \フォルダーにディレクトリを作成できないため、期待したアクセス許可を取得していないと思われます。コマンドプロンプトで実行しているユーザー/権限レベルを確認する方法はありますか?

注:このスクリプトをできるだけ一般的にしたいと思います。私が全員の管理者アカウントで作業している環境では、「UserAdmin」であることが保証されています。ソリューションへのパスも同じになります。このスクリプトはSVNに追加されるため、UserAdminアカウントに特定のパスワードを追加するようなものは受け入れられません。

2
Jeff B

これが誰かに役立つかもしれない解決策です:

%WINDIR%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /username=domain\YourUserName /password=YourPassword YourApplication.exe
2
Jesse
@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ファイルを管理者として実行します

1
Chenthurij

installutilの代わりにsc.exeを使用してサービスを作成できます...

例:

sc [Servername] create Servicename [Optionname = Optionvalue .. ..

これが私がよく作成するものです:

sc create syscmd binpath = "%COMSPEC%/ c start" type = own type = interact

これにより、コマンドプロンプトが開きます(システムプライベートを使用)

0
d4v3y0rk