Bagikan melalui


Manifes aplikasi (dapat dieksekusi)

Platform

Klien – Windows 8
Server – Windows Server 2012

Deskripsi

Bagian kompatibilitas manifes aplikasi (dapat dieksekusi) yang diperkenalkan di Windows membantu sistem operasi menentukan versi Windows yang dirancang untuk ditargetkan oleh aplikasi. Selain itu, manifes aplikasi memungkinkan Windows untuk memberikan perilaku yang diharapkan aplikasi berdasarkan versi Windows yang ditargetkan aplikasi.

Bagian kompatibilitas manifes memungkinkan Windows untuk memberikan perilaku baru ke perangkat lunak yang baru dibuat sambil mempertahankan kompatibilitas untuk perangkat lunak yang ada. Bagian ini membantu Windows memberikan kompatibilitas yang lebih besar di versi Windows yang akan datang juga. Misalnya, aplikasi yang menyatakan dukungan hanya untuk Windows 8 di bagian kompatibilitas akan terus menerima perilaku Windows 8 di versi Windows mendatang.

Manifestasi

Aplikasi tanpa bagian kompatibilitas dalam manifesnya akan memiliki perilaku Windows Vista secara default pada Windows 7 dan Windows 8 dan versi Windows mendatang. Ketahuilah bahwa Windows XP dan Windows Vista mengabaikan bagian manifes ini dan tidak berdampak pada mereka.

Komponen Windows ini memberikan perilaku berbeda berdasarkan bagian kompatibilitas:

Kumpulan utas default panggilan prosedur jarak jauh (RPC)

  • Windows 8 dan Windows 7: Untuk meningkatkan skalabilitas dan mengurangi jumlah utas, RPC beralih ke kumpulan utas NT (kumpulan default). Untuk Windows Vista, RPC menggunakan kumpulan utas privat:

    • Untuk biner yang dikompilasi untuk Windows 7 dan versi Windows yang lebih baru, kumpulan default digunakan.
    • Jika I_RpcMgmtEnableDedicatedThreadPool dipanggil sebelum API RPC dipanggil, kumpulan utas privat digunakan (perilaku Vista).
    • Jika I_RpcMgmtEnableDedicatedThreadPool dipanggil setelah panggilan RPC, kumpulan default digunakan, I_RpcMgmtEnableDedicatedThreadPool mengembalikan kesalahan 1764, dan operasi yang diminta tidak didukung.
  • Windows Vista (default): Untuk biner yang dikompilasi untuk Windows Vista dan versi Windows yang lebih lama, kumpulan privat digunakan.

Kunci DirectDraw

  • Windows 8 dan Windows 7: Aplikasi yang dimanifestasikan untuk Windows 7 dan versi yang lebih baru dari sistem operasi tidak dapat memanggil Lock API di DDRAW untuk mengunci buffer video desktop utama; melakukannya akan mengakibatkan kesalahan, dan penunjuk NULL untuk primer dikembalikan. Perilaku ini diberlakukan meskipun Komposisi Manajer Jendela Desktop tidak diaktifkan. Aplikasi dengan kompatibilitas yang dideklarasikan untuk Windows 7 dan yang lebih baru tidak boleh mengunci buffer video utama untuk dirender.
  • Windows Vista (default): Aplikasi dapat memperoleh kunci pada buffer video utama, karena aplikasi lama bergantung pada perilaku ini; menjalankan aplikasi akan menonaktifkan Desktop Window Manager.

Transfer bit-block DirectDraw (bitblt) ke primer tanpa jendela kliping

  • Windows 8 dan Windows 7: Aplikasi yang dimanifestasikan untuk Windows 7 dan versi Windows yang lebih baru dicegah untuk melakukan bitblt ke buffer video Desktop utama tanpa jendela kliping; melakukannya menghasilkan kesalahan dan area bitblt tidak akan dirender. Windows memberlakukan perilaku ini meskipun Anda tidak mengaktifkan Komposisi Manajer Jendela Desktop. Aplikasi dengan kompatibilitas yang dideklarasikan untuk Windows 7 dan yang lebih baru harus melakukan bitblt ke jendela kliping.
  • Windows Vista (default): Aplikasi harus dapat melakukan bitblt ke primer tanpa jendela kliping, karena aplikasi warisan bergantung pada perilaku ini; menjalankan aplikasi ini mematikan Manajer Jendela Desktop.

GetOverlappedResult API

  • Windows 8 dan Windows 7: Menyelesaikan kondisi balapan di mana aplikasi multithread menggunakan GetOverlappedResult dapat kembali tanpa mengatur ulang peristiwa dalam struktur yang tumpang tindih, menyebabkan panggilan berikutnya ke fungsi ini kembali sebelum waktunya.
  • Windows Vista (default): Menyediakan perilaku dengan kondisi ras tempat aplikasi mungkin memiliki dependensi. Aplikasi yang harus menghindari perlombaan ini sebelum perilaku Windows 7 harus menunggu pada peristiwa yang tumpang tindih dan, ketika diberi sinyal, panggil GetOverlappedResult dengan bWait == FALSE.

