共用方式為


基本 DISM API 範例

部署映像服務與管理 (DISM) API 可讓您在 DISM 平臺上建置自訂的解決方案。 您可以使用 DISM API 在 Windows 映像中安裝、卸載、設定及更新 Windows 功能、套件和驅動程式。

使用基本函式的範例

此範例示範如何使用一些基本的 DISM API 功能,包括開啟線上會話、套用自動安裝,以及取得延伸的錯誤資訊。

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

int _cdecl wmain()
{
    HRESULT hr = S_OK; 
    HRESULT hrLocal = S_OK; 
    DismSession session = DISM_SESSION_DEFAULT; 
    DismSession sessionOnline = DISM_SESSION_DEFAULT; 
    BOOL bMounted = FALSE; 
    DismFeatureInfo *pFeatureInfo = NULL; 
    DismString *pErrorString = NULL; 

    // Initialize the API
    hr = DismInitialize(DismLogErrorsWarningsInfo, L"C:\\MyLogFile.txt", NULL); 
    if( FAILED(hr)) 
    {
        wprintf(L"DismInitialize Failed: %x\n", hr); 
        goto Cleanup; 
    }

    wprintf(L"Mounting: ");

    // Mount a VHD image 
    hr = DismMountImage(L"C:\\Install.VHD",
                        L"C:\\MountPath",
                        1, 
                        NULL, 
                        DismImageIndex, 
                        DISM_MOUNT_READWRITE, 
                        NULL, 
                        NULL, 
                        NULL); 
    if( FAILED(hr)) 
    {
        wprintf(L"\nDismMountImage Failed: %x\n", hr); 
        goto Cleanup; 
    }

    bMounted = TRUE; 
    wprintf(L"Complete.\n\n");

    // Open a session against the mounted image
    hr = DismOpenSession(L"C:\\MountPath",
                         NULL, 
                         NULL, 
                         &session); 
    if( FAILED(hr)) 
    {
        wprintf(L"DismOpenSession Failed: %x\n", hr); 
        goto Cleanup; 
    }

    // Apply an unattend file to the offline image
    hr = DismApplyUnattend(session, 
                           L"C:\\unattend.xml",
                           FALSE); 
    if( FAILED(hr)) 
    {
        wprintf(L"DismApplyUnattend Failed: %x\n", hr); 
        goto Cleanup; 
    }

    // Also open a session against the running operating system (online image) 
    hr = DismOpenSession(DISM_ONLINE_IMAGE, 
                         NULL, 
                         NULL, 
                         &sessionOnline); 
    if( FAILED(hr)) 
    {
        wprintf(L"DismOpenSession Failed: %x\n", hr); 
        goto Cleanup; 
    }

    // Get the feature info for a non-existent feature to demonstrate error
    // functionality
    hr = DismGetFeatureInfo(sessionOnline, 
                            L"ThisIsAFakeFeatureName",
                            NULL, 
                            DismPackageNone, 
                            &pFeatureInfo); 
    if( FAILED(hr)) 
    {
        wprintf(L"DismGetFeatureInfo Failed: %x\n", hr); 

        hrLocal = DismGetLastErrorMessage(&pErrorString); 
        if( FAILED(hrLocal)) 
        {
            wprintf(L"DismGetLastErrorMessage Failed: %x\n", hr); 
            goto Cleanup; 
        }
        else
        {
            wprintf(L"The last error string was: %s\n", pErrorString->Value); 
        }
    }


Cleanup: 

    // Delete the memory associated with the objects that were returned. 
    // pFeatureInfo should be NULL due to the expected failure above, but the
    // DismDelete function will still return success in this case. 
    hrLocal = DismDelete(pFeatureInfo); 
    if( FAILED(hrLocal)) 
    {
        wprintf(L"DismDelete Failed: %x\n", hrLocal); 
    }

    hrLocal = DismDelete(pErrorString); 
    if( FAILED(hrLocal)) 
    {
        wprintf(L"DismDelete Failed: %x\n", hrLocal); 
    }

    // Close the DismSession to free up resources tied to the offline session
    hrLocal = DismCloseSession (session); 
    if( FAILED(hrLocal)) 
    {
        wprintf(L"DismCloseSession Failed: %x\n", hrLocal); 
    }

    // Close the DismSession to free up resources tied to the online session
    hrLocal = DismCloseSession (sessionOnline); 
    if( FAILED(hrLocal)) 
    {
        wprintf(L"DismCloseSession Failed: %x\n", hrLocal); 
    }

    // Unmount the image if is has been mounted.  If the package was successfully added,
    // then commit the changes.  Otherwise, discard the
    // changes
    if (bMounted) 
    {
        hrLocal = DismUnmountImage(L"C:\\MountPath",
                                   DISM_DISCARD_IMAGE, 
                                   NULL, 
                                   NULL, 
                                   NULL); 
        if( FAILED(hrLocal)) 
        {
            wprintf(L"DismUnmountImage Failed: %x\n", hrLocal); 
        }
    }

    // Shutdown the DISM API to free up remaining resources
    hrLocal = DismShutdown();
    if( FAILED(hrLocal)) 
    {
        wprintf(L"DismShutdown Failed: %x\n", hr); 
    }

    wprintf(L"Return code is: %x\n", hr); 
    return hr; 
}

DISM API 範例Samples

HLK API 參考資料

使用 DISM API

建立 DISM 應用程式

DISM API 疑難排解