जवाबों:
Microsoft के दिशानिर्देशों के अनुसार स्वयं को स्थापित करने वाला प्रत्येक प्रोग्राम एक रजिस्ट्री प्रविष्टि बनाता है HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
। आमतौर पर, प्रोग्राम की कुंजी इसका GUID होगा, या फिर प्रोग्राम का नाम। उस कुंजी के भीतर एक प्रविष्टि कहा जाएगा UninstallString
। इसमें प्रोग्राम को अनइंस्टॉल करने के लिए कमांड निष्पादित किया जाता है।
यदि आप पहले से ही समय से पहले जानते हैं कि आप क्या अनइंस्टॉल कर रहे हैं, तो यह इतना आसान होना चाहिए कि आप इसे अपनी बैच फ़ाइल में डाल सकें। यह मुश्किल हो जाता है जब आप हालांकि उस प्रक्रिया को स्वचालित करने की कोशिश करते हैं। आप reg
रजिस्ट्री से डेटा प्राप्त करने के लिए कमांड का उपयोग कर सकते हैं , लेकिन यह किसी दिए गए कुंजी के वास्तविक मूल्य के आसपास बहुत सारे पाठ लौटाता है, जिससे इसका उपयोग करना कठिन हो जाता है। आप VBscript या PowerShell का उपयोग करके प्रयोग करना चाह सकते हैं, क्योंकि उनके पास रजिस्ट्री से एक चर में डेटा प्राप्त करने के लिए बेहतर विकल्प हैं।
आप WMIC का उपयोग करके GUID इत्यादि को जाने बिना सही अनइंस्टॉलर को लागू कर सकते हैं।
विंडोज द्वारा आंतरिक रूप से ज्ञात कार्यक्रमों के नामों की सूची देखने के लिए:
wmic product get name
अपने उत्पाद का नाम देखें। यह संभवतः "प्रोग्राम और फीचर्स" कंट्रोल पैनल में सूचीबद्ध एक से मेल खाता है , लेकिन हमेशा नहीं।
तब आप उपयोग कर सकते हैं
wmic product where name="_my_product_name" call uninstall
स्थापना रद्द करने के लिए, जिसे AFAIK को चुप रहना चाहिए (यह मेरे अनुभव में है, लेकिन खेत पर दांव लगाने से पहले इसे आज़माएं। मौन इस बात पर निर्भर कर सकता है कि आपका इंस्टॉलर / अनइंस्टालर कैसे बनाया गया था)।
अधिक के लिए यहाँ देखें:
WMIC के लिए microsoft.com पर संदर्भ प्रलेखन भी है।
यदि आपके पास PowerShell 3 (या उच्चतर) स्थापित है, तो आप वाइल्डकार्ड खोजों को करने के लिए एक निश्चित चीज़ (या 'जैसे एक निश्चित चीज़' नाम के सभी प्रोग्राम) प्राप्त करने के लिए WMI कॉल जारी कर सकते हैं, और फिर Uninstall
उनमें से प्रत्येक के लिए विधि को कॉल कर सकते हैं:
(Get-WmiObject -Query "SELECT * FROM Win32_Product WHERE Name like '%Partial Name%'").uninstall()
यदि कोई प्रोग्राम Windows इंस्टालर का उपयोग करता है, तो आप निम्न आदेशों में से एक का उपयोग कर सकते हैं:
msiexec /q /x <ProductCodeGuid>
msiexec /q /x <PathToMsi>
हालाँकि, आपके पास न तो उत्पाद कोड है और न ही स्थापना के लिए उपयोग की जाने वाली मूल MSI फ़ाइल।
इसके अलावा, कोई सामान्य स्थापना रद्द करने वाली कमांड नहीं है, क्योंकि इंस्टालर जो विंडोज इंस्टालर का उपयोग नहीं करते हैं वे ऑपरेटिंग सिस्टम द्वारा "अज्ञात" हैं। वे अपने स्वयं के स्थापना रद्द निष्पादन योग्य की आपूर्ति कर सकते हैं, लेकिन क्या उस निष्पादन योग्य को GUI के बिना चलाने का एक तरीका शामिल है, जो व्यक्तिगत सॉफ़्टवेयर पैकेज पर निर्भर करता है।
एक 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
इसे देखें, यह एक बैच का उपयोग कर रहा है सॉफ्टवेयर की 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
/node:"<ComputerName>"
पूर्व को जोड़कर दूरस्थ कंप्यूटर के खिलाफ इसे चला सकते हैंwmic /node:"someuser-pc" product get name
:। सुनिश्चित करें कि आप नाम के आसपास "" का उपयोग करते हैं या आप "अमान्य ग्लोबल स्विच" त्रुटि में चलेंगे। यह भी सुनिश्चित करें कि आप इसे CMD प्रॉम्प्ट से चलाते हैं न कि पॉवरशेल प्रॉम्प्ट के रूप में "अवैध ग्लोबल स्विच" त्रुटि के लिए पॉवरशेल प्रॉम्प्ट में काम नहीं करता है।