簡體   English   中英

Ruby:gem win32-service:使用Admin權限創建服務

[英]Ruby: gem win32-service: Create a service with Admin privileges

我正在使用win32-service gem使用Ruby創建一個Windows服務(1.9.3-p429,MRI)。

這段代碼有效。

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)屬性的“登錄”選項卡提升權限,並使用Administrator / adminpasswd作為用戶/密碼。 然后它以足夠的權限運行服務。

但是,當我嘗試調用Service.create ,將:service_start_name:password設置為完全相同的值(通過取消注釋代碼片段中的行),就像我在“服務”選項卡中使用的那樣,它不起作用。 此服務器是運行Windows 2008r2 Datacenter Edition的Amazon EC2服務器,並不是我所知道的任何Windows域的一部分(因為我啟動了它)。

為了讓這個Windows服務以管理員權限運行,我需要做些什么?

底層的CreateService Windows API函數需要lpServiceStartName字段上的帳戶域,因此您可能需要將:service_start_name字段設置為'domain\\Administrator' ,其中帳戶域通常是計算機名稱。

鮑羅丁給了我這個答案的線索。 當我回到服務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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM