Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Sorununuz için bir çalışma zamanı düzeltmesi yoksa, yerine koyma fonksiyonları yazarak ve uygun yapılandırma verilerini ekleyerek yeni bir çalışma zamanı düzeltmesi oluşturabilirsiniz. Her bölüme bakalım.
Değiştirme işlevleri
İlk olarak, uygulamanız bir MSIX kapsayıcısında çalıştırıldığında hangi işlev çağrılarının başarısız olduğunu belirleyin. Ardından, çalışma zamanı yöneticisinin yerine çağrılmasını istediğiniz işlevler oluşturabilirsiniz. Bu, bir işlevin uygulanmasını modern çalışma zamanı ortamının kurallarına uyan davranışla değiştirme fırsatı verir.
Makroyu FIXUP_DEFINE_EXPORTS bildirin ve ardından çalışma zamanı düzeltmenizin işlevlerini eklemeyi planladığınız her .CPP dosyasının en üstüne bir include deyimi ekleyin.
#define FIXUP_DEFINE_EXPORTS
#include <fixup_framework.h>
Önemli
Makronun FIXUP_DEFINE_EXPORTS include deyiminden önce göründüğünden emin olun.
Değiştirmek istediğiniz davranışın aynı imzasına sahip bir işlev oluşturun. İşte MessageBoxW işlevinin yerini alan örnek bir işlev.
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);
DECLARE_FIXUP çağrısı MessageBoxW işlevini yeni kaldırma işlevinize eşler. Uygulamanız MessageBoxW işlevini çağırmaya çalıştığında, bunun yerine değiştirme işlevini çağırır.
Çalışma zamanı düzeltmelerinde, işlevlere yönelik özyinelemeli çağrılara karşı koruma sağlamak
Türü reentrancy_guard , özyinelemeli işlev çağrılarına karşı korumak için işlevlerinize eklenebilir.
Örneğin, CreateFile işlevi için bir değiştirme işlevi üretebilirsiniz. Uygulamanız CopyFile işlevini çağırabilir, ancak CopyFile işlevinin gerçekleştirilmesi CreateFile işlevini çağırabilir. Bu, CreateFile işlevine yönelik çağrıların sonsuz bir özyinelemeli döngüye yol açabilir.
Daha fazla bilgi reentrancy_guard için bkz. authoring.md
Yapılandırma verileri
Çalışma zamanı düzeltmenize yapılandırma verileri eklemek istiyorsanız, bunu config.json öğesine eklemeyi göz önünde bulundurun. Bu şekilde, bu verileri kolayca ayrıştırmak için kullanabilirsiniz FixupQueryCurrentDllConfig . Bu örnek, bu yapılandırma dosyasından boole değerini ve dize değerini ayrıştırmaktadır.
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();
}
}
Meta verilerini düzelt
Her düzeltme ve PSF Launcher uygulamasının aşağıdaki bilgileri içeren bir XML meta veri dosyası vardır:
- Sürüm: PSF'nin sürümü MAJOR.KÜÇÜK.PATCH biçimindedir ve Sem Veri 2'ye göre düzenlenmiştir.
- En Düşük Windows Platformu: Hata düzeltmesi veya PSF Başlatıcısı için gereken en düşük Windows sürümü.
- Açıklama: Düzeltmenin kısa bir açıklaması.
- WhenToUse: Düzeltme işlemini ne zaman uygulamanız gerektiğine dair yaklaşımlar.
Örneğin, yeniden yönlendirme düzeltmesi için FileRedirectionFixupMetadata.xml meta veri dosyasına bakın. Meta veri şemasına buradan ulaşabilirsiniz.