सीएमडी के माध्यम से चुपचाप कार्यक्रमों की स्थापना


30

क्या कोई ऐसा तरीका है जिसे मैं ग्राफ़िकल इंटरफ़ेस के बिना प्रोग्राम को अनइंस्टॉल कर सकता हूं और इसे सीएमडी के माध्यम से कर सकता हूं?

जवाबों:


19

Microsoft के दिशानिर्देशों के अनुसार स्वयं को स्थापित करने वाला प्रत्येक प्रोग्राम एक रजिस्ट्री प्रविष्टि बनाता है HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall। आमतौर पर, प्रोग्राम की कुंजी इसका GUID होगा, या फिर प्रोग्राम का नाम। उस कुंजी के भीतर एक प्रविष्टि कहा जाएगा UninstallString। इसमें प्रोग्राम को अनइंस्टॉल करने के लिए कमांड निष्पादित किया जाता है।

यदि आप पहले से ही समय से पहले जानते हैं कि आप क्या अनइंस्टॉल कर रहे हैं, तो यह इतना आसान होना चाहिए कि आप इसे अपनी बैच फ़ाइल में डाल सकें। यह मुश्किल हो जाता है जब आप हालांकि उस प्रक्रिया को स्वचालित करने की कोशिश करते हैं। आप regरजिस्ट्री से डेटा प्राप्त करने के लिए कमांड का उपयोग कर सकते हैं , लेकिन यह किसी दिए गए कुंजी के वास्तविक मूल्य के आसपास बहुत सारे पाठ लौटाता है, जिससे इसका उपयोग करना कठिन हो जाता है। आप VBscript या PowerShell का उपयोग करके प्रयोग करना चाह सकते हैं, क्योंकि उनके पास रजिस्ट्री से एक चर में डेटा प्राप्त करने के लिए बेहतर विकल्प हैं।


26

आप WMIC का उपयोग करके GUID इत्यादि को जाने बिना सही अनइंस्टॉलर को लागू कर सकते हैं।

विंडोज द्वारा आंतरिक रूप से ज्ञात कार्यक्रमों के नामों की सूची देखने के लिए:

wmic product get name

अपने उत्पाद का नाम देखें। यह संभवतः "प्रोग्राम और फीचर्स" कंट्रोल पैनल में सूचीबद्ध एक से मेल खाता है , लेकिन हमेशा नहीं।

तब आप उपयोग कर सकते हैं

wmic product where name="_my_product_name" call uninstall

स्थापना रद्द करने के लिए, जिसे AFAIK को चुप रहना चाहिए (यह मेरे अनुभव में है, लेकिन खेत पर दांव लगाने से पहले इसे आज़माएं। मौन इस बात पर निर्भर कर सकता है कि आपका इंस्टॉलर / अनइंस्टालर कैसे बनाया गया था)।

अधिक के लिए यहाँ देखें:

WMIC के लिए microsoft.com पर संदर्भ प्रलेखन भी है।


2
आप /node:"<ComputerName>"पूर्व को जोड़कर दूरस्थ कंप्यूटर के खिलाफ इसे चला सकते हैं wmic /node:"someuser-pc" product get name:। सुनिश्चित करें कि आप नाम के आसपास "" का उपयोग करते हैं या आप "अमान्य ग्लोबल स्विच" त्रुटि में चलेंगे। यह भी सुनिश्चित करें कि आप इसे CMD प्रॉम्प्ट से चलाते हैं न कि पॉवरशेल प्रॉम्प्ट के रूप में "अवैध ग्लोबल स्विच" त्रुटि के लिए पॉवरशेल प्रॉम्प्ट में काम नहीं करता है।
क्रिस मैग्नसन

1
शानदार उत्तर, लेकिन छोटा चेतावनी यह है कि WMIC कमांड को निष्पादित करने के लिए उचित समय ले सकता है। लिस्टिंग के उत्पादों को मेरे पीसी पर लगभग 3 मिनट लगे।
SmacL

विधिवत उल्लेख किया, @SmacL। मेरे पास केवल कुछ समय के लिए इसका उपयोग करने का अवसर है, और आपके सिस्टम पर क्या है इसके आधार पर मैं विश्वास कर सकता हूं कि इसमें थोड़ा समय लगेगा।
कैरन एंटोनियो रोमेरो

7

यदि आपके पास PowerShell 3 (या उच्चतर) स्थापित है, तो आप वाइल्डकार्ड खोजों को करने के लिए एक निश्चित चीज़ (या 'जैसे एक निश्चित चीज़' नाम के सभी प्रोग्राम) प्राप्त करने के लिए WMI कॉल जारी कर सकते हैं, और फिर Uninstallउनमें से प्रत्येक के लिए विधि को कॉल कर सकते हैं:

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


5

यदि आप जानते हैं कि MSI इंस्टॉलर फ़ाइल आप कहाँ उपयोग कर सकते हैं:

Msiexec / Application.msi / शांत की स्थापना रद्द करें


5

यदि कोई प्रोग्राम Windows इंस्टालर का उपयोग करता है, तो आप निम्न आदेशों में से एक का उपयोग कर सकते हैं:

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

हालाँकि, आपके पास न तो उत्पाद कोड है और न ही स्थापना के लिए उपयोग की जाने वाली मूल MSI फ़ाइल।

इसके अलावा, कोई सामान्य स्थापना रद्द करने वाली कमांड नहीं है, क्योंकि इंस्टालर जो विंडोज इंस्टालर का उपयोग नहीं करते हैं वे ऑपरेटिंग सिस्टम द्वारा "अज्ञात" हैं। वे अपने स्वयं के स्थापना रद्द निष्पादन योग्य की आपूर्ति कर सकते हैं, लेकिन क्या उस निष्पादन योग्य को 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 रजिस्ट्री कुंजी को ढूंढें और फिर सॉफ्टवेयर को चुपचाप अनइंस्टॉल करें जो मुझे मिले विकी की तुलना में बहुत अधिक विश्वसनीय है। 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

सही उत्तर ऊपर है, लेकिन विंडोज X64 इंस्टॉल के लिए आपको भी जांचना होगा:

HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.