Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Se não houver nenhuma correção de tempo de execução para o problema, você poderá criar uma nova correção de tempo de execução escrevendo funções de substituição e incluindo quaisquer dados de configuração que façam sentido. Vejamos cada parte.
Funções de substituição
Primeiro, identifique quais chamadas de função falham quando seu aplicativo é executado em um contêiner MSIX. Em seguida, podes criar funções de substituição que gostasses que o gestor de execução chamasse. Isso lhe dá a oportunidade de substituir a implementação de uma função por um comportamento que esteja em conformidade com as regras do ambiente de tempo de execução moderno.
Declare a macro FIXUP_DEFINE_EXPORTS e, em seguida, adicione uma instrução de inclusão para o fixup_framework.h na parte superior de cada arquivo .CPP onde pretenda adicionar as funções da sua correção em tempo de execução.
#define FIXUP_DEFINE_EXPORTS
#include <fixup_framework.h>
Importante
Certifique-se de que a FIXUP_DEFINE_EXPORTS macro aparece antes da instrução include.
Crie uma função que tenha a mesma assinatura da função cujo comportamento você deseja modificar. Aqui está um exemplo de função que substitui a MessageBoxW função.
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);
A chamada para DECLARE_FIXUP mapeia a função MessageBoxW para a sua nova função de substituição. Quando seu aplicativo tenta chamar a MessageBoxW função, ele chamará a função de substituição.
Proteja-se contra chamadas recursivas para funções em correções de tempo de execução
O reentrancy_guard tipo pode ser adicionado às suas funções para protegê-las contra chamadas de função recursivas.
Por exemplo, você pode produzir uma função de substituição para a CreateFile função. Sua implementação pode chamar a CopyFile função, mas a implementação da CopyFile função pode chamar a CreateFile função. Isso pode levar a um ciclo recursivo infinito de chamadas para a CreateFile função.
Para mais informações sobre reentrancy_guard, consulte authoring.md
Dados de configuração
Se você quiser adicionar dados de configuração à sua correção de tempo de execução, considere adicioná-los ao config.json. Dessa forma, você pode usar o FixupQueryCurrentDllConfig para analisar facilmente esses dados. Este exemplo analisa um valor booleano e um valor de cadeia de caracteres desse arquivo de configuração.
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();
}
}
Corrigir metadados
Cada correção e o aplicativo PSF Launcher tem um arquivo de metadados XML que contém as seguintes informações:
- Versão: A versão do PSF está no formato MAJOR.MINOR.PATCH de acordo com o SemVer 2.
- Plataforma mínima do Windows: A versão mínima do Windows necessária para a correção ou para o Iniciador PSF.
- Descrição: Uma breve descrição do ajuste.
- WhenToUse: Heurística sobre quando deverás aplicar a correção.
Para obter um exemplo, consulte o arquivo de metadadosFileRedirectionFixupMetadata.xml para a correção de redirecionamento. O esquema de metadados está disponível aqui.