Megosztás a következőn keresztül:


A Csomagtámogatási keretrendszer használatának első lépései

A Csomagtámogatási keretrendszer egy nyílt forráskódú készlet, amely segít javításokat alkalmazni a meglévő asztali alkalmazásra (a kód módosítása nélkül), hogy egy MSIX-tárolóban fusson. A csomagtámogatási keretrendszer segít az alkalmazásnak a modern futtatókörnyezet ajánlott eljárásainak követésében.

Ez a cikk a csomagtámogatási keretrendszer minden összetevőjét ismerteti, és lépésről lépésre ismerteti annak használatát.

A csomagtámogatási keretrendszerek ismertetése

A csomagtámogatási keretrendszer végrehajtható, futtatókörnyezet-kezelő DLL-t és futtatókörnyezet-javításokat tartalmaz.

Csomagtámogatási keretrendszer

A folyamat a következő:

  1. Hozzon létre egy konfigurációs fájlt, amely meghatározza az alkalmazásra alkalmazni kívánt javításokat.
  2. Módosítsa a csomagot úgy, hogy a Csomagtámogatási keretrendszer (PSF) indító végrehajtható fájljára mutasson.

Amikor a felhasználók elindítják az alkalmazást, a Csomagtámogatási keretrendszer indítója az első futtatható fájl, ami lefut. Beolvassa a konfigurációs fájlt, és injektálja a futtatókörnyezet javításait és a futtatókörnyezet-kezelő DLL-jét az alkalmazás folyamatába. A futtatókörnyezet-kezelő akkor alkalmazza a javítást, ha az alkalmazásnak szüksége van rá egy MSIX-tárolóban való futtatáshoz.

Csomagtámogatási keretrendszer DLL-injektálása

1. lépés: A csomagolt alkalmazások kompatibilitási problémáinak azonosítása

Először hozzon létre egy csomagot az alkalmazáshoz. Ezután telepítse, futtassa és figyelje meg a viselkedését. Előfordulhat, hogy hibaüzenetek érkeznek, amelyek segíthetnek a kompatibilitási probléma azonosításában. A Folyamatfigyelő használatával is azonosíthatja a problémákat. A gyakori problémák az alkalmazások által a munkakönyvtárra és a programútvonalak engedélyeire vonatkozó feltételezésekkel kapcsolatosak.

Probléma azonosítása a Folyamatfigyelő használatával

A Process Monitor egy hatékony segédprogram egy alkalmazás fájl- és beállításjegyzék-műveleteinek és eredményeinek megfigyeléséhez. Ez segíthet megérteni az alkalmazáskompatibilitási problémákat. A Folyamatfigyelő megnyitása után adjon hozzá egy szűrőt (Szűrőszűrő > ...), amely csak az alkalmazás végrehajtható eseményeit tartalmazza.

ProcMon alkalmazásszűrő

Megjelenik az események listája. Sok ilyen esemény esetén a SIKER szó megjelenik az Eredmény oszlopban.

ProcMon-események

Lehetőség van arra is, hogy szűrje az eseményeket, hogy csak a hibák jelenjenek meg.

ProcMon – Kizárás sikeressége

Ha fájlrendszer-hozzáférési hibára gyanakszik, keressen olyan sikertelen eseményeket, amelyek a System32/SysWOW64 vagy a csomagfájl elérési útja alatt találhatók. A szűrők itt is segíthetnek. Kezdje a lista alján, és görgessen felfelé. A lista alján megjelenő hibák a közelmúltban történtek. Figyelje meg a legtöbb figyelmet olyan hibákra, amelyek sztringeket tartalmaznak, például a "hozzáférés megtagadva" és az "elérési út/név nem található", és hagyja figyelmen kívül a gyanúsnak nem tűnő dolgokat. A PSFSample-nek két problémája van. Ezeket a problémákat az alábbi képen látható listában tekintheti meg.

ProcMon Config.txt

