質問

msiexec をインストールするコマンド プロンプト ソフトウェアです。 MSI プログラム。ただし、コマンド ラインに MSI ファイルの名前を入力するだけで、コマンド ラインから MSI ファイルをインストールできることがわかりました。

ただし、MSI ファイルをアンインストールするには、次のコマンドを呼び出す必要があるようです。 msiexec プログラムして与えてください /x または /uninstall.

を使用せずにコマンドラインから MSI をアンインストールするにはどうすればよいですか? msiexec ルーティーン?

役に立ちましたか?

解決

簡単な答え:できません。 MSIEXEC / xを使用

長答:MSIファイルをコマンドラインで直接実行すると、MSIEXECが実行されるだけです。この関連付けはレジストリに保存されます。 (Windowsエクスプローラーで)[ツール]、[フォルダーオプション]、[ファイルの種類]の順に選択すると、関連付けのリストを表示できます。

たとえば、コマンドラインから.DOCファイルを実行すると、ワードパッドまたはWinWordがそれを開きます。

HKEY_CLASSES_ROOT\.msiの下のレジストリを見ると、.MSIファイルがProgID <!> quot; Msi.Package <!> quot;に関連付けられていることがわかります。 HKEY_CLASSES_ROOT\Msi.Package\shell\Open\commandを見ると、<!> quot; run <!> quot;のときにWindowsが実際に使用するコマンドラインが表示されます。 .MSIファイル。

他のヒント

MSI パッケージをアンインストールするには、さまざまな方法があります。これは「参考」を目的としています。

要約すれば 次の方法でアンインストールできます。 msiexec.exe, ARP, WMI, パワーシェル, 、次のような展開システム SCCM, VBスクリプト /COMオートメーション、 DTF, 、または経由 隠しWindowsキャッシュフォルダー, 、およびその他のいくつかのオプションを以下に示します。

最初の数段落では MSI に関する重要な情報を提供し、その後に次の段落があります。 14 セクション MSI ファイルをアンインストールするさまざまな方法があります。ふーん。

「せせらぎ、せせらぎ - 終わった」: セクション 1, 2 そして 3通常のアンインストール方法 (したがって推奨されます)。 Personally I use option 3 or 5 from section 3 (両方のロギングを使用したオプションですが、オプション5は静かに実行されます)。あなたがいる場合 とても忙しい, 、すべてのせせらぎをスキップして、これらのいずれかに行きます - それは仕事を成し遂げます。


あなたが持っている場合 完全にアンインストールできない問題 廃止されたものの代替を探しています MsiZap.exe および/または Windows インストーラー クリーンアップ ユーティリティ (MSICU2.exe)、新しいものを試すことができます Microsoft の FixIt ツール (または国際ページ)。他のインストールの問題にもうまくいく可能性があります。


思ったら MSI そして Windows インストーラー 価値があるというよりも問題のほうが多いので、以下について読んでみるとよいでしょう MSI ファイルを使用する企業の利点.


インストールスクリプト MSI セットアップは通常、 setup.exeファイル. 。このようなセットアップのアンインストールに使用するパラメータの詳細については、次のリンクを参照してください。 setup.exe PDF リファレンス シート, Setup.exe および Update.exe のコマンド ライン パラメータ.


一部の MSI ファイルは、 バンドル などの仕組みを介して やけど (WiX ツールキット) または InstallShield Suite プロジェクト。これにより、アンインストールの手順が以下に示すものと若干異なる場合があります。ここは InstallShield Suite プロジェクトの例.


アンインストールを実行していることに注意してください 静かに または インタラクティブに 異なる結果を引き起こす可能性があります (!). 。これが当てはまる理由についてのかなり長い説明については、この投稿をお読みください。 コントロール パネルからのアンインストールは、.msi からの削除とは異なります


