2

Кто знает простое решение, как удаленно установить или удалить службу Windows на сервере Win2k8R2?

Этот сервер размещен в Интернете, поэтому он не принадлежит домену или тому подобное. Таким образом, я хочу избежать использования файлообменников Windows или служб администрирования.

Я предпочел бы возможность, где я могу запустить выполнение серверного скрипта, который устанавливает уже загруженные сервисные бинарные файлы.

Вы можете назвать любые инструменты или решения для кода .NET, если знаете, как этого добиться.

Изменить: Извините, я должен уточнить, это не так просто, как использование PowerShell или сценариев с InstallUtil в моем случае. Я попробую это с пунктами пули:

  • Я хочу установить службу автоматически, вызвав установку службы на сервере, работающем в Интернете, с клиента.
  • У меня нет графического интерфейса с сервера при вызове службы установки. Например, я запускаю файл setup.exe, который сам устанавливает сервисы через SSH (самоустанавливающийся сервис для использования имен пользовательских сервисов). Отсутствие графического интерфейса кажется проблемой (?).

Я даже отчаянно пытался вызвать программу установки службы через веб-службу php (shell_exec), но результат всегда один и тот же: установка выполняется, но службы не установлены.

Клиенту должно быть как можно проще вызвать установку службы на сервере, ничего не видя. Это для периодического и автоматического развертывания некоторых сервисных приложений, которые мы создаем.

2 ответа2

2

Я сделал это недавно, используя PowerShell и WMI. Полная информация здесь, но в двух словах работает что-то вроде ниже, а также PowerShell Remoting или SC.exe

function Install-Service(
[string]$serviceName = $(throw "serviceName is required"),
[string]$targetServer = $(throw "targetServer is required"),
[string]$displayName = $(throw "displayName is required"),
[string]$physicalPath = $(throw "physicalPath is required"),
[string]$userName = $(throw "userName is required"),
[string]$password = "",
[string]$startMode = "Automatic",
[string]$description = "",
[bool]$interactWithDesktop = $false
)
{        
# todo: cleanup this section
$serviceType = 16          # OwnProcess
$serviceErrorControl = 1   # UserNotified
$loadOrderGroup = $null
$loadOrderGroupDepend = $null
$dependencies = $null

# description?
$params = `
    $serviceName, `
    $displayName, `
    $physicalPath, `
    $serviceType, `
    $serviceErrorControl, `
    $startMode, `
    $interactWithDesktop, `
    $userName, `
    $password, `
    $loadOrderGroup, `
    $loadOrderGroupDepend, `
    $dependencies `

$scope = new-object System.Management.ManagementScope("\\$targetServer\root\cimv2", `
    (new-object System.Management.ConnectionOptions))
"Connecting to $targetServer"
$scope.Connect()
$mgt = new-object System.Management.ManagementClass($scope, `
    (new-object System.Management.ManagementPath("Win32_Service")), `
    (new-object System.Management.ObjectGetOptions))

$op = "service $serviceName ($physicalPath) on $targetServer"   
"Installing $op"
$result = $mgt.InvokeMethod("Create", $params)   
Test-ServiceResult -operation "Install $op" -result $result
"Installed $op"

"Setting $serviceName description to '$description'"
Set-Service -ComputerName $targetServer -Name $serviceName -Description $description
"Service install complete"
}
2

Powershell кажется вероятным вариантом. Посмотрите ссылку на командлет и командлет Add-WindowsFeature.

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