A képen megjelenő első probléma esetén az alkalmazás nem olvassa be a "C:\Windows\SysWOW64" elérési úton található "Config.txt" fájlból. Nem valószínű, hogy az alkalmazás közvetlenül erre az útvonalra próbál hivatkozni. Valószínűleg relatív elérési úttal próbál olvasni a fájlból, és alapértelmezés szerint a "System32/SysWOW64" az alkalmazás munkakönyvtára. Ez arra utal, hogy az alkalmazás azt várja, hogy az aktuális munkakönyvtára a csomag egy részének legyen beállítva. Az appx belsejébe tekintve láthatjuk, hogy a fájl ugyanabban a könyvtárban található, mint a végrehajtható fájl.

Alkalmazás Config.txt

A második probléma az alábbi képen jelenik meg.

ProcMon Logfile

Ebben a problémában az alkalmazás nem ír .log fájlt a csomag elérési útjára. Ez arra utalhat, hogy a fájlátirányítás javítása segíthet.

2. lépés: Futtatási hiba javításának keresése

A PSF olyan futtatókörnyezeti javításokat tartalmaz, amelyeket most használhat, például a fájlátirányítási javítást.

Fájlátirányítási javítás

A Fájlátirányítási javítással átirányíthatja az adatok írására vagy olvasására tett kísérleteket egy olyan könyvtárban, amely nem érhető el egy MSIX-tárolóban futó alkalmazásból.

Ha például az alkalmazás egy olyan naplófájlba ír, amely ugyanabban a könyvtárban található, mint a végrehajtható alkalmazások, akkor a Fájlátirányítási javítással létrehozhatja a naplófájlt egy másik helyen, például a helyi alkalmazásadattárban.

Futtatókörnyezeti hibajavítások a közösségtől

Győződjön meg arról, hogy áttekinti a GitHub-oldal közösségi hozzájárulását. Lehetséges, hogy más fejlesztők megoldottak egy, az Önhöz hasonló problémát, és megosztottak egy futtatókörnyezeti javítást.

3. lépés: Futtatókörnyezeti javítás alkalmazása

A Windows SDK néhány egyszerű eszközével és az alábbi lépésekkel alkalmazhat egy meglévő futtatókörnyezeti javítást.

  • Csomagelrendezési mappa létrehozása
  • A Csomagtámogatási keretrendszer fájljainak lekérése
  • Hozzáadás a csomaghoz
  • A csomagjegyzék módosítása
  • Konfigurációs fájl létrehozása

Vizsgáljuk meg az egyes feladatokat.

A csomagelrendezési mappa létrehozása

Ha már rendelkezik .msix (vagy .appx) fájllal, kibonthatja annak tartalmát egy elrendezési mappába, amely a csomag előkészítési területeként szolgál. Ezt egy parancssorból teheti meg a MakeAppx eszközzel, az SDK telepítési útvonala alapján, itt találja meg a makeappx.exe eszközt a Windows 10 rendszerű pc-n: x86: C:\Program Files (x86)\Windows Kits\10\bin\x86\makeappx.exe x64: C:\Program Files (x86)\Windows Kits\10\bin\x64\makeappx.exe

makeappx unpack /p PSFSamplePackage_1.0.60.0_AnyCPU_Debug.msix /d PackageContents

Ez a következőhöz hasonló eredményt ad.

Csomagelrendezés

Ha nem rendelkezik .msix (vagy .appx) fájllal, az alapoktól létrehozhatja a csomagmappát és a fájlokat.

A Csomagtámogatási keretrendszer fájljainak lekérése

A PSF Nuget-csomagot az önálló Nuget parancssori eszközzel vagy a Visual Studióval szerezheti be.

A csomag lekérése a parancssori eszközzel

Telepítse a Nuget parancssori eszközt a következő helyről: https://www.nuget.org/downloads. Ezután a Nuget parancssorból futtassa a következő parancsot:

nuget install Microsoft.PackageSupportFramework

Másik lehetőségként átnevezheti a csomagbővítményt .zip és kibonthatja. Az összes szükséges fájl a /bin mappában lesz.

A csomag lekérése a Visual Studióval

A Visual Studióban kattintson a jobb gombbal a megoldásra vagy a projektcsomópontra, és válasszon egyet a Nuget Packages kezelése parancs közül. Keresse meg a Microsoft.PackageSupportFramework vagy a PSF függvényt, hogy megtalálja a csomagot a Nuget.org. Ezután telepítse.

A Csomagtámogatási keretrendszer fájljainak hozzáadása a csomaghoz

