Membuat perbaikan Kerangka Kerja Dukungan Paket

Jika tidak ada perbaikan runtime untuk masalah Anda, Anda dapat membuat perbaikan runtime baru dengan menulis fungsi penggantian dan menyertakan data konfigurasi apa pun yang masuk akal. Mari kita lihat setiap bagian.

Fungsi penggantian

Pertama, identifikasi panggilan fungsi mana yang gagal saat aplikasi Anda berjalan dalam kontainer MSIX. Kemudian, Anda dapat membuat fungsi pengganti yang Anda inginkan untuk dipanggil oleh manajer runtime sebagai gantinya. Ini memberi Anda kesempatan untuk mengganti implementasi fungsi dengan perilaku yang sesuai dengan aturan lingkungan runtime modern.

FIXUP_DEFINE_EXPORTS Deklarasikan makro lalu tambahkan pernyataan sertakan fixup_framework.h untuk di bagian atas masing-masing . File CPP tempat Anda berniat untuk menambahkan fungsi perbaikan runtime Anda.

#define FIXUP_DEFINE_EXPORTS
#include <fixup_framework.h>

Penting

Pastikan makro FIXUP_DEFINE_EXPORTS muncul sebelum pernyataan sertakan.

Buat fungsi yang memiliki tanda tangan fungsi yang sama dengan perilaku siapa yang ingin Anda ubah. Berikut adalah contoh fungsi yang menggantikan MessageBoxW fungsi .

auto MessageBoxWImpl = &::MessageBoxW;
int WINAPI MessageBoxWFixup(
    _In_opt_ HWND hwnd,
    _In_opt_ LPCWSTR,
    _In_opt_ LPCWSTR caption,
    _In_ UINT type)
{
    return MessageBoxWImpl(hwnd, L"SUCCESS: This worked", caption, type);
}

DECLARE_FIXUP(MessageBoxWImpl, MessageBoxWFixup);

Panggilan untuk DECLARE_FIXUP memetakan fungsi ke MessageBoxW fungsi pengganti baru Anda. Ketika aplikasi Anda mencoba memanggil MessageBoxW fungsi, aplikasi akan memanggil fungsi pengganti sebagai gantinya.

Melindungi dari panggilan rekursif ke fungsi dalam perbaikan runtime

Jenis dapat reentrancy_guard ditambahkan ke fungsi Anda untuk melindunginya dari panggilan fungsi rekursif.

Misalnya, Anda dapat menghasilkan fungsi pengganti untuk fungsi tersebut CreateFile . Implementasi Anda mungkin memanggil CopyFile fungsi, tetapi implementasi CopyFile fungsi mungkin memanggil CreateFile fungsi . Ini dapat menyebabkan siklus panggilan rekursif yang tak terbatas ke CreateFile fungsi.

Untuk informasi selengkapnya tentang reentrancy_guard lihat authoring.md

Data konfigurasi

Jika Anda ingin menambahkan data konfigurasi ke perbaikan runtime Anda, pertimbangkan untuk menambahkannya ke config.json. Dengan begitu, Anda dapat menggunakan untuk mengurai data tersebut FixupQueryCurrentDllConfig dengan mudah. Contoh ini menguraikan nilai boolean dan string dari file konfigurasi tersebut.

if (auto configRoot = ::FixupQueryCurrentDllConfig())
{
    auto& config = configRoot->as_object();

    if (auto enabledValue = config.try_get("enabled"))
    {
        g_enabled = enabledValue->as_boolean().get();
    }

    if (auto logPathValue = config.try_get("logPath"))
    {
        g_logPath = logPathValue->as_string().wstring();
    }
}

Memperbaiki metadata

Setiap perbaikan dan aplikasi Peluncur PSF memiliki file metadata XML yang berisi informasi berikut:

  • Versi: Versi PSF ada di MAJOR. KECIL. Format PATCH sesuai dengan Sem Versi 2.
  • Platform Windows Minimum: Versi windows minimum yang diperlukan untuk perbaikan atau Peluncur PSF.
  • Deskripsi: Deskripsi singkat tentang perbaikan.
  • WhenToUse: Heuristik pada kapan Anda harus menerapkan perbaikan.

Misalnya, lihat file metadata FileRedirectionFixupMetadata.xml untuk perbaikan pengalihan. Skema metadata tersedia di sini.