アンインストールしようとすると、予期せず元のインストール メディアの入力を求められた場合は、次の回答をお読みください。 MSI がアンインストールを続行するには、元の .msi ファイルが必要なのはなぜですか? また、重要な技術的な詳細については、以下のセクション 12 も参照してください。


持っていたら CCクリーナー または同様のクリーンアップ ツールがインストールされている場合は、次のリンクにジャンプします。 セクション11.


アンインストールが完全に失敗する (実行できない) 場合は、以下のセクション 12 と 13 を参照してください。 潜在的な方法としては、元に戻す"を使用したインストール システムの復元 および/またはクリーンアップツール。


1. Using the original MSI

  • インストールに使用された元の MSI にアクセスできる場合は、次の手順を実行できます。 右クリック それは Windowsエクスプローラ そして選択します アンインストール.
  • セクション 3 で説明したように、コマンド ラインからアンインストールすることもできます。

2. Using the old ARP Applet OR new Windows 8/10 Settings Interface

  • 明らかですが、通常のアプローチについて言及する必要があります

    • ARP = Add / Remove Programs Applet (appwiz.cpl)
    • Windows 10 Settings Interface => 同じ操作のための新しいシェル
  • ARP:

    • 行く 始める 走る アプリウィズ.cpl 入力 プログラムの追加/削除アプレットを開くには (またはコントロール パネルでプログラムの追加/削除をクリックします)
    • クリック "取り除くアンインストールしたい製品の「」
  • 設定インターフェース (Windows 8 / 10):

    • Windows 8 / 10 の新しい設定 GUI を使用する
    • Windowsキー +タップ => Apps & Features. 。エントリを選択してアンインストールします。
    • この方法でアンインストールを実行すると、エラーが報告されることがあります。ご覧になった場合は、以下にコメントを追加してください。

3. Using msiexec.exe command line (directly or via a batch file)

  • アンインストールは次の方法で行うことができます コマンド・プロンプト (cmd.exe), バッチファイル あるいは、実行可能ファイル内から シェル操作.
  • これを行うには、 製品GUID (これを見つける方法については以下を確認してください GUID)、または元の MSI ファイルへのパス (利用可能な場合) msiexec.exe.
  • 以下のすべてのコマンドラインに追加できます /qnアンインストールをサイレント モードで実行する. 。これは、追加/削除アプレットからトリガーされたときにアンインストールが実行される方法です。

    • オプション1:基本的な対話型アンインストール (元の MSI ファイルへのアクセス):

       msiexec.exe /x "c:\filename.msi"
      
    • オプション 2:製品 GUID を使用した基本的な対話型アンインストール (元の MSI ファイルにはアクセスできません - 製品 GUID を見つける方法は次のとおりです - 以下と同じリンク):

       msiexec.exe /x {11111111-1111-1111-1111-11111111111X}
      
    • オプション 3:詳細なログファイルを使用した対話型アンインストール:

       msiexec.exe /x "c:\filename.msi" /L*V "C:\msilog.log"
       msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /L*V "C:\msilog.log"
      
    • オプション 4:フラッシュされた詳細ログファイルによる対話型アンインストール (詳細、ログにフラッシュするオプション - ログを継続的に書き込むため、非常に遅くなる可能性があります):

       msiexec.exe /x "c:\filename.msi" /L*V! "C:\msilog.log"
       msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /L*V! "C:\msilog.log"
      
      • ログにフラッシュするオプションによりアンインストールが遅くなります これは、ログ ファイルがバッチではなく連続的に書き込まれるためです。これにより、セットアップがクラッシュした場合でもログ バッファが失われることがなくなります。

      • 言い換えると、 セットアップがクラッシュし、詳細なログ ファイルに有用な情報がない場合は、このオプションを有効にします。. 。感嘆符を削除してログへのフラッシュ オプションをオフにすると、アンインストールがはるかに速くなります。詳細なログは引き続き取得されますが、前述のとおり、ログ バッファーの一部が失われる可能性があります。

    • オプション 5 (推奨):詳細なログファイルを使用したサイレントアンインストール - 再起動を抑制 (ログへのフラッシュはありません - これが何を意味するかについては、前のオプションを参照してください):

       msiexec.exe /x "c:\filename.msi" /QN /L*V "C:\msilog.log" REBOOT=R
       msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /QN /L*V "C:\msilog.log" REBOOT=R
      

      パラメータの簡単な説明 (このオプションをお勧めするため):

       /X = run uninstall sequence
       /QN = run completely silently
       /L*V "C:\msilog.log"= verbose logging at path specified
       {11111111-1111-1111-1111-11111111111X} = product guid of app to uninstall
       REBOOT=R = prevent unexpected reboot of computer
      

      繰り返しになりますが、製品ガイドを見つける方法は次のとおりです。インストールされている MSI セットアップの製品 GUID を確認するにはどうすればよいですか? (アンインストール コマンドで指定する元の MSI がない場合のアンインストール用)。

  • トップチップ:アンインストール用のログ ファイルを作成すると、次の方法でログ内の問題を見つけることができます。 「値 3」を検索します. 。これは、冗長ファイルの場合に特に便利です。なぜなら、冗長ファイルは非常に冗長だからです :-)。

  • インストールされている MSI の製品 GUID を確認する方法?

  • からのログ記録に関する詳細情報 インストールサイト.org: インストールのログ ファイルを作成するにはどうすればよいですか? - さまざまなオプションの概要と、InstallShield ログの詳細。

  • Msiexec (コマンドライン オプション) - コマンドラインの概要 msiexec.exe から MSDN. 。ここは Technet バージョン.