Status tema Shell dalam mode kontras tinggi

  • Windows 8: Mengembalikan status tema nyata ketika dalam mode kontras tinggi.
  • Windows 7: Mengembalikan tema sebagai tidak tersedia ketika dalam mode kontras tinggi karena DWM masih aktif.
  • Windows Vista (default): Mengembalikan tema sebagai tidak tersedia ketika dalam mode kontras tinggi karena DWM masih aktif.

Shell iPersistFile::Simpan metode

  • Windows 8: CShellLink::Simpan sekarang menentukan apakah handler IPersistFile dipanggil dengan argumen jalur relatif dan gagal dalam panggilan jika ya.

    Dokumentasi publik yang menjelaskan perilaku ini menunjukkan bahwa argumen jalur harus merupakan jalur absolut:

  • Windows 7 dan yang lebih lama (default): CShellLink::Simpan tidak menentukan apakah handler iPersistFile mengirim pemeriksaan jalur relatif dan memungkinkan aplikasi untuk terus bekerja dengan jalur absolut atau relatif.

Asisten Kompatibilitas Program (PCA)

  • Windows 8: Aplikasi dengan bagian kompatibilitas tidak mendapatkan mitigasi PCA.
  • Windows 7: Aplikasi dengan bagian kompatibilitas dilacak untuk potensi masalah kompatibilitas untuk perubahan Windows 8 (dijelaskan dalam dokumen ini).
  • Windows Vista (default): Aplikasi yang gagal diinstal dengan benar atau crash selama runtime dalam beberapa keadaan tertentu mendapatkan mitigasi PCA. Untuk informasi selengkapnya, lihat bagian Sumber Daya.

Memanfaatkan kemampuan fitur

Perbarui manifes aplikasi dengan info kompatibilitas terbaru untuk dukungan sistem operasi. Bagian ini menjelaskan penambahan manifes:

Namespace: Compatibility.v1 (xmlns="urn:schemas-microsoft-com:compatibility.v1">)

Nama bagian: Kompatibilitas (bagian baru)

SupportedOS: GUID sistem operasi yang didukung - GUID yang memetakan ke sistem operasi yang didukung adalah:

  • {e2011457-1546-43c5-a5fe-008deee3d3f0}

    untuk Windows Vista: Ini adalah nilai default untuk konteks switchback

  • {35138b9a-5d96-4fbd-8e2d-a2440225f93a}

    untuk Windows 7: Aplikasi yang mengatur nilai ini dalam manifes aplikasi mendapatkan perilaku Windows 7

  • {4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}

    untuk Windows 8: Aplikasi yang menetapkan nilai ini dalam manifes aplikasi mendapatkan perilaku Windows 8

Microsoft akan membuat dan memposting GUID untuk versi Windows mendatang sesuai kebutuhan.

Contoh XML dari manifes yang diperbarui:

Catatan

Atribut dan nama tag dalam manifes aplikasi peka huruf besar/kecil.

 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application> 
        <!--The ID below indicates app support for Windows Vista -->
        <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
        <!--The ID below indicates app support for Windows 7 -->
        <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
        <!--The ID below indicates app support for Windows 8 -->
        <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
    </application> 
</compatibility>
</assembly>

GUID untuk semua sistem operasi dalam contoh sebelumnya memberikan dukungan tingkat bawah. Aplikasi yang mendukung beberapa platform tidak memerlukan manifes terpisah untuk setiap platform.

Pengujian

Aplikasi dapat menentukan beberapa ID sistem operasi yang didukung. Anda harus menambahkan ID sistem operasi yang didukung jika Anda telah menguji, atau sedang dalam proses pengujian, aplikasi pada sistem operasi tersebut. Windows Vista dan versi sistem operasi sebelumnya tidak memperhatikan entri ini. Dimulai dengan Windows 7, Windows akan memilih GUID versi tertinggi dalam manifes hingga versi Windows yang sedang berjalan, dan memberikan dukungan aplikasi pada tingkat tersebut. Untuk memverifikasi bahwa aplikasi berfungsi dengan bagian kompatibilitas manifes aplikasi baru:

  1. Uji aplikasi dengan bagian kompatibilitas baru dan ID SupportedOS = { 4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38} untuk memastikan bahwa aplikasi berfungsi dengan baik menggunakan perilaku Windows 8 terbaru.
  2. Uji aplikasi dengan bagian kompatibilitas baru dan ID SupportedOS = {35138b9a-5d96-4fbd-8e2d-a2440225f93a} untuk memastikan bahwa aplikasi berfungsi dengan baik menggunakan perilaku Windows 7.
  3. Uji aplikasi dengan bagian kompatibilitas baru dan ID SupportedOS = {e2011457-1546-43c5-a5fe-008deee3d3f0} untuk memastikan bahwa aplikasi berfungsi dengan baik menggunakan perilaku Windows Vista.

Sumber