CMDを介したサイレントプログラムのアンインストール


30

グラフィカルインターフェイスを使用せずに、CMD経由でプログラムをアンインストールする方法はありますか?

回答:


19

Microsoftのガイドラインに従って自分自身を適切にインストールするプログラムはすべて、にレジストリエントリを作成しますHKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall。通常、プログラムのキーはGUIDまたはプログラムの名前になります。そのキー内にはと呼ばれるエントリがありUninstallStringます。これには、プログラムをアンインストールするために実行するコマンドが含まれています。

アンインストールするものが事前にわかっている場合は、それをバッチファイルに入れるだけで十分に簡単です。ただし、そのプロセスを自動化しようとすると、注意が必要になります。このregコマンドを使用してレジストリからデータを取得できますが、指定されたキーの実際の値の周りに大量のテキストが返されるため、使用が難しくなります。レジストリからデータを変数に取得するためのより良いオプションがあるため、VBscriptまたはPowerShellを使用して実験することができます。


26

WMICを使用すると、GUIDなどを知らなくても正しいアンインストーラーを起動できます。

Windowsが内部的に認識しているプログラムの名前のリストを表示するには:

wmic product get name

製品名を探してください。「プログラムと機能」コントロールパネルにリストされているものとおそらく一致しますが、常に一致するは限りません。

その後、使用することができます

wmic product where name="_my_product_name" call uninstall

私の経験では、これはサイレントであるはずですが、アンインストールを実行するために(これは私の経験ではありますが、ファームにベットする前に試してください。

詳細はこちらをご覧ください:

microsoft.comにはWMICのリファレンスドキュメントもあります。


2
/node:"<ComputerName>"ex:を追加して、リモートコンピューターに対してこれを実行できますwmic /node:"someuser-pc" product get name。名前の前後に必ず「」を使用してください。そうしないと、「Invalid Global Switch」エラーが発生します。また、「Invalid Global Switch」エラーの「」回避策がPowerShellプロンプトで機能しないため、PowerShellプロンプトではなくCMDプロンプトからこれを実行してください。
クリスマグナソン

1
すばらしい答えですが、小さな注意点は、WMICがコマンドを実行するのにかなりの時間がかかることです。PCでの製品の一覧表示には約3分かかりました。
SmacL

@SmacL。私はこれを数回しか使用する機会がありませんでした、そして、あなたのシステムにあるものに応じて、私はそれがしばらくかかると信じることができます。
カルノーアントニオロメロ

7

PowerShell 3(またはそれ以上)がインストールされている場合は、WMI呼び出しを発行して、特定の名前のすべてのプログラムを取得(または特定の「好き」なワイルドカード検索を実行)し、Uninstallそれぞれのメソッドを呼び出すことができます:

(Get-WmiObject -Query "SELECT * FROM Win32_Product WHERE Name like '%Partial Name%'").uninstall()


5

MSIインストーラファイルの場所がわかっている場合は、次を使用できます。

Msiexec / uninstall Application.msi / quiet


5

プログラムがWindowsインストーラーを使用する場合、次のコマンドのいずれかを使用できます。

msiexec /q /x <ProductCodeGuid>
msiexec /q /x <PathToMsi>

ただし、インストールに使用される製品コードも元のMSIファイルもない可能性があります。

それ以外には、Windowsインストーラーを使用しないインストーラーはオペレーティングシステムによって「不明」であるため、一般的なアンインストールコマンドはありません。独自のアンインストール実行可能ファイルを提供する場合がありますが、その実行可能ファイルにGUIなしで実行する方法が含まれているかどうかは、個々のソフトウェアパッケージによって異なります。


1

VBScriptスクリプトは、必要なプログラムをアンインストールするのに役立ちます。

このスクリプトを使用するには、レジストリにあるソフトウェア名が必要です。

スクリプトにアプリケーション名を入力し、管理者権限で実行するだけです。アプリケーションがアンインストールされます。ただし、これはウィンドウベースのアプリケーションでのみ機能します。レジストリのアンインストール文字列にエントリを作成しないスタンドアロンセットアップまたはアプリの場合、スクリプトは機能しません。

そのため、その場合は、アプリケーションをアンインストールする別の方法を見つける必要があります。

コード:

On error resume Next

Dim strName, WshShell, oReg, keyname

Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."

'=============================================
'Change the value here with DisplayName's value
strName = " "
'=============================================
Set WshShell = CreateObject("WScript.Shell")
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
oReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
    keyname = ""
       keyname = wshshell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & subkey & "\DisplayName")
    If keyname = strName then
        i = subkey
    End If
Next

If i Then

    WshShell.Run "MSIEXEC.EXE /X " & i & " /QN", 1, True
End If

Set WshShell = Nothing
set ObjReg = Nothing

WScript.Quit

1

このバッチは、ソフトウェアののUninstallStringレジストリキーを見つけて、ある静かソフトウェア[アンインストール使用している、これをチェックアウトWMICに比べはるかに信頼性の高い私が見つけました。 https://community.spiceworks.com/topic/2143980-deploy-or-upgrade-java-8-via-shutdown-script-remove-old-javas

::It extracts software software GUID, then use the GUID to search the name and version
@echo off
setlocal ENABLEDELAYEDEXPANSION

set SoftwareName=Java 8
set NewVersion=8.0.1720.11
set x86GUID=HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
set x64GUID=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
set Installer=\\dc\sources\jre-8u172-windows-i586.exe REMOVEOUTOFDATEJRES=1 AUTO_UPDATE=0 EULA=0 NOSTARTMENU=1 SPONSORS=0 WEB_ANALYTICS=0 WEB_JAVA=1 WEB_JAVA_SECURITY_LEVEL=H /s
REM set Installer=d:\downloads\jre-8u172-windows-i586.exe REMOVEOUTOFDATEJRES=1 AUTO_UPDATE=0 EULA=0 NOSTARTMENU=1 SPONSORS=0 WEB_ANALYTICS=0 WEB_JAVA=1 WEB_JAVA_SECURITY_LEVEL=H /s

REM It's faster to first locate the software GUID, then search it's Name, Version & UninstallString
for /f "delims=" %%P in ('reg query "%x86GUID%" /s /f "%SoftwareName%" 2^>nul ^| findstr "HKEY_LOCAL_MACHINE"') do (
  echo %%P
  reg query "%%P" /v "DisplayVersion" 2>nul | findstr /r /c:"  %NewVersion%" >nul && (
    for /f "tokens=2*" %%A in ('reg query "%%P" /v "DisplayName" 2^>nul ^|findstr "DisplayName"') do echo %%B has already been installed
    for /f "tokens=2*" %%A in ('reg query "%%P" /v "DisplayVersion" 2^>nul ^|findstr "DisplayVersion"') do echo Version: %%B
    goto :EOF
  ) || (
    for /f "tokens=2*" %%A in ('reg query "%%P" /v "DisplayName" 2^>nul ^|findstr "DisplayName"') do echo Found other version %%B, upgrade in progress
    for /f "tokens=2*" %%A in ('reg query "%%P" /v "UninstallString" 2^>nul ^|findstr "UninstallString"') do (
      echo %%B | findstr /c:"MsiExec.exe"  >nul && (
        set MsiStr=%%B
        set MsiStr=!MsiStr:/I=/X!
        echo !MsiStr! /quiet /norestart
        !MsiStr! /quiet /norestart
        rem %Installer%
      ) || (
        echo None MsiExec Uninstall String %%B
        rem "%%B" /S
      )
    )
  )
)
if not defined MsiStr (
  echo %SoftwareName% not found, install it?
  rem %Installer%
)

endlocal

0

正しい答えは上にありますが、Windows X64インストールの場合は、次のことも確認する必要があります。

HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.