4. Using the cached MSI database in the super hidden cache folder

  • MSI は、すべての CAB (古い Windows バージョン) を削除し、次の場所にある非常に隠されたシステム フォルダーにインストールされている各 MSI をキャッシュします。 %SystemRoot%\インストーラー (それを表示するには隠しファイルを表示する必要があります)。
  • 注意:この supper の隠しフォルダーは、Windows 7 以降では別の方法で扱われるようになりました。 MSI ファイルはフルサイズでキャッシュされるようになりました. 。詳細については、リンクされたスレッドをお読みください。この回答を見つけて危険な Windows 設定をいじっている人には、読むことをお勧めします。
  • ここでのすべての MSI ファイルにはランダムな名前 (16 進数形式) が割り当てられますが、Windows エクスプローラーのステータス バーを表示し ([表示] -> [ステータス バー])、MSI を選択すると、各 MSI に関する情報を取得できます。MSI からの概要ストリームは、Windows エクスプローラー ウィンドウの下部に表示されます。または、Christopher Galpin が指摘しているように、Windows エクスプローラーの [コメント] 列をオンにして、MSI ファイルを選択します (これを行う方法については、この記事を参照してください).
  • 適切な MSI を見つけたら、それを右クリックして「アンインストール」に進みます。
  • PowerShell を使用して、ローカルにキャッシュされたパッケージへの完全なパスを製品名とともに表示することもできます。私の意見では、これが最も簡単なオプションです。
  • 火をつけるには パワーシェル: Windows キーを押したまま R をタップし、Windows キーを放し、「powershell」と入力して OK を押します. 。それから PowerShell ウィンドウを最大化する そして、以下のコマンドを実行します。
    get-wmiobject Win32_Product | Format-Table Name, LocalPackage -AutoSize

Enter image description here


5. Using PowerShell


6. Using the .NET DTF Class Library (一部の WiX ツールキット)

    using Microsoft.Deployment.WindowsInstaller;

    public static void Uninstall( string productCode)
    {
      Installer.ConfigureProduct(productCode, 0, InstallState.Absent, "REBOOT=\"R\"");
    }

7. Using the Windows Installer Automation API