Adja hozzá a szükséges 32 bites és 64 bites PSF-DLL-eket és végrehajtható fájlokat a csomagkönyvtárhoz. Útmutatóként használja az alábbi táblázatot. A szükséges futtatókörnyezeti javításokat is tartalmaznia kell. A példánkban a fájlátirányítási futtatókörnyezet javítására van szükség.

Az alkalmazás végrehajtható: x64 Az alkalmazás végrehajtható fájlja: x86
PSFLauncher64.exe PSFLauncher32.exe
PSFRuntime64.dll PSFRuntime32.dll
PSFRunDll64.exe PSFRunDll32.exe

A csomag tartalmának így kell kinéznie.

Csomag bináris fájljai

A csomagjegyzék módosítása

Nyissa meg a csomagjegyzéket egy szövegszerkesztőben, majd állítsa az ExecutableApplication elem attribútumát a PSF Launcher végrehajtható fájljának nevére. Ha ismeri a célalkalmazás architektúráját, válassza ki a megfelelő verziót, PSFLauncher32.exe vagy PSFLauncher64.exe. Ha nem, PSFLauncher32.exe minden esetben működni fog. Íme egy példa.

<Package ...>
  ...
  <Applications>
    <Application Id="PSFSample"
                 Executable="PSFLauncher32.exe"
                 EntryPoint="Windows.FullTrustApplication">
      ...
    </Application>
  </Applications>
</Package>

Konfigurációs fájl létrehozása

Hozzon létre egy fájlnevet config.json, és mentse a fájlt a csomag gyökérmappájába. Módosítsa a config.json fájl deklarált alkalmazásazonosítóját, hogy az az imént lecserélt végrehajthatóra mutasson. A Folyamatfigyelő használatával szerzett ismeretek segítségével beállíthatja a munkakönyvtárat, valamint a fájlátirányítási javítással átirányíthatja az olvasásokat és írásokat .log fájlokra a csomag relatív "PSFSampleApp" könyvtárában.

{
    "applications": [
        {
            "id": "PSFSample",
            "executable": "PSFSampleApp/PSFSample.exe",
            "workingDirectory": "PSFSampleApp/"
        }
    ],
    "processes": [
        {
            "executable": "PSFSample",
            "fixups": [
                {
                    "dll": "FileRedirectionFixup.dll",
                    "config": {
                        "redirectedPaths": {
                            "packageRelative": [
                                {
                                    "base": "PSFSampleApp/",
                                    "patterns": [
                                        ".*\\.log"
                                    ]
                                }
                            ]
                        }
                    }
                }
            ]
        }
    ]
}

Az alábbi útmutató a config.json sémához:

Tömb kulcs Érték
alkalmazások azonosító Használja az attribútum Id értékét a csomagjegyzék Application eleménél.
alkalmazások végrehajtható A elindítandó végrehajtható fájl csomaghoz viszonyított elérési útja. A legtöbb esetben a módosítás előtt lekérheti ezt az értéket a csomagjegyzékfájlból. Ez a Executable attribútum Application elem értéke.
alkalmazások workingDirectory (Nem kötelező) A csomaghoz viszonyított elérési út, amelyet a kezdő alkalmazás munkakönyvtáraként kell használni. Ha nem állítja be ezt az értéket, az operációs rendszer a System32 címtárat használja az alkalmazás munkakönyvtáraként.
Folyamatok végrehajtható A legtöbb esetben ez lesz a executable név, amelyet fent konfiguráltak, az elérési út és a fájlkiterjesztés eltávolításával.
Javítások DLL A javítás csomag-relatív elérési útja, a betöltendő formátum: .msix/.appx.
Javítások konfig (Nem kötelező) A hibajavítási dll viselkedését szabályozza. Ennek az értéknek a pontos formátuma fixup-by-fixup alapon változik, mivel az egyes javítások igény szerint értelmezhetik ezt a "blobot".

A applications, processesés fixups a kulcsok tömbök. Ez azt jelenti, hogy a config.json fájllal több alkalmazást, folyamatot és hibajavítási DLL-t is megadhat.

Az alkalmazás csomagolása és tesztelése

Ezután hozzon létre egy csomagot.

makeappx pack /d PackageContents /p PSFSamplePackageFixup.msix

