みなさんこんにちは。マネージドサービス部の塩野です。
今回は小ネタシリーズとして、Windowsのアンインストールについてあんなこといいな、できたらいいな(だいたい出来ずに困って調べるやつ)についてまとめてみます。
想定読者
- アプリケーションの設定を自動でしたい方
- Windowsでアプリケーションをアンインストールしようとした時にエラーが出て困っている人
- Microsoft Storeを使わない従来のパッケージを使ってアプリケーションのインストールをおこないたい方
色々なアプリケーションのインストール方法やアンインストール方法
一般的にはWindowsでアプリケーションをインストールした際に、インストールパッケージをダブルクリックなどで起動してインストールするケースが大半かと思います。システムを管理している人でもGUIからやった方が早いので普通はそうですよね。。でもその台数が多くなればなるほど、「そんなことやってられねぇ・・」となるのが世の常で、台数が増え始めた頃からコマンドでインストールしたり削除したりする方法を調査して、一括で設定する場面が増えてくると思います。
設定パターン
Windowsのアプリケーションインストールやアンインストール方法は、大きく分けると以下の3パターンになります。
設定手段 | インストール方法 | アンインストール方法 |
---|---|---|
GUI | インストーラーを実行して、インストール | コントロールパネルやWindowsの設定アプリからアンインストール |
コマンドライン(MSI) | コマンドプロンプトから msi コマンドを使用し、インストール | コマンドプロンプトから msi コマンドを使用してアンインストール |
コマンドライン(WMI) | インストールできないので割愛 | コマンドプロンプトから wmic product コマンドを使用してアンインストール |
それぞれの特徴は下記の通りになります。
設定手段 | メリット | デメリット |
---|---|---|
GUI | 画面を操作するだけなので、詳しい知識のない人でも操作できる | 設定する台数が増えたり、アプリケーションの数や手順が多いと手間がかかる |
コマンドライン(MSI) | 情シスなどの管理部門でも使われていて、設定を自動化する場合に便利 | コマンドプロンプトやPowershellの知識だけでなく、インストールコマンドについての知識も必要でとっつきにくい |
コマンドライン(WMI) | MSIコマンドやGUIでアンインストールできない場合でも、このコマンドを使うとアンインストールできる場合がある | コマンドプロンプトなどの知識が必要な上に、完全にサイレントで動作するためちゃんと動作しているかどうか判断しづらい |
また、個別パッケージを使った方法以外にパッケージマネージャーを使った方法もあります。
パッケージマネージャーの種類 | 特徴 | 備考 |
---|---|---|
Windows Package Manager (winget) | Microsoftが開発しているWindows向けの公式パッケージマネージャー。Windows 11とWindows 10の最新バージョンに標準搭載されていて、コマンドラインからアプリのインストール、アップグレード、アンインストールなどを行える。 | 現時点でWindows Serverには標準でインストールされていない。OSSなどで一部のものはwingetに対応していないものもある |
Chocolatey | サードパーティ製の有名なパッケージマネージャー。コマンドラインからWindowsアプリを簡単に管理できる。 | powershellからインストールが必要 |
Scoop | コマンドライン向けのパッケージマネージャー。Gitのようにアプリをユーザーディレクトリにインストールする | 対象のアプリケーションは管理者権限が不要でインストールができる |
その他、開発言語などに依存するパッケージマネージャーは下記の通りです。
パッケージマネージャーの種類 | 特徴 | 備考 |
---|---|---|
NuGet | 主に.NETアプリの依存関係を管理するためのパッケージマネージャーで、Visual Studioと連携して使われることが多い | |
PowerShellGet | PowerShellモジュールとスクリプトを管理するためのパッケージマネージャーで、PowerShell上から実行する | PowerShell Gallery上のパッケージを検索、インストール、更新できる |
Windows環境のアプリケーションインストール
ここからはそれぞれの方法について深堀して見ていきましょう。なお、GUIを使った手順については対象のアプリケーションをダブルクリックするだけなので割愛させて頂きます。
コマンドライン(MSI)を使用したインストール
コマンドラインからmsiパッケージをインストールすることで、GUIを使わずに自動化されたインストールが可能になります。 特に複数のPCに同じアプリケーションを展開する際に便利です。
以下の手順でコマンドラインを使用してmsiパッケージをインストールします。
- 管理者権限でコマンドプロンプトを起動します。
- 次のコマンドを入力し、Enterキーを押します。
msiexec /i "msiファイルのパス"
msiexecはMicrosoft Windows Installerの実行ファイルで、msiパッケージのインストールやアンインストールで使用します。 また、msiexecで使用しているオプションで、「/i」はインストール動作を意味し、その後にインストールしたいmsiパッケージの完全なパスを指定することで、インストーラーをコマンドから実行させることができます。必要に応じて、サイレントインストールする場合は、「/qn」オプションや「/qb」オプションを追加して使用します。「/qn」オプションを追加した場合は完全にサイレントでインストールすることができ、「/qb」オプションを追加した場合はインストラーが実行されている画面は表示されるものの、管理者の操作なしにインストールが完了できます。
msiexec /i "C:\インストーラーの保管場所\example.msi" /qn msiexec /i "C:\インストーラーの保管場所\example.msi" /qb
Windows環境のアプリケーションアンインストール
GUIを使ったアンインストール
今さらながら特に手順は不要な気もしてはしていますが、一応記載しておきます。
スタートメニューからの簡単アンインストール
スタートメニューからアプリケーションをアンインストールする場合、まずスタートメニューを開き、アンインストールしたいアプリケーションを右クリックします。すると、メニューが表示されるので「アンインストール」を選択します。
ただし、この方法が使えるのはMicrosoft Store経由でインストールしたアプリに限られ、 それ以外の方法でインストールしたアプリケーションは、スタートメニューから右クリックしても「アンインストール」のオプションが表示されないことがあります。その場合は、コントロールパネルからアンインストールする必要があります。
コントロールパネルを使ったアンインストール手順
コントロールパネルを使ってアプリをアンインストールするには、以下の手順を実行します。
- スタートメニューからコントロールパネルを開きます。
- 「プログラムと機能」を選択します。
- アンインストールしたいアプリケーションを一覧から探し、選択します。
- 「アンインストール」をクリックします。
- 確認メッセージが表示されたら「はい」を選択し、アンインストールを実行します。
スタートメニューからアプリを右クリックして「アンインストール」を選ぶと、自動的にコントロールパネルの「プログラムと機能」が起動します。 そこから改めてアプリを選択し、アンインストールを実行する必要があります。コントロールパネルからのアンインストールは、インターネット上からインストーラーをダウンロードしてインストールしたアプリに対して有効です。
コマンドライン(MSI)を使ったアンインストール
さて、ここからが本番です。以下の手順を使って、msiコマンドを使用したアプリケーションをアンインストールを実施します。
製品コードを指定したアプリケーションのアンインストール
- 管理者権限でコマンドプロンプトを起動します。
- 次のコマンドを入力し、製品コードを指定してアンインストールを実行します。
msiexec /x {製品コード}
製品コードは、レジストリやサードパーティ製のツールを使用して取得できます。 アンインストールするアプリごとに、対応する製品コードを指定する必要がある点に留意が必要で、製品コードを間違えるとアンインストールすることができません。
アンインストール時に使用する製品コードの取得方法は、同じ記事内の下の方に記載がありますので合わせてご参照ください。
MSIパッケージを使用したアプリケーションのアンインストール
- 管理者権限でコマンドプロンプトを起動します。
- 次のコマンドを入力し、製品コードを指定してアンインストールを実行します。
msiexec /uninstall "C:\インストーラーの保管場所\example.msi"
MSIパッケージは通常、インストール時に使用したものを使用しますが、アプリケーションの種類によってはインストール時にOS内のキャッシュ領域にインストール用のプログラムがキャッシュされることがあり、通常はそのキャッシュされたパッケージを使用してアンインストールをおこないます。
アンインストール時に使用するキャッシュされたパッケージのパスの取得方法は、同じ記事内の下の方に記載がありますので合わせてご参照ください。
製品コードやアンインストールパスの取得方法
アプリケーションがどの権限でインストールされたかによって若干参照先が異なります。
- ウインドウズキーとキーボードのRをクリックして、ファイル名を指定して実行のウィンドウを立ち上げます
- regedit.exe と入力してレジストリエディタを起動します
- ユーザーアカウントコントロール(UAC)の画面が表示されたらOKをクリックします
- 下記の「▼ユーザー権限でアプリケーションをインストールした場合」または「▼管理者権限でアプリケーションをインストールした場合」に記載のパスを開きます
- 一覧の中から対象のアプリケーションを探し、そのアプリケーションのレジストリキーに記載されているUninstallStringの値を確認する
※レジストリエディタを使ってレジストリ編集を行う場合、誤った操作をした場合にWindowsが立ち上がらなくなることがあるため、操作は細心の注意を払って行ってください。またレジストリエディタを使った操作で自身が理解できないような操作は絶対に行わないでください。
▼ユーザー権限でアプリケーションをインストールした場合
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
▼管理者権限でアプリケーションをインストールした場合
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
▼UninstallStringの参照方法
※レジストリキーの中のDisplayNameに記載されている名称が対象のアプリケーション名です
※ModifyPathやUninstallStringに含まれている{XXXX-XXXX-XXXX}
のような{}で囲まれている文字列が製品コードです
▼製品コードの例 {4DDB3FE3-0144-4075-B0BE-E59DDFA59144}
▼製品コードを使用したUninstall コマンドの例 MsiExec.exe /I{4DDB3FE3-0144-4075-B0BE-E59DDFA59144}
▼アンインストールパスを使用したUninstall コマンドの例 MsiExec.exe /uninstall "C:\Users\Administrator\AppData\Local\Temp\2\chocolatey\awscli\2.15.59\AWSCLIV2-2.15.59.msi"
コマンドライン(WMI)を使ったアンインストール
アンインストール方法自体は昔から知られている方法ではありますが、私が個人的に使っている用途としてアンインストール時にうまくアンインストールできなかった場合にこの方法を使用します。絶対に成功するわけではありませんが、試してみる価値のある方法のひとつという認識になります。
ちなみに、Windowsのアプリケーションをアンインストールしようとしている際に、インストーラがよく出力するエラーとその理由はこんな感じです。
エラーコードとその理由
下記はmsiパッケージのインストール時、アンインストール時、アップデート時によく発生するエラーとその対応方法(Microsoft社のページへのリンク)になります。個人的な経験上ではだいたいこの手のエラーが出ると治らないケースの方が多かったりするのですが、この手の話は長い間アップデートされてなかったり、システムアップデートなどの関係でこうなるケースが多いように思いました。
エラーコード | 意味と対処方法 |
---|---|
1603 | ・既にインストールされているアプリをインストールしようとしている ・インストールしようとしているフォルダーが暗号化されている ・SYSTEM アカウントがインストール対象フォルダへアクセスできない 対応方法:Windows インストーラーエラー 1603の対応 |
1612 1620 1635 1642 1706 1714 |
・インストールソースがない、またはパッケージを開けない 対応方法:アンインストールやアップデート時にソースがない場合の対応方法 |
設定方法
私の経験上、エラーコード1603に遭遇するケースが多いのですが、エラーコードの理由は色々あるようです。もし、こういったエラーコードに遭遇してしまった場合は、一旦システムの再起動を実施後に再度アンインストールを試してみて、それでもダメだった場合にこの方法を試します。
- 管理者権限でコマンドプロンプトを起動します。
- 次のコマンドを入力し、アンインストールを実行します。
wmic product where name="アプリケーション名" call uninstall
アプリケーション名は正確な名称でないと、このコマンドは動作しません。そのため、下記コマンドで正式な名称を確認してから上記のコマンドを実行します。
wmic product get name
もし、アプリケーションがたくさんインストールされている端末(もしくはサーバ)だった場合は、下記のコマンドを使用してフィルタすることもできます。
▼使用コマンド
wmic product get name | find "アプリケーション名の一部"
▼使用例
C:\Windows\system32>wmic product get name |find "Python" Python 3.12.3 Core Interpreter (64-bit) Python 3.12.3 Tcl/Tk Support (64-bit) Python 3.12.3 Standard Library (64-bit) Python 3.12.3 pip Bootstrap (64-bit) Python Launcher Python 3.12.3 Development Libraries (64-bit) Python 3.12.3 Executables (64-bit) Python 3.12.3 Test Suite (64-bit) Python 3.12.3 Documentation (64-bit) Python 3.12.3 Add to Path (64-bit)
Windows環境のパッケージマネージャー
だいぶ長くなってしまったので、このセクションは簡単にまとめます。私が個人的に使用しているパッケージマネージャーはマイクロソフト製のWingetか、サードパーティのChocorateyのどちらかになります。どちらもとても便利なので、Windows環境をIaCで管理する場合に使用できると思います。
Wingetを使用したアプリケーションのインストール
Windows10の一部とWindows11では標準でWingetコマンドがインストールされています。
下記マイクロソフトの情報によると、Wingetがインストールされていない場合のインストール方法は、MicrosoftStoreからインストールするようになっていました。もしインストールされていない場合は、MicrosoftStoreにアクセスして、Wingetをインストールしてください。
次にWingetを使用してパッケージをインストールします。
- 管理者権限でPowerShellまたはコマンドプロンプトを起動します
- 下記のコマンドで、アプリケーションをインストールします
winget install "アプリケーション名" -y
このコマンドを使用することで、Linuxのyumやaptと同じような感覚でアプリケーションのインストールやアップデート、削除などをおこなえてとても便利ですね。
Chocorateyを使ったアプリケーションのインストール
標準でインストールされていませんので、下記手順にてインストールが必要になります。
- Chocorateyのダウンロードサイトからインストール用コマンドを取得します
- 管理者権限でPowerShellを起動します
- 1で取得したコマンドをPowerShellに貼り付けて実行します
※コマンドは「Now run the following command」の項目を参照のこと
次にChocorateyを使用してパッケージをインストールします。
- 管理者権限でPowerShellを起動します
- 下記のコマンドで、アプリケーションをインストールします
choco install "アプリケーション名" -y
こちらもwingetと同じで特に難しい手順もなく、自動的にアプリケーションがインストールされると思います。 最後にインストール時のログからエラーが出てインストールが失敗していないことだけ確認してください。
まとめ
Windowsでのアプリケーションインストールやアンインストール時の小技ですが、うまく使うと社内向けに大規模にアプリケーションを展開することも出来るかと思います。また、パッケージマネージャーを使用することでアプリケーションの更新もコマンドひとつでできますので、こうしたツールをうまく使うことでセキュリティアップデートなども自動化でき、工数削減につながるかもしれません。
この記事がどなたかのお役に立てれば幸いです。