8. Using a Windows Installer major upgrade

  • Windows インストーラーのメジャー アップグレードは、別の MSI ファイルのインストールの一部として発生する場合があります。
  • メジャー アップグレードは、MSI の「」で関連製品を特定することによって作成されます。アップグレードテーブル」。これらの関連する設定は、表で指定されているように処理されます。通常、これはそれらがアンインストールされることを意味しますが、代わりにメインのセットアップを中止することもできます (通常、ボックスに存在する独自のアプリケーションの上位バージョンを検出するために使用されます)。

9. Using Deployment Systems / Remote Administration Systems

  • SCCM, CAユニセンター, IBMのチボリ, アルティリス Client Management Suite およびその他のいくつか
  • これらのツールは高度なクライアント PC 管理を備えており、これには MSI ファイルのインストールとアンインストールが含まれます
  • これらのツールは、msiexec.exe、オートメーション、 WMI, 、など...さらには、インストールとアンインストールを呼び出す独自の方法さえあります。
  • 私の経験では、これらのツールには多くの「個性」があり、さまざまなやり方に適応する必要があります。

10. Using WMI - Windows Management Instrumentation


11. Using a third-party tool such as ccleaner or similar

  • いくつかの Windows アプリケーションは、MSI パッケージだけでなく従来のインストーラーもアンインストールするための独自のインターフェイスを備えています。
  • ここでは特定のツール (特に商用ツール) を推奨するつもりはありませんが、よく知られているツール CCクリーナー アンインストールインターフェイスなどの機能を備えています(無料版もあります)。それも付け加えておきます このツールは最近マルウェア攻撃を受けました.
  • 無害なソフトウェアであっても、ダウンロード場所にマルウェアが注入される可能性がある (FTP 攻撃) ことを、私たちは皆覚えておくべきだと思います。
    • 私が使う ウイルストータル.com ダウンロードを確認したり、 Sysinternals プロセス エクスプローラー インストール後に実行中のプロセスを確認するには、通常のセキュリティ ソフトウェア (利用可能なもの) を使用します。
    • このアプローチでは、通常、驚くほど多くの「グレーゾーン」ソフトウェア (ツールバー、スマイリー、アドウェアなど) が検出され、いくつかの誤検知も発生します (セキュリティ ソフトウェアによってアクセスがブロックされたり、隔離されたりするため、問題が発生する可能性もあります)。毛羽立ちが多い)。そして確かに本物のマルウェアも同様です。
    • Process Explorer の使用上のヒントについては、こちらをご覧ください。 - 一連のツイート - この Process Explorer ツールは以下に接続します VirusTotal.com 実行中のすべてのプロセスを対話的に確認するには、いくつかの構成手順を実行するだけです。
    • Process Explorer ではファイル署名のチェックは行われますが、ヒューリスティックは行われないことに注意してください。私の理解する限りでは (不審な操作のチェックは行われず、フラグが設定されたファイルについては 60 以上のセキュリティ スイートによるチェックが行われるだけです)。インタラクティブなオンラインヒューリスティック保護を実現するには、定期的なセキュリティ ツールが必要です。
    • 実際のところ、一部のセキュリティ ソフトウェアは、マルウェアが被害を与えるよりも誤検知の問題を引き起こす寸前にあると思います。ランサムウェア時代の有名な最後の言葉...
    • これは十分な余談ですが、私は人々がマルウェアをダウンロードするのを見たくないだけです。あなたのことをしてください ウイルストータル.com 少なくともチェックしてください。
  • このようにアンインストールすれば問題なく動作するはずです。ただし、これらのツールの「クリーンアップ機能」を試すと、多くのことが混乱しすぎると思います。慎重に使用してください。アンインストール機能のみを使用する場合は問題ありません。