Ezután írja alá.

signtool sign /a /v /fd sha256 /f ExportedSigningCertificate.pfx PSFSamplePackageFixup.msix

További információ: csomagaláíró tanúsítvány létrehozása és csomag aláírása a signtool használatával

A PowerShell használatával telepítse a csomagot.

Megjegyzés:

Először ne felejtse el eltávolítani a csomagot.

powershell Add-AppPackage .\PSFSamplePackageFixup.msix

Futtassa az alkalmazást, és figyelje meg a viselkedést a futásidejű javítás alkalmazásával. Szükség szerint ismételje meg a diagnosztikai és csomagolási lépéseket.

Ellenőrizze, hogy fut-e a csomagtámogatási keretrendszer

Ellenőrizheti, hogy a futásidejű javítás fut-e. Ennek egyik módja, ha megnyitja a Feladatkezelőt , és a További részletek elemre kattint. Keresse meg azt az alkalmazást, amelyre a csomagtámogatási keretrendszert alkalmazták, és bontsa ki az alkalmazás részleteit további részletekért. Látnia kell, hogy a csomagtámogatási keretrendszer fut.

A nyomkövetési javítás használata

A csomagolt alkalmazáskompatibilitási problémák diagnosztizálásának egy alternatív módja a Trace Fixup használata. Ez a DLL a PSF részét képezi, és részletes diagnosztikai nézetet nyújt az alkalmazás viselkedéséről, hasonlóan a Folyamatfigyelőhöz. Kifejezetten az alkalmazáskompatibilitási problémák feltárására szolgál. A Nyomkövetési javítás használatához adja hozzá a DLL-t a csomaghoz. Adja hozzá a következő töredéket a config.jsonszakaszhoz, majd csomagolja be és telepítse az alkalmazást.

{
    "dll": "TraceFixup.dll",
    "config": {
        "traceLevels": {
            "filesystem": "allFailures"
        }
    }
}

Alapértelmezés szerint a nyomkövetési javítás kiszűri azokat a hibákat, amelyek "vártnak" tekinthetők. Előfordulhat például, hogy az alkalmazások feltétel nélkül próbálnak törölni egy fájlt anélkül, hogy ellenőrizték volna, hogy létezik-e már, figyelmen kívül hagyva az eredményt. Ennek az a sajnálatos következménye, hogy egyes váratlan hibák kiszűrhetők, ezért a fenti példában úgy döntünk, hogy minden hibát megkapunk a fájlrendszerfüggvényektől. Ezt azért tesszük, mert tudjuk, hogy a Config.txt fájlból való olvasási kísérlet a "fájl nem található" üzenettel meghiúsul. Ez egy gyakran megfigyelt hiba, amely általában nem számít váratlannak. A gyakorlatban a legjobb, ha csak váratlan hibákra szűr, majd visszaesik az összes hibára, ha olyan probléma merül fel, amely továbbra sem azonosítható.

Alapértelmezés szerint a nyomkövetési javítás kimenetét a rendszer elküldi a csatolt hibakeresőnek. Ebben a példában nem fogunk hibakeresőt csatolni, hanem a SysInternals DebugView programját fogjuk használni a kimenet megtekintéséhez. Az alkalmazás futtatása után ugyanazokat a hibákat láthatjuk, mint korábban, ami ugyanarra a futtatókörnyezeti javításra mutatna.

A TraceShim-fájl nem található

TraceShim hozzáférés megtagadva

A futtatókörnyezeti javítás hibakeresése, bővítése vagy új létrehozása.

A Visual Studio használatával hibakeresést végezhet a futtatókörnyezet javításán, kibővítheti a futtatókörnyezeti javításokat, vagy létrehozhat egyet az alapoktól. A sikeresség érdekében meg kell tennie ezeket a dolgokat.

  • Csomagolási projekt hozzáadása
  • Projektfeladat hozzáadása a futásidejű javításhoz
  • Olyan projekt hozzáadása, amely elindítja a PSF-indító fájlt
  • A csomagolási projekt konfigurálása

Ha elkészült, a megoldás így fog kinézni.

Kész megoldás

Tekintsük meg az egyes projekteket ebben a példában.

