0

生成された MSI を介して .NET 4 Windows サービスを 2008 サーバーに展開するための powershell スクリプトを作成しています。新規インストールは正常に実行されますが、再実行してアンインストールしようとすると、アンインストール中にスクリプトがハングします。ターゲット マシンで実行される msiexec を呼び出します (アンインストールの実行中にプロセスが開始されたことを確認できます)。アンインストール コードとインストール コードの唯一の違いは、ログ名と msiexec に渡される /x コマンドです。

これが私が持っているコードです:

function UninstallService ($serverName, $fileName)
{
    write "Start uninstall service."

    $msiNamePath = "C:\MsiDeployment\" + $fileName
    $processArgs = @("/i", $msiNamePath, "/x", "/qn", "/norestart", "/l", "c:\msiuninstall.log")

    # Create session
    $session = New-PSSession -ComputerName $serverName

    # Enter session
    Enter-PSSession $session

    # Do uninstall
    Invoke-Command -Session $session -ScriptBlock { param($pArgs,$rootDir) Start-Process -FilePath "$rootDir\msiexec.exe" -ArgumentList $pArgs -Wait } -Args $processArgs,("$env:systemroot\system32")

    # Close session    
    Exit-PSSession
    Remove-PSSession $session

    if (!$?) { throw "Could not uninstall the service remotely on machine " + $serverName }

    write "End uninstall service."
}

サーバーで実行中の msiexec を終了すると、スクリプトは処理を続行します (サービスがアンインストールされているかどうかを確認するために後で失敗します)。ユーザー入力(おそらくUAC)を探しているプロンプトがあると思いますが、完全にはわかりません。アンインストールではログ ファイルが取得されませんが、インストールではログ ファイルが書き込まれます。

4

2 に答える 2