12. Using a cleanup tool such as msizap or similar

  • 完全を期すために msizap.exe それは言及されるべきですが 廃止された, サポートされていない そして 時代遅れの. 。新しい Windows バージョンでは使用しないでください。
  • このコマンドラインツール(msizap.exe) GUI も利用可能でした (MSICU2.exe)。どちらのツールも廃止されました。
  • これらのツールの使用目的は次のとおりです。 失敗したアンインストールを一掃する:
  • 一般的には、まれなケースですが、 キャッシュされたランダムな名前の MSI が誤って欠落しています このため、元の MSI を要求してもアンインストールは失敗します。これはまれな問題ですが、私自身も見たことがあります。考えられる原因をいくつか挙げます。 この回答に移動しました.
    • キーワード:システム復元の干渉、不正なクリーンアップ アプリ、msiexec.exe のクラッシュ、停電、セキュリティ ソフトウェアの干渉、MSI 開発デバッグの失敗 (同一のパッケージ コードなど)、ユーザーのいじくりやハッキング (ここには何が入っているのでしょう?)スペースを節約しますか?)など...
    • MSI インストールをザッピングするために使用することもできますが、それは明らかにお勧めできません。
    • 詳しくは: MSI がアンインストールを続行するには、元の .msi ファイルが必要なのはなぜですか?
  • この新しいサポート ツール (このツールも現在非推奨になっています) アンインストールが必要な廃止された MSI パッケージがある場合は、最近の Windows バージョンで試すことができます。
  • saschabeaumont がここにリンクしているツールを使用することを提案する人もいます。 MSI ファイルを使用せずにアンインストールする. 。試してみてうまくいった場合は、ぜひお知らせください。
  • 製品のインストールに実際に使用された元の MSI にアクセスできる場合は、これを使用してアンインストールを実行できます。単なる類似のものではなく、使用された正確な MSI である必要があります。

13. Using system restore ("installation undo" - last resort IMHO)

  • これは厳密に言えば、「」という方法ではありません。アンインストール「しかし」元に戻す「最後のインストール、またはさらに言えば複数のインストール。
  • 復元ポイントを介して復元すると、システムが元の状態に戻ります。 以前のインストール状態 (これに関するビデオデモは YouTube または同様のサイトで見つけることができます)。
  • この機能は完全にまたは部分的に無効にできることに注意してください。マシン全体で永久に無効にすることも、インストールごとにアドホックに無効にすることもできます。
  • システムの復元によって新たに解決できないインストールの問題が発生しましたが、通常は問題なく動作します。. 。明らかに、この機能を楽しみのために使用しないでください。これは最後の手段であり、次のような場合に最適です。 新しいドライバーのロールバック または、インストールされたばかりですぐに問題が発生することが判明したセットアップ (ブルースクリーン, 、再起動、不安定性など...)。
  • 過去に遡る時間が長ければ長いほど、自分自身の手戻りが多くなり、リスクが高くなります。ほとんどのシステムには復元ポイントがわずか数個しかなく、ほとんどの復元ポイントは 1 ~ 2 か月しか遡らないと思います。
  • システムの復元に影響する可能性があることに注意してください。 Windows アップデート その後、他の多くのシステム設定と同様に、再適用する必要があります。これは純粋に迷惑であるだけでなく、セキュリティ問題が再び表面化する原因となる可能性があるため、次のコマンドを使用してターゲット ボックスに対して特定のセキュリティ チェックを実行することをお勧めします。 Microsoft ベースライン セキュリティ アナライザー または同様のツール。
  • システムの復元について言及したので、言及する必要があると思います 前回正常起​​動時の構成機能. 。この機能はアンインストールやシステムの復元とは何の関係もありませんが、機能した、またはシステムが実行されるようになった最後のブート構成です。起動中にブルースクリーンが発生したり停止したりした場合に、システムを再度実行するために使用できます。これはドライバーのインストール後によく発生します。

14. Windows Installer Functions (C++)

完全を期すために、すべての核心、つまり現実的な方法について言及する必要があると思います。 Win32 Windows インストーラー API 関数. 。これらは、上記の「内部」でリストされた他のアプローチのすべてではないにしても、ほとんどの関数で使用される可能性があります。これらは主に、MSI をテクノロジーとして直接扱うアプリケーションまたはソリューションによって使用されます。

