다음을 통해 공유


설정 상태 감지

[Windows Media Format 11 SDK 이 페이지와 연결된 기능은 레거시 기능입니다. 새로운 원본 판독기 및 싱크 작성기 로 대체되었습니다. 원본 판독기싱크 기록기 Windows 10 및 Windows 11에 최적화되었습니다. 가능한 경우 새 코드에서 Windows Media Format 11 SDK 대신 원본 판독기싱크 기록기 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

재배포 실행 파일이 컴퓨터에서 실행되면 레지스트리의 설치 상태를 HRESULT 값으로 기록합니다. 설치 상태는 다음 하위 키 아래의 InstallResult 레지스트리 항목에 저장됩니다.

HKEY_CURRENT_USER\Software\Microsoft\MediaPlayer\Setup

InstallResult 레지스트리 항목은 다음과 같은 형식입니다.

이름 유형
설치 결과 REG_DWORD Windows Media Player 설치가 성공했는지 여부와 다시 시작해야 하는지 여부를 나타내는 HRESULT.

 

다음 코드는 구성 요소 재배포 패키지에서 Windows Media 설치 프로그램에 의해 기록된 HRESULT 값에 따라 fSuccessfRebootNeeded 변수를 True 또는 False로 적절히 설정합니다.

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

소프트웨어 재배포