Projekt Cél
Asztali alkalmazás csomag Ez a projekt a Windows Application Packaging projekten alapul, és az MSIX-csomagot adja ki.
Runtimefix Ez egy C++ Dynamic-Linked könyvtárprojekt, amely egy vagy több olyan helyettesítő függvényt tartalmaz, amelyek futásidejű javításként szolgálnak.
PSFLauncher Ez a C++ üres projekt. Ez a projekt a csomagtámogatási keretrendszer futtatókörnyezetben terjeszthető fájljainak gyűjtésére alkalmas hely. Végrehajtható fájlt ad ki. Ez a végrehajtható fájl az első dolog, amely a megoldás indításakor fut.
WinFormsDesktopApplication Ez a projekt egy asztali alkalmazás forráskódját tartalmazza.

Az összes ilyen típusú projektet tartalmazó teljes minta megtekintéséhez tekintse meg a PSFSample című témakört.

Tekintsük át az egyes projektek megoldásban való létrehozásának és konfigurálásának lépéseit.

Csomagmegoldás létrehozása

Ha még nem rendelkezik megoldással az asztali alkalmazáshoz, hozzon létre egy új üres megoldást a Visual Studióban.

Üres megoldás

Érdemes lehet bármilyen alkalmazásprojektet is hozzáadnia.

Csomagolási projekt hozzáadása

Ha még nem rendelkezik Windows Application Packaging Project-projektel, hozzon létre egyet, és adja hozzá a megoldáshoz.

Projektsablon csomagolása

A Windows Application Packaging projektről további információt az Alkalmazás csomagolása a Visual Studióval című témakörben talál.

A Megoldáskezelőben kattintson a jobb gombbal a csomagolási projektre, válassza a Szerkesztés lehetőséget, majd adja hozzá a projektfájl aljára:

<Target Name="PSFRemoveSourceProject" AfterTargets="ExpandProjectReferences" BeforeTargets="_ConvertItems">
<ItemGroup>
  <FilteredNonWapProjProjectOutput Include="@(_FilteredNonWapProjProjectOutput)">
  <SourceProject Condition="'%(_FilteredNonWapProjProjectOutput.SourceProject)'=='<your runtime fix project name goes here>'" />
  </FilteredNonWapProjProjectOutput>
  <_FilteredNonWapProjProjectOutput Remove="@(_FilteredNonWapProjProjectOutput)" />
  <_FilteredNonWapProjProjectOutput Include="@(FilteredNonWapProjProjectOutput)" />
</ItemGroup>
</Target>

Projektfeladat hozzáadása a futásidejű javításhoz

Adjon hozzá egy C++ Dynamic-Link Könyvtár (DLL) projektet a megoldáshoz.

Futtatókörnyezeti javító könyvtár

Kattintson a jobb gombbal a projektre, majd válassza a Tulajdonságok parancsot.

A tulajdonságoldalakon keresse meg a C++ Language Standard mezőt, majd a mező melletti legördülő listában válassza az ISO C++17 Standard (/std:c++17) beállítást.

ISO 17 beállítás

Kattintson a jobb gombbal a projektre, majd a helyi menüben válassza a Nuget-csomagok kezelése lehetőséget. Győződjön meg arról, hogy a Csomag forrásbeállításaAz összes vagy nuget.org értékre van állítva.

Kattintson a mező melletti Beállítások ikonra.

Keresse meg a PSF* Nuget-csomagot, majd telepítse a projekthez.

NuGet csomag

Ha egy meglévő futtatókörnyezeti javítást szeretne hibakereséssel vagy bővítéssel bővíteni, adja hozzá az útmutató Futásidejű javítások keresése című szakaszában ismertetett útmutató segítségével beszerzett futtatókörnyezet-javításfájlokat .

Ha egy teljesen új javítást szeretne létrehozni, még ne adjon hozzá semmit ehhez a projekthez. Az útmutató későbbi részében segítünk a megfelelő fájlok hozzáadásában ebben a projektben. Egyelőre folytatjuk a megoldás beállítását.

Olyan projekt hozzáadása, amely elindítja a PSF-indító fájlt

Adjon hozzá egy C++ Üres projekt projektet a megoldáshoz.

Üres projekt

Adja hozzá a PSF Nuget-csomagot ehhez a projekthez az előző szakaszban ismertetett útmutatással.

