Показать полную графическую версию : Как найти часть записи в реестре и запустить её значение с помощью BAT
Valek271183
09-07-2012, 22:29
Дело вот в чём, нужно найти запись в реестре в разделе Uninstall \ NIS в графе UninstallString и запустить её значение, как это можно сделать
Valek271183, а через установку и удаление программ не удаляется?
Valek271183
09-07-2012, 22:58
Нее, нужно чтобы при обнаружении определенной программы предлагалось удалить её, но так как пути в графе UninstallString разные, нужно как-то это автоматизировать
Valek271183, выложите образец содержимого:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NIS
в виде файла реестра.
Valek271183
10-07-2012, 01:23
нужная строчка вот
"UninstallString"="C:\\Program Files (x86)\\NortonInstaller\\{0C55C096-0F1D-4F28-AAA2-85EF591126E7}\\NIS\\562C4DD5\\19.7.1.5\\InstStub.exe /X /ARP"
но путь в ней {0C55C096-0F1D-4F28-AAA2-85EF591126E7} на разных компьютерах разный, т.к. разные версии
Valek271183, я просил выложить именно файл реестра, дабы не создавать у себя ручками.
Попробуйте так (скрипт VBScript):
Option Explicit
Const HKEY_LOCAL_MACHINE = &H80000002
Dim strComputer
Dim strValue
Dim lngProcessID
strComputer = "."
With WScript.CreateObject("WbemScripting.SWbemLocator")
If .ConnectServer(strComputer, "root\default").Get("StdRegProv").GetStringValue(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NIS", "UninstallString", strValue) = 0 Then
If .ConnectServer(strComputer, "root\cimv2").Get("Win32_Process").Create(strValue, Empty, Nothing, lngProcessID) = 0 Then
WScript.Echo "Process [" & strValue & "] (PID:" & lngProcessID & ") executing successfully"
Else
WScript.Echo "Can't execute process [" & strValue & "]"
End If
Else
WScript.Echo "Can't find parameter [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NIS\UninstallString]"
End If
End With
WScript.Quit 0
Можете добавить его в политику (тогда закомментируйте все «WScript.Echo» или добавьте параметр «//b»). Можете, слегка модифицировав, просто перебрать в цикле все потребные машины, исполняя скрипт на своём компьютере.
Valek271183
10-07-2012, 21:28
Iska, как изменить так что бы не найдя раздела в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NIS\UninstallString
переходил в раздел 64 битных OS HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\NIS\UninstallStri ng и выполнял действие там
Заранее спасибо!!!
Valek271183, а NIS, случайно, не использует ли технологию Windows Installer? Т.е., не присутствует ли он в этом:
wmic.exe Product
списке?
Valek271183
23-07-2012, 14:03
нет, в списке его нет
С помощью этого скрипта ищу и удаляю все что нужно
Изучите и переделайте под свои нужды
написано на скору руку
вроде работает и нормуль
Оптимизацией кода и работу русским языком не проверял пока - руки не дошли
Доработал малость и немного окультурил
@echo off
break off
setlocal enableextensions enabledelayedexpansion
if -%1 == - goto missparam
if /I -%1 == --MTX goto begin
if /I -%1 == --MTR goto begin
if /I -%1 == --MNTX goto begin
if /I -%1 == --MNTR goto begin
if /I -%1 == --MX goto begin
if /I -%1 == --MR goto begin
if /I -%1 == --TX goto begin
if /I -%1 == --TR goto begin
if /I -%1 == --NTX goto begin
if /I -%1 == --NTR goto begin
if /I -%1 == --X goto begin
if /I -%1 == --R goto begin
if /I -%1 == --F goto begin
goto missparam
:begin
if -%2 == - goto missparam
set COMD=%1
for /f "tokens=1*" %%i in ("%*") do set STR=%%j
if "-%STR%" == "-" goto missparam
del /f/q UninstallTemplate.cmd >nul 2>nul
del /f/q RepairTemplate.cmd >nul 2>nul
del /f/q "%STR%_UninstallTemplate.cmd" >nul 2>nul
del /f/q "%STR%_RepairTemplate.cmd" >nul 2>nul
for /f "tokens=*" %%i in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall"') do call :cmpr "%%i"
if %PROCESSOR_ARCHITECTURE%==AMD64 for /f "tokens=*" %%i in ('reg query "HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"') do call :cmpr "%%i"
del /f/q "regfind.tmp" >nul 2>nul
goto exit
:cmpr
set PRODCOD=
set REPAIRSTR=
set UNINSSTR=
set INSTDIR=
set DSPNAM=
set DSPVER=
if /I -%COMD% == --F title Find "%STR%" in: %1
reg query %1 >"regfind.tmp" 2>nul
find /I "%STR%" "regfind.tmp" >nul 2>nul
if not -%errorlevel% == -0 goto :eof
reg query %1 >"regfind.tmp" 2>nul
for /f "skip=2 tokens=1,2,*" %%i in ('find /I "DisplayName" "regfind.tmp"') do set DSPNAM=%%k
for /f "skip=2 tokens=1,2,3 delims= " %%i in ('find /I "DisplayVersion" "regfind.tmp"') do set DSPVER=%%k
for /f "skip=2 tokens=3" %%i in ('find /I "DisplayVersion" "regfind.tmp"') do set DSPVER=%%i
for /f "skip=2 tokens=1,2,*" %%i in ('find /I "InstallLocation" "regfind.tmp"') do set INSTDIR=%%k
for /f "skip=2 tokens=1,2,*" %%i in ('find /I "QuietUninstallString" "regfind.tmp"') do set UNINSSTR=%%k
find /I "QuietUninstallString" "regfind.tmp" >nul 2>nul
if -%errorlevel% == -0 goto noustr
for /f "skip=2 tokens=1,2,*" %%i in ('find /I "UninstallString" "regfind.tmp"') do set UNINSSTR=%%k
:noustr
for /f "skip=2 tokens=1,2,*" %%i in ('find /I "RepairString" "regfind.tmp"') do set REPAIRSTR=%%k
for /f "tokens=1" %%i in ("%UNINSSTR%") do set UNINSTALLER=%%~i
if /I "%DSPNAM%" == "" goto :eof
echo Finded "%STR%" in: %1
if not "-%DSPVER%" == "-" echo %DSPNAM% - Version: %DSPVER%
if not "-%INSTDIR%" == "-" echo Installed in: %INSTDIR%
if /I "%UNINSTALLER%" == "MsiExec.exe" goto msin
if /I "%UNINSTALLER%" == "MsiExec" goto nomsin
goto nomsin
:msin
for /f "tokens=1,2 delims={" %%i in ("%UNINSSTR%") do set PRODCOD={%%j
for /f "tokens=1 delims= " %%i in ("%PRODCOD%") do set PRODCOD=%%i
set UNINSSTR=MSIEXEC /X %PRODCOD% /passive /norestart
set REPAIRSTR=MSIEXEC /faums %PRODCOD% /passive /norestart
echo Uninstaller: %UNINSTALLER%
echo Product Code: %PRODCOD%
:nomsin
rem Remove command.
echo Uninstall string: %UNINSSTR%
echo Repair string: %REPAIRSTR%
for /f "tokens=1 delims=-" %%i in ("%COMD%") do set COOMD=%%i
echo User command: -%COOMD%
if /I "-%COMD%" == "--F" goto :eof
if Defined COMD call :%COOMD%
goto quit
:MTX
echo %UNINSSTR% | FIND /I "MSIEXEC /X" >nul 2>nul
if not -%errorlevel% == -0 goto :eof
echo @echo Uninstall: %DSPNAM% - Version: %DSPVER%>>"%STR%_UninstallTemplate.cmd"
echo @start /wait "" %UNINSSTR%>>"%STR%_UninstallTemplate.cmd"
echo.
goto :eof
:MTR
echo %REPAIRSTR% | FIND /I "MSIEXEC /X" >nul 2>nul
if not -%errorlevel% == -0 goto :eof
echo @echo Repair: %DSPNAM% - Version: %DSPVER%>>"%STR%_RepairTemplate.cmd"
echo @start /wait "" %REPAIRSTR%>>"%STR%_RepairTemplate.cmd"
echo.
goto :eof
:MNTX
echo %UNINSSTR% | FIND /I "MSIEXEC /X" >nul 2>nul
if not -%errorlevel% == -0 goto :eof
echo @echo Uninstall: %DSPNAM% - Version: %DSPVER%>>"UninstallTemplate.cmd"
echo @start /wait "" %UNINSSTR%>>"UninstallTemplate.cmd"
echo.
goto :eof
:MNTR
echo %REPAIRSTR% | FIND /I "MSIEXEC /X" >nul 2>nul
if not -%errorlevel% == -0 goto :eof
echo @echo Repair: %DSPNAM% - Version: %DSPVER%>>"RepairTemplate.cmd"
echo @start /wait "" %REPAIRSTR%>>"RepairTemplate.cmd"
echo.
goto :eof
:MX
echo %UNINSSTR% | FIND /I "MSIEXEC /X" >nul 2>nul
if not -%errorlevel% == -0 goto :eof
echo Uninstall: %PRODCOD%:
start /wait "" %UNINSSTR%
goto :eof
:MR
echo %REPAIRSTR% | FIND /I "MSIEXEC /X" >nul 2>nul
if not -%errorlevel% == -0 goto :eof
echo Repair: %PRODCOD%:
start /wait "" %REPAIRSTR%
goto :eof
:TX
echo @echo Uninstall: %DSPNAM% - Version: %DSPVER%>>"%STR%_UninstallTemplate.cmd"
echo @start /wait "" %UNINSSTR%>>"%STR%_UninstallTemplate.cmd"
echo.
goto :eof
:TR
echo @echo Repair: %DSPNAM% - Version: %DSPVER%>>"%STR%_RepairTemplate.cmd"
echo @start /wait "" %REPAIRSTR%>>"%STR%_RepairTemplate.cmd"
echo.
goto :eof
:NTX
echo @echo Uninstall: %DSPNAM% - Version: %DSPVER%>>"UninstallTemplate.cmd"
echo @start /wait "" %UNINSSTR%>>"UninstallTemplate.cmd"
echo.
goto :eof
:NTR
echo @echo Repair: %DSPNAM% - Version: %DSPVER%>>"RepairTemplate.cmd"
echo @start /wait "" %REPAIRSTR%>>"RepairTemplate.cmd"
echo.
goto :eof
:X
echo Uninstall: %PRODCOD%:
start /wait "" %UNINSSTR%
goto :eof
:R
echo Repair: %PRODCOD%:
start /wait "" %REPAIRSTR%
goto :eof
:missparam
echo Error: Parameter missing.
echo Usage:
echo Find and Gen Uninstall script {string}_UninstallTemplate.cmd (MSI only): RegFindUninstall.cmd -MTX {string}
echo Find and Gene Repair script {string}_RepairTemplate.cmd (MSI only): RegFindUninstall.cmd -MTR {string}
echo Find and Gen Uninstall script for {string} UninstallTemplate.cmd (MSI only): RegFindUninstall.cmd -MNTX {string}
echo Find and Gen Repair script for {string} RepairTemplate.cmd (MSI only): RegFindUninstall.cmd -MNTR {string}
echo Find and Uninstall {string} (MSI only): RegFindUninstall.cmd -MX {string}
echo Find and Repair {string} (MSI only): RegFindUninstall.cmd -MR {string}
echo Find and Gen Uninstall script {string}_UninstallTemplate.cmd: RegFindUninstall.cmd -TX {string}
echo Find and Gen Repair script {string}_RepairTemplate.cmd: RegFindUninstall.cmd -TR {string}
echo Find and Gen Uninstall script for {string} UninstallTemplate.cmd: RegFindUninstall.cmd -NTX {string}
echo Find and Gene Repair script for {string} RepairTemplate.cmd: RegFindUninstall.cmd -NTR {string}
echo Find and Uninstall {string}: RegFindUninstall.cmd -X {string}
echo Find and Repair {string}: RegFindUninstall.cmd -R {string}
echo Find {string} and display uninstall parameters: RegFindUninstall.cmd -F {string}
echo.
:exit
timeout 5 >nul 2>nul
:quit
Valek271183
26-07-2012, 17:44
ВСЁ, большое спасибо! Буду разбираться
Ну так скрипт и это делает
смотрите циклы и переменные
Valek271183
26-07-2012, 18:02
NoIZz, ты наверно увидел название темы и посчитал это за ответ?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.