serverfault.com に興味深い回答があります。 アンインストールのためのさまざまなプログラムによるアプローチの概要 (COM オートメーション、.NET、Win32 インストーラー機能)。

以下に、アンインストール方法を示す C++ スニペットを示します。 Orca, 10.1.17134.12 への呼び出しを使用して製品コードごとに MsiConfigureProductEx 関数. 。別の製品をアンインストールするには、指定された GUID を置き換えます。 prodcode あなたの製品のものと合わせてください。製品コードを見つけるには、この回答を参照してください。 インストールされている MSI セットアップの製品 GUID を確認するにはどうすればよいですか?

アンインストールは完全な GUI モードで実行されます。サイレント モードまたはその他の GUI モード (縮小モード、基本モードなど) で実行するには、以下を参照してください。 MsiSetInternalUI 関数.

#include "pch.h"

#define WIN32_LEAN_AND_MEAN //Minimize includes from Windows.h
#include <windows.h>
#include <msi.h> // Windows Installer
#include <tchar.h> 

#pragma comment(lib, "msi.lib") // To make code link

int main()
{
    const TCHAR noreboot[] = _T("REBOOT=ReallySuppress");
    const TCHAR prodcode[39] = _T("{D7B80ABC-1950-37B8-F851-C3783EED9C93}"); // Orca, 10.1.17134.12

    UINT res = MsiConfigureProductEx(prodcode, INSTALLLEVEL_DEFAULT, INSTALLSTATE_ABSENT, noreboot);

    return res; // Error Codes: https://msdn.microsoft.com/en-us/library/windows/desktop/aa376931(v=vs.85).aspx
}

スニペットは最新バージョンの Visual Studio 2017 2018 年 9 月現在:

  1. Visual C++ => Windows デスクトップから新しい「Windows コンソール アプリケーション」を作成します。
  2. 上記のコードをコピーしてメイン CPP ファイルに貼り付けます (存在するものはすべて置き換えます)。
  3. これでコードを実行できるようになります。おそらくブレークポイントを設定し、ビルドして実行します。

    • VS2017 のデフォルトのテンプレートへの変更と、その結果発生する可能性のある奇妙なエラーに注意してください。 IntelliSense エンジンが正しく機能するにはエラーが多すぎます.
    • 2018 年 9 月の更新:またテンプレが変わってしまいました。上記の問題はもう発生しません。
    • コード内の MSDN リンクには、msiexec.exe から返される可能性のあるエラー メッセージがリストされています。

また、WMICコマンドを使用してアンインストールを開始できることも忘れないでください:

wmic product get name-<!> gt;これにより、インストールされているすべてのアプリの名前が一覧表示されます

wmic product where name='myappsname' call uninstall-<!> gt;これによりアプリがアンインストールされます。

msiファイル拡張子はmsiexecにマップされます(コマンドプロンプトで.txtファイル名を入力すると、メモ帳/デフォルト.txtファイルハンドラーが起動してファイルが表示されます)。

このように、拡張子が.msiのファイル名を入力すると、実際にはMSIファイルを引数としてmsiexecが実行され、デフォルトのアクションinstallが実行されます。そのため、アンインストールを行うには、アンインストールスイッチを使用してmsiexecを呼び出してアンインストールする必要があります。

wmic product get name

cmdが停止するだけです...数分後に_が点滅し続けます

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstallで、インストールしようとしているソフトウェア名(ProductCodeで指定された名前ではない)のフォルダーが見つかった場合、UninstallStringはアプリケーションのアンインストーラーC:\Program Files\Zune\ZuneSetup.exe /x

を指します

次の構文を試してみます-うまくいきます。

msiexec /x filename.msi /q 

int file.msiをコマンドラインに入力すると、Windowsは自動的にmsiexec file.msiを呼び出していると想定しています。 picture.pngと入力すると、デフォルトの画像ビューアが表示されるため、これを想定しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top