Nyissa meg a projekt tulajdonságlapjait, és az Általános beállítások lapon állítsa be a Célnév tulajdonságot PSFLauncher32 az alkalmazás architektúrájától függően.PSFLauncher64

PSF-indító referencia

Adjon hozzá egy projekthivatkozást a futtatókörnyezeti javítás projektjéhez a megoldásban.

futásidejű javítás referencia

Kattintson a jobb gombbal a hivatkozásra, majd a Tulajdonságok ablakban alkalmazza ezeket az értékeket.

Ingatlan Érték
Helyi másolás Igaz
Helyi műholdas összeállítások másolása Igaz
Referenciaszerelvény kimenete Igaz
Könyvtárfüggőségek összekapcsolása Téves
Hivatkozáskönyvtár függőségi bemeneteinek összekapcsolása Téves

A csomagolási projekt konfigurálása

A csomagolási projektben kattintson a jobb gombbal az Alkalmazások mappára, majd válassza a Hivatkozás hozzáadása parancsot.

Projekthivatkozás hozzáadása

Válassza ki a PSF Launcher projektet és az asztali alkalmazásprojektet, majd kattintson az OK gombra.

Asztali projekt

Megjegyzés:

Ha nem rendelkezik az alkalmazás forráskóddal, egyszerűen válassza ki a PSF Launcher projektet. Bemutatjuk, hogyan hivatkozhat a végrehajtható fájlra konfigurációs fájl létrehozásakor.

Az Alkalmazások csomóponton kattintson a jobb gombbal a PSF-indítóalkalmazásra, majd válassza a Beállítás belépési pontként lehetőséget.

Belépési pont beállítása

Adjon hozzá egy, a csomagolási projekthez elnevezett config.json fájlt, majd másolja és illessze be a következő json-szöveget a fájlba. Állítsa a Package Actiontulajdonságot Tartalom értékre.

{
    "applications": [
        {
            "id": "",
            "executable": "",
            "workingDirectory": ""
        }
    ],
    "processes": [
        {
            "executable": "",
            "fixups": [
                {
                    "dll": "",
                    "config": {
                    }
                }
            ]
        }
    ]
}

Adjon meg egy értéket az egyes kulcsokhoz. Használja ezt a táblázatot útmutatóként.

Tömb kulcs Érték
alkalmazások azonosító Használja az attribútum Id értékét a csomagjegyzék Application eleménél.
alkalmazások végrehajtható A elindítandó végrehajtható fájl csomaghoz viszonyított elérési útja. A legtöbb esetben a módosítás előtt lekérheti ezt az értéket a csomagjegyzékfájlból. Ez a Executable attribútum Application elem értéke.
alkalmazások workingDirectory (Nem kötelező) A csomaghoz viszonyított elérési út, amelyet a kezdő alkalmazás munkakönyvtáraként kell használni. Ha nem állítja be ezt az értéket, az operációs rendszer a System32 címtárat használja az alkalmazás munkakönyvtáraként.
Folyamatok végrehajtható A legtöbb esetben ez lesz a executable név, amelyet fent konfiguráltak, az elérési út és a fájlkiterjesztés eltávolításával.
Javítások DLL A betöltendő javító DLL csomaghoz viszonyított elérési útja.
Javítások konfig (Nem kötelező) A hibajavítási DLL viselkedését szabályozza. Ennek az értéknek a pontos formátuma fixup-by-fixup alapon változik, mivel az egyes javítások igény szerint értelmezhetik ezt a "blobot".

Ha elkészült, a config.json fájl így fog kinézni.

{
  "applications": [
    {
      "id": "DesktopApplication",
      "executable": "DesktopApplication/WinFormsDesktopApplication.exe",
      "workingDirectory": "WinFormsDesktopApplication"
    }
  ],
  "processes": [
    {
      "executable": ".*App.*",
      "fixups": [ { "dll": "RuntimeFix.dll" } ]
    }
  ]
}

Megjegyzés:

A applications, processesés fixups a kulcsok tömbök. Ez azt jelenti, hogy a config.json fájllal több alkalmazást, folyamatot és hibajavítási DLL-t is megadhat.

Futtatókörnyezeti javítás hibakeresése

