Windows サービスとして実行されるアプリケーションに取り組んでおり、それを自動的に更新しようとしています。
私の現在のアプローチは、サービスを停止し、msi インストーラーを実行してから、サービスを再起動する powershell スクリプトを実行することです。
これは、現時点での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 スクリプトを実行していないということです。
他の質問は、管理者アカウントを使用するようにサービスのログオン設定をセットアップしたことを示唆しているため、現在ログインしているアカウントとしてサービスを実行するように設定しました。インストーラーを手動で実行しましたが、何も変わりませんでした。
私がやろうとしていることをする方法はありますか?
私は現在、特定の自動更新戦略にコミットしていませんが、このサービスが自動的に更新されることを望んでいることは知っています. したがって、私が何か完全に間違ったことをしている場合、別のアプローチを試みることに 100% オープンです。
アップデート:
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
}
そのスクリプトを実行した後、次のエラーが見つかりました。
「msiexec」という用語は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。