Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Pokud pro váš problém neexistuje oprava modulu runtime, můžete vytvořit novou opravu modulu runtime tak, že napíšete náhradní funkce a zahrnete všechna konfigurační data, která dává smysl. Pojďme se podívat na každou část.
Náhradní funkce
Nejprve určete, která volání funkce selžou, když se vaše aplikace spustí v kontejneru MSIX. Potom můžete vytvořit náhradní funkce, které chcete, aby správce modulu runtime volal místo toho. Díky tomu můžete nahradit implementaci funkce chováním, které odpovídá pravidlům moderního prostředí runtime.
Deklarujte makro FIXUP_DEFINE_EXPORTS a poté přidejte příkaz include pro fixup_framework.h na začátek každého souboru .CPP, do kterého chcete přidat funkce opravy běhového prostředí.
#define FIXUP_DEFINE_EXPORTS
#include <fixup_framework.h>
Důležité
Ujistěte se, že FIXUP_DEFINE_EXPORTS se makro zobrazí před příkazem include.
Vytvořte funkci, která má stejný podpis funkce, která má chování, které chcete upravit. Tady je ukázková funkce, která nahradí MessageBoxW funkci.
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);
Volání mapuje funkci DECLARE_FIXUP na vaši novou náhradní funkci pomocí MessageBoxW. Když se aplikace pokusí zavolat funkci MessageBoxW, místo toho zavolá náhradní funkci.
Ochrana před rekurzivními voláními funkcí v opravách modulu runtime
Typ reentrancy_guard můžete přidat do vašich funkcí, abyste je ochránili před rekurzivními voláními funkcí.
Můžete například vytvořit náhradní funkci pro funkci CreateFile. Vaše implementace může volat CopyFile funkci, ale implementace CopyFile funkce může volat CreateFile funkci. To může vést k nekonečnému rekurzivnímu cyklu volání CreateFile funkce.
Další informace o reentrancy_guard najdete v authoring.md
Konfigurační data
Pokud chcete do opravy modulu runtime přidat konfigurační data, zvažte jejich přidání do souboru config.json. Tímto způsobem můžete snadno zpracovat data pomocí FixupQueryCurrentDllConfig. Tento příklad analyzuje logickou hodnotu a hodnotu řetězce z tohoto konfiguračního souboru.
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();
}
}
Úprava metadat
Každá oprava a aplikace PSF Launcher má soubor metadat XML, který obsahuje následující informace:
- Verze: Verze PSF je ve formátu hlavní.verze.oprava podle Semverze 2.
- Minimální platforma Windows: Minimální verze Windows požadovaná pro opravu nebo spouštěč PSF.
- Popis: Stručný popis opravy.
- WhenToUse: Heuristiky kdy byste měli danou úpravu použít.
Příklad najdete v souboru metadat FileRedirectionFixupMetadata.xml pro opravu přesměrování. Schéma metadat je k dispozici tady.