1

win32-serviceRuby (1.9.3-p429、MRI) を使用して Windows サービスを作成するために gem を使用しています。

このコードのスニペットは機能します。

require 'rubygems'
require 'win32/service'

include Win32

SERVICE_NAME = 'myservice'

# Create a new service
Service.create({
  :service_name        => SERVICE_NAME,
  :service_type       => Service::WIN32_OWN_PROCESS,
  :description        => 'A custom service I wrote just for fun',
  :start_type         => Service::AUTO_START,
  :error_control      => Service::ERROR_NORMAL,
  :binary_path_name   => 'c:\Ruby193\bin\ruby.exe -C c:\ c:\myservice.rb',
  :load_order_group   => 'Network',
  #:service_start_name => 'Administrator',
  #:password           => 'adminpasswd',
  :display_name       => SERVICE_NAME
})

Service.start SERVICE_NAME

私が抱えている問題は、サービスを管理者権限で実行する必要があることですが、このコード スニペットを呼び出すエンティティはローカル システム アカウントとして実行され、それがデフォルトの権限です。

サービス GUI (services.msc) を開き、サービスにアクセスして停止し、サービス (myservice) プロパティの [ログオン] タブで権限を上げ、管理者/adminpasswd をユーザー/パスワードとして使用できます。次に、十分な権限でサービスを実行します。

ただし、 [サービス] タブで使用したのとまったく同じ値 (コード スニペットの行のコメントを解除することによって) を呼び出しService.createて、:service_start_name設定しようとすると:password、機能しません。このサーバーは、Windows 2008r2 Datacenter Edition を実行している Amazon EC2 サーバーであり、私が知っている Windows ドメインの一部ではありません (私が開始したため)。

この Windows サービスを管理者権限で実行するには、他に何をする必要がありますか?

4

2 に答える 2

2

ボロディンは私にこの答えの手がかりを与えてくれました。サービスを再構成するためにサービス GUI に戻ったとき、ユーザー名として「Administrator」と入力したにもかかわらず、実際にパネルに表示されるユーザー名が「.\Administrator」であることに気付きました。ボロディンのコメントを念頭に置いて、「。」を指定できたようです。ドメインとして。

だから...実際に機能したコードは次のとおりです。

require 'rubygems'
require 'win32/service'

include Win32

SERVICE_NAME = 'myservice'

# Create a new service
Service.create({
  :service_name        => SERVICE_NAME,
  :service_type       => Service::WIN32_OWN_PROCESS,
  :description        => 'A custom service I wrote just for fun',
  :start_type         => Service::AUTO_START,
  :error_control      => Service::ERROR_NORMAL,
  :binary_path_name   => 'c:\Ruby193\bin\ruby.exe -C c:\ c:\myservice.rb',
  :load_order_group   => 'Network',
  :service_start_name => '.\Administrator',
  :password           => 'adminpasswd',
  :display_name       => SERVICE_NAME
})

Service.start SERVICE_NAME
于 2013-07-18T14:52:39.497 に答える