Menargetkan aplikasi Anda untuk Windows

Di Windows 8.1 dan yang lebih baru, fungsi GetVersion dan GetVersionEx telah ditolak. Pada Windows 10, fungsiVerifyVersionInfo juga tidak digunakan lagi. Anda masih dapat memanggil fungsi yang tidak digunakan lagi, tetapi jika aplikasi Anda tidak secara khusus menargetkan Windows 8.1 atau yang lebih baru, maka fungsi akan mengembalikan versi Windows 8 (6.2).

Nota

GetVersion, GetVersionEx, VerifyVersionInfo, dan fungsi Version Helper hanya untuk aplikasi desktop. Aplikasi Universal Windows dapat menggunakan propertiAnalyticsInfo.VersionInfo untuk log telemetri dan diagnostik.

Agar aplikasi Anda menargetkan Windows 8.1 atau yang lebih baru, Anda harus menyertakan manifes aplikasi (dapat dieksekusi) untuk aplikasi yang dapat dieksekusi. Kemudian, di bagian kompatibilitas <> dari manifes, Anda harus menambahkan elemen <supportedOS> untuk setiap versi Windows yang ingin Anda nyatakan didukung oleh aplikasi Anda.

Contoh berikut menunjukkan file manifes aplikasi untuk aplikasi yang mendukung semua versi Windows dari Windows Vista ke Windows 11:

<!-- example.exe.manifest -->
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
    <assemblyIdentity
        type="win32"
        name="Contoso.ExampleApplication.ExampleBinary"
        version="1.2.3.4"
        processorArchitecture="x86"
    />
    <description>Contoso Example Application</description>
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
        <application>
            <!-- Windows 10 and Windows 11 -->
            <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
            <!-- Windows 8.1 -->
            <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
            <!-- Windows 8 -->
            <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
            <!-- Windows 7 -->
            <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
            <!-- Windows Vista -->
            <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
        </application>
    </compatibility>
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
            <requestedPrivileges>
                <!--
                  UAC settings:
                  - app should run at same integrity level as calling process
                  - app does not need to manipulate windows belonging to
                    higher-integrity-level processes
                  -->
                <requestedExecutionLevel
                    level="asInvoker"
                    uiAccess="false"
                />   
            </requestedPrivileges>
        </security>
    </trustInfo>
</assembly>

Mendeklarasikan dukungan untuk Windows 8.1 atau yang lebih baru dalam manifes aplikasi Anda tidak akan berpengaruh saat menjalankan aplikasi Anda pada sistem operasi sebelumnya.

Manifes aplikasi di atas juga mencakup bagian <trustInfo>, yang menentukan bagaimana sistem harus memperlakukannya sehubungan dengan Kontrol Akun Pengguna (UAC). Menambahkan trustInfo tidak penting, tetapi sangat disarankan, bahkan ketika aplikasi Anda tidak memerlukan perilaku terkait UAC tertentu. Secara khusus, jika Anda tidak menambahkan trustInfo sama sekali, maka aplikasi versi 32-bit x86 Anda akan dikenakan virtualisasi file UAC, yang memungkinkan penulisan ke folder dengan hak administrator seperti folder sistem Windows agar berhasil ketika seharusnya gagal, tetapi mengarahkannya ke folder "VirtualStore" yang spesifik untuk pengguna.