Partager via


Détection de l’état de l’installation

Lorsque l’exécutable de redistribution s’exécute sur un ordinateur, il enregistre son installation status dans le Registre en tant que valeur HRESULT. Le status d’installation est stocké dans l’entrée de Registre InstallResult sous la sous-clé suivante :

HKEY_CURRENT_USER\Software\Microsoft\MediaPlayer\Setup

L’entrée de Registre InstallResult se présente sous la forme suivante.

Nom Type Valeur
InstallResult REG_DWORD HRESULT qui indique si Lecteur multimédia Windows’installation a réussi et si un redémarrage est nécessaire.

 

Le code suivant définit les variables fSucess et fRebootNeededed surTrue ou False, le cas échéant, en fonction de la valeur HRESULT écrite par le programme d’installation de Windows Media dans le package de redistribution des composants.

#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;
}

Redistribution des logiciels