Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Om det inte finns någon körningskorrigering för problemet kan du skapa en ny körningskorrigering genom att skriva ersättningsfunktioner och inkludera eventuella konfigurationsdata som är meningsfulla. Låt oss titta på varje del.
Ersättningsfunktioner
Identifiera först vilka funktionsanrop som misslyckas när programmet körs i en MSIX-container. Sedan kan du skapa ersättningsfunktioner som du vill att runtime-chefen ska anropa i stället. Detta ger dig möjlighet att ersätta implementeringen av en funktion med beteenden som överensstämmer med reglerna i den moderna körningsmiljön.
Deklarera makrot FIXUP_DEFINE_EXPORTS och lägg sedan till en include-instruktion för fixup_framework.h överst i varje .CPP-fil där du tänker lägga till funktionerna i din körningsfix.
#define FIXUP_DEFINE_EXPORTS
#include <fixup_framework.h>
Viktigt!
Kontrollera att makrot FIXUP_DEFINE_EXPORTS visas före include-instruktionen.
Skapa en funktion som har samma signatur för den funktion som du vill ändra. Här är en exempelfunktion som ersätter MessageBoxW funktionen.
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);
Anropet till DECLARE_FIXUP mappar funktionen MessageBoxW till din nya ersättningsfunktion. När programmet försöker anropa MessageBoxW funktionen anropas ersättningsfunktionen i stället.
Skydda mot rekursiva anrop till funktioner i körningstidskorrigeringar
Typen reentrancy_guard kan läggas till i dina funktioner för att skydda dem mot rekursiva funktionsanrop.
Du kan till exempel skapa en ersättningsfunktion för CreateFile funktionen. Implementeringen kan anropa CopyFile funktionen, men implementeringen av CopyFile funktionen kan anropa CreateFile funktionen. Detta kan leda till en oändlig rekursiv cykel med anrop till CreateFile funktionen.
För mer information om reentrancy_guard se filen authoring.md
Konfigurationsdata
Om du vill lägga till konfigurationsdata i körningsfixen kan du överväga att lägga till den i config.json. På så sätt kan du använda FixupQueryCurrentDllConfig för att enkelt parsa dessa data. I det här exemplet parsas ett booleskt värde och ett strängvärde från konfigurationsfilen.
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();
}
}
Korrigera metadata
Varje korrigering och PSF Launcher-programmet har en XML-metadatafil som innehåller följande information:
- Version: PSF-versionen är i MAJOR.MINDRE.PATCH-format enligt Sem Version 2.
- Minsta Windows-plattform: Den lägsta Windows-version som krävs för korrigeringen eller PSF Launcher.
- Beskrivning: En kort beskrivning av korrigeringen.
- WhenToUse: Heuristik för när du bör tillämpa åtgärden.
Ett exempel finns i FileRedirectionFixupMetadata.xml metadatafil för omdirigeringskorrigeringen. Metadataschemat är tillgängligt här.