Pemeriksaan versi Windows

Versi OS telah dinaikkan dengan rilis OS Windows 10. Ini berarti bahwa nomor versi internal untuk Windows 10 juga telah diubah menjadi 10.0. Seperti di masa lalu, kita berusaha keras untuk mempertahankan kompatibilitas aplikasi dan perangkat setelah versi OS berubah. Untuk sebagian besar kategori aplikasi (tanpa dependensi kernel) perubahan tidak akan berdampak negatif pada fungsionalitas aplikasi, dan aplikasi yang ada akan terus berfungsi dengan baik di Windows 10.

Manifestasi

Manifestasi perubahan ini khusus untuk aplikasi. Ini berarti aplikasi apa pun yang secara khusus memeriksa versi OS akan mendapatkan nomor versi yang lebih tinggi, yang dapat menyebabkan satu atau beberapa situasi berikut:

  • Penginstal aplikasi mungkin tidak dapat menginstal aplikasi, dan aplikasi mungkin tidak dapat memulai.
  • Aplikasi mungkin menjadi tidak stabil atau crash.
  • Aplikasi mungkin menghasilkan pesan kesalahan, tetapi terus berfungsi dengan baik.

Beberapa aplikasi melakukan pemeriksaan versi dan hanya meneruskan peringatan kepada pengguna. Namun, ada aplikasi yang terikat sangat ketat ke pemeriksaan versi (dalam driver, atau dalam mode kernel untuk menghindari deteksi). Dalam kasus ini, aplikasi akan gagal jika versi yang salah ditemukan. Daripada pemeriksaan versi, kami merekomendasikan salah satu pendekatan berikut:

  • Jika aplikasi bergantung pada fungsionalitas API tertentu, pastikan Anda menargetkan versi API yang benar.
  • Nomor versi NTDDI (antarmuka driver perangkat NT) akan bertahap hanya jika fungsionalitas target dalam API berubah. Pastikan Anda mendeteksi perubahan melalui APISet atau API lain yang diekspos seperti yang dibuat oleh tim fitur, dan jangan gunakan versi sebagai proksi untuk beberapa fitur atau perbaikan. Jika ada perubahan yang melanggar dan pemeriksaan yang tepat tidak terekspos, maka itu adalah bug.
  • Pastikan aplikasi TIDAK memeriksa versi dengan cara yang aneh, seperti melalui registri, versi file, offset, mode kernel, driver, atau cara lain. Jika aplikasi benar-benar perlu memeriksa versi, gunakan API GetVersion, yang harus mengembalikan nomor utama, minor, dan build.
  • Jika Anda menggunakan GetVersion API atau fungsi Pembantu Versi lainnya seperti VerifyVersionInfo, ingatlah bahwa perilaku API ini telah berubah sejak Windows 8.1. Silakan lihat dokumentasi API untuk detail selengkapnya.
  • Jika Anda memiliki aplikasi seperti antimalware atau firewall, Anda harus bekerja melalui saluran umpan balik anda yang biasa dan melalui program Windows Insider.

Manifes Aplikasi

Di bawah ini adalah contoh manifes aplikasi:

<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=SXS_ASSEMBLY_NAME
        version=SXS_ASSEMBLY_VERSION
        processorArchitecture=SXS_PROCESSOR_ARCHITECTURE
    />
    <description> my app exe </description>
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel
                    level="asInvoker"
                    uiAccess="false"
                />   
            </requestedPrivileges>
        </security>
    </trustInfo>
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
        <application> 

      * <!-- Windows 10 --> 
      * <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
            <!-- Windows 8.1 -->
            <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
            <!-- Windows Vista -->
            <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
            <!-- Windows 7 -->
            <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
            <!-- Windows 8 -->
            <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
        </application> 
    </compatibility>
</assembly>

Tambahkan variabel ini ke sumber Anda:

  • SXS_MANIFEST_RESOURCE_ID=1
  • SXS_MANIFEST=foo.manifest
  • SXS_ASSEMBLY_NAME=Microsoft.Windows.Foo
  • SXS_ASSEMBLY_VERSION=1.0
  • SXS_ASSEMBLY_LANGUAGE_INDEPENDENT=1
  • SXS_MANIFEST_IN_RESOURCES=1

Untuk Windows 10, dua baris di atas ditandai dengan tanda bintang (*) menunjukkan cara menargetkan aplikasi Anda secara akurat untuk versi OS yang Windows 10. Memanifestasikan .exe untuk Windows 10 tidak akan berdampak ketika dijalankan pada versi OS Windows sebelumnya. Anda juga dapat menambahkan ini ke file .rc jika Anda sudah menentukannya. Menambahkan trustInfo tidak penting, tetapi sangat disarankan. Ini akan memungkinkan .exe Anda untuk selalu mendapatkan versi yang benar, tidak peduli apakah OS Windows 10 atau Windows 8.1.

Sumber