web-dev-qa-db-ja.com

MSIEXECを使用してサイレントアンインストールできないPython 3.8.1

私は最初にPython 3.8.1を組織内に(該当する場合はWSUS Package Publisherを介して)MSIを使用して展開しました こちら WSUS Package Publisherを使用してこれらのMSIをインストールしました。各MSIの次のコマンド:

msiexec.exe /i core.msi /qn /norestart ALLUSERS=1

残念ながら、何らかの理由でこれが原因で、ALLUSERS = 1が無視されていることを示す多くの問題を引き起こしていました。おそらく、インストーラーの昇格の欠如(インストールされたアプリケーションのリストに表示されず、pyから表示されないため)- 0リスト)。イライラして、これらの問題に気付く前に、これらはすべて誤って全員に展開されました。

クリーンアップするには、これらのMSIをアンインストールする必要があります。影響を受けるマシンでこれらのMSIを右クリックし、[アンインストール]をクリックすると機能します-「アンインストールしてもよろしいですか?」プロンプトが表示され、その後に昇格要求が続き、期待どおりにアンインストールされます。

ただし、これを静かに実行して、展開できるようにしているためです。これは、昇格されたシェルを介して実行しようとしているコマンドです。

 msiexec.exe /x .\core.msi /qn

何も起こりません。タスクマネージャーでmsiexec.exeがアクティビティなしで実行されているのを確認できるので、「本当によろしいですか?」プロンプトとそのプロンプトで行き詰まっています。

サイレントアンインストール中にこのプロンプトをバイパスするにはどうすればよいですか?

2
Joe Smith

したがって、私と同僚がこれをトラブルシューティングしてしばらくすると、状況と実際に何が起こったのかをよりよく理解することができました。これは私たちが最初にやろうとしていたことを解決しません(Deploy Python 3.8.1 MSI's through WSUS))が、少なくともクリーンアップに役立ちます。 WSUS Package Publisherまたは他の何かでこれに似た何かを経験しました!!

Python= WSUSを介して展開しているため、すべてのローカルマシンがPythonをNTAUTH\SYSTEMとしてインストールします。これがPythonは、.MSTで指定した場所(C:\ Program Files\Python38)に問題なく正常にインストールされていました。

何らかの理由で、Python MSIはすべて、.MSTのALLUSERS = 1呼び出しを無視し、それをパラメーターとして指定します。理由がわからない(Pythonチームまたはより深い理解を持つ誰かがチャイムできますか?:)).

この結果は、私の理解/テストから、インストーラーが昇格されたプロセスとして実行されていないことを検出し、したがって、NTAUTH\SYSTEMのユーザーNTAUTH\SYSTEMとしてMSIをインストールし、Pythonランチャーなどですが、.MSTとNTAUTH\SYSTEMが持つアクセス権のため、インストールファイルは要求に応じてC:\ Program Files\Python38に配置されます。

これは、インストールが失敗する理由、アンインストールがどうしても不可能であること、およびPython LauncherがPATHが正しく設定されているにもかかわらず奇妙に動作していた理由です。

  • キーはすべてHKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall \に配置されているため、インストールは失敗します
  • すべてのユーザーではなくNTAUTH\SYSTEMにインストールされたため、インストールは成功したにもかかわらず、インストールされたアプリケーションにインストーラーが表示されませんでした。
  • Pythonは技術的にシステム(別名:昇格時はすべてのユーザー))にもインストールされていないため、MSIEXECまたはMSIを右クリックしてアンインストールすると、インストールされなかったと主張されます。それをアンインストールします(別名:ユーザーアカウント、昇格なし)。
  • ランチャーは381がインストールされていなかったHKLMキーを検索していたため、py -0は他のバージョンを選択してもPy38インストールを選択していませんでした。

したがって、この巨大な混乱を解消するために、Python 3.8.1 MSIをNTAUTH\SYSTEMとして、昇格せずにすべてアンインストールする必要がありました。これを行うには、ダウンロードとPSEXECを使用してCMDまたはPowershellをシステムとして起動し(psexec64.exe -sid powershell.exe)、それを介してMSIEXECを実行するか、または(私たちが取ったアプローチ)スケジュールされたタスクをマシン上に作成し、それをNTAUTH\SYSTEMとして実行します。最高の特権を取得し、「Python 3.8.1 *」プロパティを持つものをすべてアンインストールしますこれを行うための簡単なPowershellスクリプト:

$products = Get-WmiObject Win32_Product

foreach ($pkg in (
        "Python 3.8.1 Tcl*",
        "Python 3.8.1 Util*",
        "Python 3.8.1 Dev*",
        "Python 3.8.1 pip*",
        "Python Launcher*",
        "Python 3.8.1 Exe*",
        "Python 3.8.1 Standard*",
        "Python 3.8.1 Core*",
        "Python 3.8.1 Documentation*",
        "Python 3.8.1 Test*",
        "Python 3.8.1 Add*"
    )) {
    $products | Where-Object {
        ($_.Name -like $pkg)
    } | Select-Object -ExpandProperty LocalPackage | Foreach-Object {
        msiexec.exe /x $_ /QN
    }
}
0
Joe Smith