我正在研究一個將作爲Windows服務運行的應用程序,我試圖讓它自動更新自己。我如何得到一個Windows服務來更新自己
我目前的做法是,執行PowerShell腳本,將停止該服務,運行MSI安裝程序,然後重新啓動該服務。
這是PowerShell腳本看起來像在這個時候
Start-Sleep -s 10
Write-Host "update start"
Stop-Service ServiceName1
msiexec /i c:\ProgramData\ProgramName\Install\ServiceName.Setup.msi /passive /l*v C:\ProgramData\ProgramName\Install\log.txt | Out-Null
Start-Service ServiceName1
Write-Host "update finished"
這是我如何從應用程序
Process.Start("Powershell", @"C:\ProgramData\ProgramName\Install\UpdateApp.ps1");
會發生什麼運行它是什麼,是服務停止並重新啓動,但它不會更新。就好像msi永遠不會運行。日誌文件甚至沒有出現。
當我運行的服務從提升的命令一個命令行應用程序提示它按預期工作和應用進行了更新,所以我現在的理論是,服務沒有運行具有管理員權限的PowerShell腳本。
Other questions suggest that I set up the log on settings for the service to use an administrator account,所以我將服務設置爲我當前登錄的帳戶運行,誰能夠打開提升的命令提示符和/或手動運行安裝程序,但這樣做並沒有改變任何內容。
有沒有辦法做我想做的事情?
我目前沒有犯下任何特定的自動更新策略,但我知道,我想這項服務進行自我更新。所以如果我在做一些完全錯誤的事情,我可以嘗試一種不同的方法。
UPDATE:
我做了如下修改日誌msiexecc
Try{
c:\windows\system32\msiexec.exe /i c:\ProgramData\ProgramName\Install\ServiceName.msi /passive /l*v C:\ProgramData\ProgramName\Install\log.txt | Out-File -filepath C:\ProgramData\ProgramName\Install\output.txt
}
Catch {
$_ | Out-File C:\ProgramData\ProgramName\Install\errors.txt -Append
}
錯誤和輸出運行腳本後,我發現了以下錯誤:
The term 'msiexec' is not recognized as the name of a cmdlet, function, script file, or operable program..
@stuartd如果我能通過快速的谷歌搜索找到解決這個問題的解決方案,那麼首先我不會在這裏問一個問題。 –
@stuartd所以我開始使用windows服務作爲內置的\ Administrator帳戶,並且一直沒有變化 –
該服務是否配置了限制特權? (你可以使用'sc qsidtype'來確定你是否確定) –