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 ingin Anda panggil manajer runtime sebagai gantinya. Ini memberi Anda kesempatan untuk mengganti implementasi fungsi dengan perilaku yang sesuai dengan aturan lingkungan runtime modern.
Deklarasikan FIXUP_DEFINE_EXPORTS
makro lalu tambahkan pernyataan sertakan fixup_framework.h
untuk di bagian atas masing-masing . File CPP tempat Anda ingin 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 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: Heuristics pada kapan Anda harus menerapkan perbaikan.
Misalnya, lihat file metadata FileRedirectionFixupMetadata.xml untuk perbaikan pengalihan. Skema metadata tersedia di sini.