Я пытаюсь создать новую службу (AppOneTest) в Windows 2016, которая должна быть доступна в services.msc, и всякий раз, когда служба запускается (AppOneTest), она должна запускать Process Explorer.
$ServiceName = "ApplicationOneTest"
$ServiceDisplayName = "AppOneTest"
$ServiceDescription = "This launches process explorer"
$ExecutablePath = "C:\processexp\procexp64.exe"
$ScriptPath = "C:\Backup\LaunchScript.ps1"
$LaunchScript = @"
# Script to launch processexp
& '$ExecutablePath'
"@
$LaunchScript | Out-File -FilePath $ScriptPath -Encoding utf8
New-Service -Name $ServiceName -DisplayName $ServiceDisplayName -Description $ServiceDescription -BinaryPathName "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File $ScriptPath" -StartupType Automatic
sc.exe config $ServiceName obj= "domain\username" password= "******" type= interact
Start-Service -Name $ServiceName
Этот скрипт попытается создать службу и запустить ее. Однако, когда я пытаюсь запустить созданную службу, она зависает и никогда не запускается.
Любая помощь будет высоко оценена.
решение1
Интерактивные службы в Windows Vista в большинстве случаев неэффективны и не должны использоваться.
Сервисные программы должны соответствовать определенному интерфейсу, они должны взаимодействовать с Service Control Manager, сигнализируя о своем статусе и т. д. Process Explorer или любое другое среднестатистическое приложение не будет этого делать.
Вы можете использовать обертку сервиса, напримерНССМдля запуска произвольных программ как служб. Это популярное решение для серверных приложений Java.
Для запуска тестов пользовательского интерфейса вам следует использовать виртуальную машину с настроенным автоматическим входом в систему и отключенными спящим режимом/блокировкой дисплея, а затем запустить тесты в обычном сеансе, который всегда открыт.
решение2
Вы пытаетесь запустить интерактивную системную службу. Это не рекомендуется, и могут возникнуть некоторые сложности, которые нужно решить в дополнение к моему ответу. Обратите внимание, что не каждая программа создана для работы с использованием протокола системной службы, и я действительно сомневаюсь, что Explorer подойдет. Вы можете найти утилиты, которые я перечисляю в этот ответ быть полезным при создании специальных служб из таких неподходящих программ: srvany-ngи НССМ.
Как минимум, вам нужно запустить службу под той же учетной записью пользователя, что и вошедший в систему пользователь. В PowerShell это означает использованиеPSКредитные данные объект, содержащий учетные данные пользователя.
Пример кода:
$username = "username"
$password = "password"
$securepassword = ConvertTo-SecureString $password -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ($username, $securepassword)
New-Service [...] -Credential $cred
Использованная литература: