Gỡ cài đặt chương trình âm thầm qua CMD


30

Có cách nào để tôi có thể gỡ cài đặt chương trình mà không cần giao diện đồ họa và thực hiện thông qua CMD không?

Câu trả lời:


19

Mỗi chương trình tự cài đặt đúng theo hướng dẫn của Microsoft sẽ tạo một mục đăng ký HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall. Thông thường, chìa khóa cho chương trình sẽ là GUID của nó, hoặc tên khác của chương trình. Trong khóa đó sẽ là một mục được gọi UninstallString. Điều này chứa lệnh để thực thi để gỡ cài đặt chương trình.

Nếu bạn đã biết trước những gì bạn sẽ gỡ cài đặt, nó sẽ đủ dễ dàng để chỉ cần đặt nó trong tệp bó của bạn. Nó trở nên khó khăn khi bạn cố gắng tự động hóa quá trình đó. Bạn có thể sử dụng reglệnh để lấy dữ liệu từ sổ đăng ký, nhưng nó trả về rất nhiều văn bản xung quanh giá trị thực của một khóa đã cho, khiến nó khó sử dụng. Bạn có thể muốn thử nghiệm sử dụng VBscript hoặc PowerShell, vì họ có các tùy chọn tốt hơn để nhận dữ liệu từ sổ đăng ký thành một biến.


26

Bạn có thể gọi trình gỡ cài đặt chính xác mà không cần biết GUID, v.v. bằng cách sử dụng WMIC.

Để xem danh sách tên của các chương trình mà Windows đã biết trong nội bộ:

wmic product get name

Hãy tìm tên sản phẩm của bạn. Nó có thể phù hợp với bảng liệt kê trong bảng điều khiển "Chương trình và Tính năng" , nhưng không phải lúc nào cũng vậy.

Sau đó, bạn có thể sử dụng

wmic product where name="_my_product_name" call uninstall

để thực hiện gỡ cài đặt, AFAIK nên im lặng (đó là kinh nghiệm của tôi, nhưng hãy thử trước khi bạn đặt cược vào trang trại. Sự im lặng có thể phụ thuộc vào cách trình cài đặt / trình gỡ cài đặt của bạn được xây dựng).

Xem tại đây để biết thêm:

Ngoài ra còn có tài liệu tham khảo cho WMIC trên microsoft.com.


2
Bạn có thể chạy nó với các máy tính từ xa bằng cách thêm /node:"<ComputerName>"ex : wmic /node:"someuser-pc" product get name. Hãy chắc chắn rằng bạn sử dụng "" xung quanh tên nếu không bạn sẽ gặp phải lỗi "Chuyển đổi toàn cầu không hợp lệ". Ngoài ra, hãy chắc chắn rằng bạn chạy nó từ dấu nhắc CMD chứ không phải lời nhắc PowerShell vì cách khắc phục "" cho lỗi "Chuyển đổi toàn cầu không hợp lệ" không hoạt động trong lời nhắc PowerShell.
Chris Magnuson

1
Câu trả lời tuyệt vời, nhưng hãy cẩn thận là WMIC có thể mất một khoảng thời gian hợp lý để thực hiện một lệnh. Danh sách sản phẩm mất khoảng 3 phút trên PC của tôi.
SmacL

Ghi chú hợp lệ, @SmacL. Tôi chỉ có dịp sử dụng điều này một vài lần, và tùy thuộc vào những gì trên hệ thống của bạn, tôi có thể tin rằng nó sẽ mất một thời gian.
Carnot Antonio Romero

7

Nếu bạn đã cài đặt PowerShell 3 (hoặc cao hơn), bạn có thể thực hiện cuộc gọi WMI để nhận tất cả các chương trình được đặt tên một thứ nhất định (hoặc 'giống như' một thứ nhất định, để thực hiện tìm kiếm ký tự đại diện), sau đó gọi Uninstallphương thức cho từng trong số chúng:

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


5

Nếu bạn biết tệp trình cài đặt MSI ở đâu, bạn có thể sử dụng:

Msiexec / gỡ cài đặt Application.msi / quiet


5

Nếu một chương trình sử dụng Windows Installer, bạn có thể sử dụng một trong các lệnh sau:

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

Tuy nhiên, bạn có thể không có mã sản phẩm cũng như tệp MSI gốc được sử dụng để cài đặt.

Ngoài ra, không có lệnh gỡ cài đặt chung, vì các trình cài đặt không sử dụng Windows Installer là "không xác định" bởi hệ điều hành. Họ có thể cung cấp gỡ cài đặt riêng của họ, nhưng liệu thực thi đó có bao gồm cách chạy nó mà không cần GUI hay không phụ thuộc vào gói phần mềm riêng lẻ.


1

Một tập lệnh VBScript sẽ giúp bạn gỡ cài đặt chương trình yêu cầu.

Để sử dụng tập lệnh này, bạn sẽ yêu cầu tên phần mềm được đặt trong sổ đăng ký của bạn.

Chỉ cần nhập tên ứng dụng trong tập lệnh và chạy nó với quyền quản trị viên; nó sẽ gỡ cài đặt ứng dụng. Nhưng điều này sẽ chỉ hoạt động cho một ứng dụng dựa trên cửa sổ; đối với thiết lập độc lập hoặc ứng dụng không tạo mục trong chuỗi cài đặt đăng ký, tập lệnh sẽ không hoạt động.

Vì vậy, trong trường hợp đó, bạn sẽ phải tìm một cách khác để gỡ cài đặt ứng dụng.

Mã số:

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

Hãy kiểm tra xem, cái này đang sử dụng một đợt tìm khóa đăng ký UninstallString của phần mềm và sau đó gỡ cài đặt phần mềm một cách im lặng, đáng tin cậy hơn nhiều so với wmic tôi tìm thấy. https://community.spiceworks.com/topic/2143980-deploy-or-upTHER-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

Câu trả lời đúng là ở trên, nhưng đối với cài đặt Windows X64, bạn cũng cần kiểm tra:

HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.