Обнаружение состояния установки

[Функция, связанная с этой страницей, Windows Media Format 11 SDK, является устаревшей возможностью.] Он был заменён на средство чтения источника и средство записи приемника. средства чтения источников и записи приемника оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде чтение исходного кода и запись приемника вместо SDK формата Windows Media 11, когда это возможно. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]

Когда исполняемый файл распространения выполняется на компьютере, он записывает его состояние установки в реестр в качестве значения HRESULT. Состояние установки хранится в записи реестра InstallResult в следующем подразделе:

HKEY_CURRENT_USER\Software\Microsoft\MediaPlayer\Setup

Запись реестра InstallResult имеет следующую форму.

Имя Тип Ценность
InstallResult REG_DWORD HRESULT, указывающий, выполнена ли установка проигрывателя Windows Media и требуется ли перезагрузка.

 

В следующем коде переменные fSucess и fRebootNeeded будут установлены в значения True или False, в зависимости от значения HRESULT, определённого программой установки Windows Media в пакете распространения компонентов.

#include <windows.h>
#include <stdio.h>

// If NS_S_REBOOT_REQUIRED is undefined, use 0xD2AF9.
#ifndef NS_S_REBOOT_REQUIRED
#define NS_S_REBOOT_REQUIRED       0xd2af9
#endif
  
int main( void )
{
    HKEY hKey = NULL;
    BOOL fSuccess = FALSE;
    BOOL fRebootNeeded = FALSE;

    LONG lResult = RegOpenKeyEx( 
        HKEY_CURRENT_USER, 
        TEXT("Software\\Microsoft\\MediaPlayer\\Setup"), 
        0, 
        KEY_QUERY_VALUE, 
        &hKey 
        );

    if ( lResult == ERROR_SUCCESS )
    {
        DWORD dwRegType = 0;   // Registry value type.
        DWORD dwValue = 0;     // Registry value.
        DWORD cbValue = sizeof( dwValue );  // Size of the value in bytes.

        lResult = RegQueryValueEx( 
            hKey, 
            TEXT("InstallResult"), 
            NULL, 
            &dwRegType, 
            (LPBYTE)&dwValue, 
            &cbValue
            );

        if( lResult == ERROR_SUCCESS )
        {
            if (dwRegType == REG_DWORD)
            {
                fSuccess = SUCCEEDED( dwValue );
                fRebootNeeded = ( NS_S_REBOOT_REQUIRED == dwValue );
            }
        }

        RegCloseKey( hKey );
    }

    if( fSuccess )
    {
        printf( "Setup succeeded." );
    }
    else
    {
        printf( "Setup failed." );
    }

    if( fRebootNeeded )
    {
        printf( "A reboot IS required.\n" );
    }
    else
    {
        printf( "A reboot IS NOT required.\n" );
    }
 
    return 0;
}

Перераспределение программного обеспечения