ローカルでテストするときに、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.
これが構成の問題なのか、バッチスクリプトが間違っているのかわかりません。しかし、runas
コマンドプロンプトが開始されるC:\ Windows\System32 \フォルダーにディレクトリを作成できないため、期待したアクセス許可を取得していないと思われます。コマンドプロンプトで実行しているユーザー/権限レベルを確認する方法はありますか?
注:このスクリプトをできるだけ一般的にしたいと思います。私が全員の管理者アカウントで作業している環境では、「UserAdmin」であることが保証されています。ソリューションへのパスも同じになります。このスクリプトはSVNに追加されるため、UserAdmin
アカウントに特定のパスワードを追加するようなものは受け入れられません。
これが誰かに役立つかもしれない解決策です:
%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
このbatファイルを管理者として実行します
installutilの代わりにsc.exeを使用してサービスを作成できます...
例:
sc [Servername] create Servicename [Optionname = Optionvalue .. ..
これが私がよく作成するものです:
sc create syscmd binpath = "%COMSPEC%/ c start" type = own type = interact
これにより、コマンドプロンプトが開きます(システムプライベートを使用)