A Visual Studióban nyomja le az F5 billentyűt a hibakereső elindításához. Az első dolog, ami elindul, a PSF Launcher alkalmazás, amely viszont elindítja a cél asztali alkalmazást. A cél asztali alkalmazás hibakereséséhez manuálisan kell csatolnia az asztali alkalmazásfolyamathoz a Debug-Attach> to Process lehetőséget, majd ki kell választania az alkalmazásfolyamatot. Ha engedélyezni szeretné egy .NET-alkalmazás hibakeresését natív futtatókörnyezeti javítás DLL-vel, válassza ki a felügyelt és a natív kódtípusokat (vegyes módú hibakeresés).

Miután beállította ezt a beállítást, töréspontokat állíthat be az asztali alkalmazás kódsorai és a futtatókörnyezeti javítás projekt kódsorai mellett. Ha nem rendelkezik az alkalmazás forráskóddal, akkor csak a futtatókörnyezeti javítás projektben lévő kódsorok mellett állíthat be töréspontokat.

Mivel az F5 hibakeresése úgy futtatja az alkalmazást, hogy laza fájlokat helyez üzembe a csomagelrendezési mappa elérési útján, ahelyett, hogy .msix/.appx csomagból telepíti, az elrendezési mappa általában nem ugyanazokat a biztonsági korlátozásokat alkalmazza, mint a telepített csomagmappák. Ennek eredményeképpen előfordulhat, hogy a futtatókörnyezeti javítás alkalmazása előtt nem lehet reprodukálni a csomag elérési útjának hozzáférés-megtagadási hibáit.

A probléma megoldásához használja az .msix/.appx csomagtelepítést az F5 laza fájltelepítés helyett. .msix/.appx csomagfájl létrehozásához használja a MakeAppx segédprogramot a Windows SDK-ból a fent leírtak szerint. Vagy a Visual Studióban kattintson a jobb gombbal az alkalmazásprojekt csomópontra, és válassza az Áruház –> Alkalmazáscsomagok létrehozása lehetőséget.

A Visual Studióval kapcsolatos másik probléma, hogy nem rendelkezik beépített támogatással a hibakereső által indított gyermekfolyamatokhoz való csatoláshoz. Ez megnehezíti a logika hibakeresését a célalkalmazás indítási útvonalán, amelyet a Visual Studio-nak manuálisan kell csatolnia az indítás után.

A probléma megoldásához használjon egy hibakeresőt, amely támogatja a gyermekfolyamat csatolását. Vegye figyelembe, hogy általában nem lehet just-in-time (JIT) hibakeresőt csatolni a célalkalmazáshoz. Ennek az az oka, hogy a legtöbb JIT-technika magában foglalja a hibakereső elindítását a célalkalmazás helyett az ImageFileExecutionOptions beállításkulcson keresztül. Ez kiiktatja azt a detouring mechanizmust, amelyet a PSFLauncher.exe a FixupRuntime.dll célalkalmazásba történő injektálásához használ. A Windows hibakeresési eszközei között szereplő, és a Windows SDK-ból beszerzett WinDbg támogatja a gyermekfolyamat-csatolást. Mostantól támogatja az UWP-alkalmazások közvetlen indítását és hibakeresését is.

A célalkalmazás gyermekfolyamatként történő indításának hibakereséséhez indítsa el a műveletet WinDbg.

windbg.exe -plmPackage PSFSampleWithFixup_1.0.59.0_x86__7s220nvg1hg3m -plmApp PSFSample

A WinDbg parancssornál engedélyezze a gyermekfolyamat hibakeresését, és állítson be megfelelő töréspontokat.

.childdbg 1
g

(hajtsa végre, amíg a célalkalmazás el nem indul és belép a hibakeresőbe)

sxe ld fixup.dll
g

(végrehajtás a javítás DLL-jének betöltéséig)

bp ...

Megjegyzés:

A PLMDebug használatával hibakeresőt is csatolhat egy alkalmazáshoz indításkor, és a Windows hibakeresési eszközeiben is megtalálható. Ez azonban összetettebb, mint a WinDbg által biztosított közvetlen támogatás.

Támogatás

Kérdése van? Kérdezzen minket a Csomagtámogatási keretrendszer beszélgetési területéről az MSIX technikai közösség webhelyén.