InstallShield判断DotNetFramework指定版本是否安装的脚本代码

// @param szVersion Version to check, e.g. "v2.0", "v3.5" and so on.

function DetectDotNet(szVersion)
    NUMBER nRootKey, nResult;
    LIST lstVersions;
    BOOL bRet;
    STRING szString;
begin
    bRet = FALSE;
    nRootKey = HKEY_LOCAL_MACHINE;
    lstVersions = ListCreate(STRINGLIST);
    if (lstVersions = LIST_NULL) then
        MessageBox ("Unable to create necessary lists.", SEVERE);
        abort;
    endif;
   
    if (RegDBSetDefaultRoot(nRootKey) = 0) then
        nResult = RegDBQueryKey("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP",
            REGDB_KEYS, lstVersions);
        if (nResult = 0) then
            // Get the first string in the list.
            nResult = ListGetFirstString(lstVersions, szString);
   
            // Loop while list items continue to be retrieved.
            while (nResult != END_OF_LIST)
                // Detect the current element.
                if (StrFind(szString, szVersion) = 0) then
                    bRet = TRUE;
                    nResult = END_OF_LIST;  // Force to exit
                else
                    // Get the next string in the list.
                    nResult = ListGetNextString(lstVersions, szString);
                endif;
            endwhile;
        endif;
    endif;
   
    ListDestroy(lstVersions);  

    return bRet;
end;

无人值守安装.Net Framework 3.5的批处理脚本(传入参数是dotnetfx35.exe所在的绝对目录,解决自动连网下载的问题):

@echo off
setlocal

set INSTALLER31="%~1WindowsInstaller-KB893803-v2-x86.exe"
set DOTNETFX35="%~1dotnetfx35.exe"
set NDP35SP1="%~1NDP35SP1-KB958484-x86.exe"

echo Installing %INSTALLER31%
%INSTALLER31% /quiet /norestart /nobackup

echo Extracting %DOTNETFX35%
%DOTNETFX35% /x:%TEMP% /passive

cd /d "%TEMP%\wcu\dotNetFramework"

echo Installing dotNetFx35setup.exe
dotNetFx35setup.exe /lang:ENU /norestart /passive

echo Removing extracted files
cd /d "%TEMP%"
rd /s /q wcu

echo Installing %NDP35SP1%
%NDP35SP1% /norestart /passive

endlocal

Tags:

Leave a Reply