2012-05-10 8 views
3

WindowsサーバにWebsphere MQクライアント32ビットのサイレントインストールを最初に開始するスクリプトを作成する作業が行われました。このスクリプトは、新規インストールのために正常に動作して既にインストールされているプログラムとそのバージョンのシステムを確認するスクリプト

@echo off 
    REM Author : Akshay Sinha 
    REM Date Created : 07/05/2012 
    REM Installing Websphere MQ....... 
    Msiexec /q /i "%CD%\MSI\IBM WebSphere MQ.msi" /l*v .\install.log /m mif_file    TRANSFORMS="1033.mst" AGREETOLICENSE="yes" 
    echo Script to check if the installation failed !!! 
    echo Waiting for installaion to complete....... 
    REM Script will wait for 2 mins, This is to ensure that install.log gets fully    generated. 
    ping 123.45.67.89 -n 1 -w 120000 > nul 
    echo Wait Over 
    find /C "Installation operation failed" "%CD%"\install.log > tmp.log 
    for /f "tokens=1,2,3 delims=:" %%a in (tmp.log) DO (
    SET /a FOUND_STR=%%c 
    echo %FOUND_STR% 
) 
    del tmp.log 
    SET %FOUND_STR%=%FOUND_STR: =% 
    echo %FOUND_STR% 
    if %FOUND_STR% EQU 0 (
    echo Installation Of MQ completed without any errors!!!!! 
    EXIT /B 0 
) 
    if %FOUND_STR% GTR 0 (
    echo There were errors while installing MQ.. Pls Verify!!! 
    EXIT /B 1 
) 

:インストールが成功したかどうかをチェック..... は、だから私は、次のスクリプトを書きました。つまり、既に述べたソフトウェアがシステムにインストールされていない場合です。

しかし、このスクリプトを拡張して、Websphere MQとそのバージョンの既存のインストールを確認する必要があります。 - バージョンが私たちが必要とするバージョンでない場合(もちろん、コマンドラインから提供します)、アンインストールを開始する必要があります。

問題は、ファイルシステムを検索するアプローチを使用したくないということです。 WMIクラスを使用してこのタスクをどのように達成できますか?私はWin32_Productクラスを調べましたが、インストールされているプログラムは1つしか返しませんでしたが(私のシステムには40個のアプリケーションがインストールされていましたが)、私に知りたいのですが: 1)特定のプログラムをシステム(私はVbScriptingまたはバッチプログラミングにオープンしています) 2)インストールされたソフトウェアのレジストリキーの値は、すべてのシステムで同じであり、異なるバージョンで異なりますか?

ありがとうございます。

+0

+1完全な問題の説明+ –

答えて

0

おかげPA ...このコードに沿って何かで始まります。 元のバッチファイルからこのスクリプトを呼び出しています。

 SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ 

と「表示名」と「IBMのWebSphere MQ」を検索: は、実際に私はで利用できるさまざまなレジストリキーを列挙するVBスクリプトを書きました。見つかると、バージョン番号と「製品コード」が表示されます。私たちは、コマンドラインからのインストール目的のために "製品コード"を使用できることに注意してください...以下は、私が書いたスクリプトです。私は皆のためにここに掲示しています。これはかなり自明script..Pleaseはあなたがすべての問題に実行する場合、私に知らせている

'------------------------------------------------------------------------------------  
    'Script Name : listMQ.vbs 
    'Author  : Akshay Sinha 
    'Created  : 05/10/12 
    'Description : This Script attempts to check if the correct version of Websphere MQ    is already installed on the system. 
    '   : If found the Script will exit with a ERRORLEVEL of 0. 
    '   : If found but not of correct version... Script will exit with a 
    '    ERRORLEVEL of 1..Which in turn will initiate a Uninstalation  
    '   : If not found, Script will exit with a ERRORLEVEL of 2 and initiate a 
    '    a fresh installation. 
    '   : Syntax: at command prompt -> 
    '   : C:>Cscript listMQ.vbs 
    '   : Check the value of %ERRORLEVEL% after execution. 
    '   : C:>echo %ERRORLEVEL%. Should give 0,1 or 2 
    '------------------------------------------------------------------------------------ 

    Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE 

    strComputer = "." 
    strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" 
    strEntry1a = "DisplayName" 
    strEntry1b = "QuietDisplayName" 
    strEntry1c = "DisplayVersion" 
    strEntry1d = "UninstallString" 

    Set objReg = GetObject("winmgmts://" & strComputer & "/root/default:StdRegProv") 
    objReg.EnumKey HKLM, strKey, arrSubkeys 
    WScript.Echo "Installed Applications" & VbCrLf 
intVersionNum="1.0.0.0" 
    For Each strSubkey In arrSubkeys 
    intRet1 = objReg.GetStringValue(HKLM, strKey & strSubkey, strEntry1a, strValue1) 
if intRet1 <> "" Then 
objReg.GetExpandedStringValue HKLM, strKey & strSubkey, strEntry1a, strValue1 
intCompare=StrComp("IBM WebSphere MQ",strValue1,vbTextCompare) 
    IF intCompare = 0 THEN 
objReg.GetExpandedStringValue HKLM, strKey & strSubkey, strEntry1c, intVersionNum 
strUninstall=strSubkey 
WScript.Echo "Congratulations!! Websphere MQ is already installed on this system" 
     WScript.Echo strEntry1a & " : " & strValue1 
     WScript.Echo strEntry1c & " : " & intVersionNum 
    END IF 
End If 
Next 

IF intVersionNum="1.0.0.0" THEN 
     WScript.Echo "Sorry Websphere MQ was not found on this system" 
     WScript.Quit 2 
END IF 

intVersionCompare=StrComp("7.0.1.5",intVersionNum,vbTextCompare) 
IF intVersionCompare = 0 THEN 
WScript.Echo "Congratulations!! Correct version of Websphere MQ is installed" 
WScript.Echo "Uninstall String for this product is : " & strUninstall 
WScript.Quit 0 
ELSE 
WScript.Echo "Wrong Version of MQ installed" 
WScript.Echo "Initiating Unistallation....." 
WScript.Quit 1 
END IF 

..........それを使用すること自由に感じなさい。

0

これを実現するには、おそらくWMIは必要ありません。レジストリにhklm\software\Microsoft\Windows\CurrentVersion\Uninstall\キーを問い合わせて、返された値を確認してください。

は、しかし、私はVBScriptを使用して解決策を考え出した...そのTIPのため

for /f "tokens=*" %%a in ('reg query hklm\software\Microsoft\Windows\CurrentVersion\Uninstall\ ^| find /i "IBM Websphere MQ" ') do (
echo %%a 
) 
関連する問題