Menargetkan aplikasi Anda untuk Windows

Di Windows 8.1 dan yang lebih baru, fungsi GetVersion dan GetVersionEx telah tidak digunakan lagi. Pada Windows 10, fungsi VerifyVersionInfo 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).

Catatan

Fungsi GetVersion, GetVersionEx, VerifyVersionInfo, dan Version Helper hanya untuk aplikasi desktop. Aplikasi Windows universal dapat menggunakan properti AnalyticsInfo.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> manifes, Anda harus menambahkan <elemen supportedOS> untuk setiap versi Windows yang ingin Anda nyatakan bahwa aplikasi Anda mendukung.

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 menyertakan <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 versi 32-bit x86 aplikasi Anda akan tunduk pada virtualisasi file UAC, yang memungkinkan penulisan ke folder istimewa administrator seperti folder sistem Windows untuk berhasil ketika mereka sebaliknya akan gagal, tetapi mengalihkannya ke folder "VirtualStore" khusus pengguna.