我正在嘗試在 Windows 2016 上建立新服務 (AppOneTest),該服務應該在 services.msc 中可用,並且每當服務啟動 (AppOneTest) 時,它都應該啟動進程資源管理器
$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 起,互動式服務大多無效,不應使用。
服務程序必須符合特定的接口,它們必須與服務控制管理器交互,發出其狀態等訊號。 Process Explorer 或任何其他普通應用程式都不會執行此操作。
您可以使用像這樣的服務包裝器國家安全局將任意程式作為服務運行。這是 Java 伺服器應用程式的流行解決方案。
要執行 UI 測試,您應該使用配置了自動登入並停用顯示睡眠/鎖定的虛擬機,然後在始終開啟的常規會話中執行測試。
答案2
您正在嘗試執行互動式系統服務。不建議這樣做,除了我的回答之外,可能還有一些複雜的問題需要解決。請注意,並非每個程式都是使用系統服務協定運行的,我真的懷疑 Explorer 是否合適。您可能會找到我列出的實用程序 這個答案 在從此類不合適的程序創建臨時服務時很有用: 斯瓦尼努和 國家安全局。
至少,您需要讓服務在與登入使用者相同的使用者帳戶下運作。在 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
參考: