So beheben Sie mit dem Framework zur Paketunterstützung Fehler im Zusammenhang mit der Schreibberechtigung für Dateisysteme
Dieser Artikel erklärt, wie Sie mit dem Framework zur Paketunterstützung (Package Support Framework, PSF) einen Fehler im Zusammenhang mit der Schreibberechtigung für Dateisysteme beheben können.
Spezifische Verzeichnisse werden von Windows-Apps zum Ordner C:\Program Files\WindowsApps
umgeleitet. Beim Versuch der Anwendung, in den Windows-Anwendungscontainer zu schreiben, tritt ein Fehler auf und das Schreiben schlägt fehl. Um dieses Problem zu lösen, können Sie das Windows-App-Paket erweitern.
Untersuchung
Ermitteln Sie im ersten Schritt, welcher Fehler genau vorliegt und welche Verzeichnispfade von der App angefordert werden.
Erfassen Sie den Fehler der Windows-App
Die Ergebnisse müssen nicht zwangsläufig gefiltert werden. Mit Filtern können Sie anwendungsbezogene Fehler aber einfacher finden. Um die Ergebnisse zu filtern, definieren Sie zwei Filterregeln. Ein Filter umfasst den Prozessnamen der Anwendung, und der andere schließt alle nicht erfolgreichen Ergebnisse ein.
Laden Sie den SysInternals Process Monitor in den Ordner C:\PSF\ProcessMonitor herunter, und extrahieren Sie die Datei dort.
Öffnen Sie im Windows Explorer den Ordner, in dem sich die extrahierten Dateien von SysInternals Process Monitor befinden.
Wählen Sie die Datei procmon.exe aus, um den SysInternals Process Monitor zu starten.
Wenn die Benutzerkontensteuerung Sie dazu auffordert, wählen Sie Ja aus.
Wählen Sie im Fenster Process Monitor-Filter aus dem Dropdownmenü des ersten Feldes die Option Prozessname aus.
Überprüfen Sie, ob im nächsten Feld ist angezeigt wird.
Im nächsten Feld geben Sie den Namen des Prozesses der App ein, beispielsweise PSFSample.exe.
Wählen Sie Hinzufügen.
Im Fenster Process Monitor-Filter wählen Sie aus dem Dropdownmenü des ersten Feldes die Option Ergebnis aus.
Im nächsten Feld wählen Sie aus dem Dropdownmenü die Option ist nicht aus.
Geben Sie im Textfeld ERFOLG ein.
Wählen Sie Hinzufügen und dann OK aus.
Öffnen Sie die Windows-App, lösen Sie den Fehler aus, und schließend Sie daraufhin die App wieder.
Untersuchen Sie die Fehlerprotokolle der Windows-App
Nachdem Sie die Windows-App-Prozesse erfasst haben, ermitteln Sie anhand der Ergebnisse, ob der Fehler mit dem Arbeitsverzeichnis zusammenhängt.
Sehen Sie sich die Ergebnisse vom SysInternals Process Monitor zum Fehler an. Finden Sie unter den Ergebnissen den Fehler Zugriff verweigert mit dem Zusatz Gewünschter Zugriff: Allgemeines Schreiben, wenn die App versucht, auf C:\Programme\WindowsApps\...\ zuzugreifen, liegt ein Fehler mit der Schreibberechtigung für das Arbeitsverzeichnis vor.
Wenn Sie diesen Fehler feststellen, beheben Sie den Fehler mit dem Framework zur Paketunterstützung (PSF).
Lösung
Das Problem, dass die Windows-App nicht in den Windows-Anwendungscontainer schreiben kann, beheben Sie wie folgt:
- Extrahieren Sie die Dateien der Windows-App in ein lokales Stagingverzeichnis.
- Erstellen Sie eine Datei mit dem Namen config.json, und injizieren Sie die Korrekturdateien des Frameworks zur Paketunterstützung in das Stagingverzeichnis der Windows-App.
- Legen Sie fest, dass der Anwendungsstarter auf den PSF-Starter verweist und die Datei config.json den PSF-Starter umleitet, wobei Sie das Arbeitsverzeichnis angeben.
- Führen Sie ein Update der AppxManifest-Datei der Windows-App durch.
- Paketieren Sie die Windows-App neu, und signieren Sie sie.
Download und Installation der benötigten Tools
Für diesen Vorgang sind die folgenden Tools erforderlich:
- NuGet-Client-Tool
- Framework zur Paketunterstützung (Package Support Framework, PSF)
- Windows 10 Software Development Toolkit (Win 10 SDK), neueste Version
- SysInternals Process Monitor
Download und Installation von NuGet und PSF:
Laden Sie die aktuelle Version (keine Vorschauversion) des NuGet-Client-Tools herunter. Speichern Sie die Datei nuget.exe im Verzeichnis C:\PSF\nuget.
Um das Framework zur Paketunterstützung mit NuGet herunterzuladen und zu installieren, führen Sie den folgenden Befehl in einem PowerShell-Fenster mit erhöhten Rechten aus:
Set-Location "C:\PSF" .\nuget\nuget.exe install Microsoft.PackageSupportFramework
Download und Installation des Windows 10 SDK:
- Laden Sie das Win 10 SDK herunter.
- Führen Sie die Datei winsdksetup.exe aus.
- Wählen Sie Weiter aus.
- Wählen Sie ausschließlich folgende drei Funktionen aus:
- Windows SDK-Signierungstools für Desktop-Apps
- Windows SDK für UWP-C++-Apps
- Windows SDK für die UWP-Apps-Lokalisierung
- Wählen Sie Installieren und dann OK aus.
Stagen der Windows-App
Beim Stagen der Windows-App werden die Inhalte der App in ein lokales Verzeichnis extrahiert und entpackt. Nach dem Entpacken der Windows-App am Staging-Speicherort haben Sie die Möglichkeit, die Korrekturdateien des Frameworks zur Paketunterstützung zu injizieren, um nicht erwünschtes Verhalten zu beheben.
Konfigurieren Sie in einem PowerShell-Fenster mit erhöhten Rechten die folgenden Variablen, damit sie auf Ihre jeweilige App-Datei und die Windows 10 SDK abzielen:
$AppPath = "C:\PSF\SourceApp\PSFSampleApp.msix" ## Path to the MSIX App Installer $StagingFolder = "C:\PSF\Staging\PSFSampleApp" ## Path to where the MSIX App will be staged $OSArchitecture = "x$((gwmi Win32_Processor).AddressWidth)" ## Operating System Architecture $Win10SDKVersion = "10.0.19041.0" ## Latest version of the Win10 SDK
Führen Sie folgendes Cmdlet in der PowerShell aus, um die Windows-App im Staging-Ordner zu entpacken:
## Sets the directory to the Windows 10 SDK Set-Location "${env:ProgramFiles(x86)}\Windows Kits\10\Bin\$Win10SDKVersion\$OSArchitecture" ## Unpackages the Windows app to the staging folder .\makeappx.exe unpack /p "$AppPath" /d "$StagingFolder"
Erstellen und Injizieren der benötigten PSF-Dateien
Zum Korrigieren der Windows-App erstellen Sie eine Datei mit dem Namen config.json und geben Details zum Windows-App-Starter ein, bei dem der Fehler auftritt. Sollte es bei mehreren Windows-App-Startern zu Problemen kommen, können Sie auch mehrere Einträge für die Datei config.json erstellen.
Nach dem Erstellen der Datei config.json verschieben Sie die Datei config.json und die dazugehörigen Korrekturdateien des Frameworks zur Paketunterstützung in das Stammverzeichnis vom Paket der Windows-App.
Öffnen Sie Visual Studio Code oder einen anderen Texteditor.
Erstellen Sie im Stagingverzeichnis der Windows-App, C:\PSF\Staging\PSFSampleApp, eine neue Datei mit dem Namen config.json.
Kopieren Sie den folgenden Code in die neu erstellte Datei config.json.
{ "applications": [ { "id": "", "executable": "" } ], "processes": [ { "executable": "", "fixups": [ { "dll": "", "config": { "redirectedPaths": { "packageRelative": [ { "base": "", "patterns": [ "" ] } ] } } } ] } ] }
Öffnen Sie die Datei AppxManifest.xml aus dem Stagingverzeichnis der Windows-App. Im folgenden Beispiel ist eine AppxManifest.xml-Datei dargestellt:
<Applications> <Application Id="PSFSAMPLE" Executable="VFS\ProgramFilesX64\PS Sample App\PSFSample.exe" EntryPoint="Windows.FullTrustApplication"> <uap:VisualElements BackgroundColor="transparent" DisplayName="PSFSample" Square150x150Logo="Assets\StoreLogo.png" Square44x44Logo="Assets\StoreLogo.png" Description="PSFSample"> <uap:DefaultTile Wide310x150Logo="Assets\StoreLogo.png" Square310x310Logo="Assets\StoreLogo.png" Square71x71Logo="Assets\StoreLogo.png" /> </uap:VisualElements> </Application> </Applications>
Nehmen Sie die folgenden Änderungen an der Datei config.json vor:
Legen Sie den Wert
applications.id
so fest, dass er dem Wert im FeldApplications.Application.ID
der Datei AppxManifest.xml entspricht.Legen Sie den Wert
applications.executable
so fest, dass er auf den relativen Pfad der Anwendung aus dem FeldApplications.Application.Executable
der Datei AppxManifest.xml verweist.Legen Sie den Wert
applications.workingdirectory
so fest, dass er auf den relativen Pfad des Ordners aus dem FeldApplications.Application.Executable
der Datei AppxManifest.xml verweist.Legen Sie den Wert
process.executable
so fest, dass er auf den Dateinamen, ohne Pfad und Erweiterung, aus dem FeldApplications.Application.Executable
der Datei AppxManifest.xml verweist.Legen Sie den Wert
processes.fixups.dll
so fest, dass er auf die architekturspezifischeFileRedirectionFixup.dll
verweist. Wenn Sie einen Fehler auf einer x64-Architektur beheben, legen Sie als WertFileRedirectionFixup64.dll
fest. Bei der x86-Architektur oder einer unbekannten Architektur legen Sie als WertFileRedirectionFixup86.dll
fest.Legen Sie den Wert
processes.fixups.config.redirectedPaths.packageRelative.base
auf den relativen Pfad des Ordners für das Paket aus dem FeldApplications.Application.Executable
der Datei AppxManifest.xml fest.Legen Sie den Wert
processes.fixups.config.redirectedPaths.packageRelative.patterns
so fest, dass er mit dem Dateityp übereinstimmt, den die Anwendung erstellt. Wenn Sie.*\\.log
verwenden, werden alle Schreibvorgänge für die Protokolldatei von PSF in das Verzeichnisprocesses.fixups.config.redirectedPaths.packageRelative.base
und seine untergeordneten Verzeichnisse umgeleitet.
Speichern Sie die aktualisierte Datei config.json. Im folgenden Beispiel ist die aktualisierte Datei config.json dargestellt:
{ "applications": [ { "id": "PSFSample", "executable": "VFS/ProgramFilesX64/PS Sample App/PSFSample.exe" } ], "processes": [ { "executable": "PSFSample", "fixups": [ { "dll": "FileRedirectionFixup64.dll", "config": { "redirectedPaths": { "packageRelative": [ { "base": "VFS/ProgramFilesX64/PS Sample App/", "patterns": [ ".*\\.log" ] } ] } } } ] } ] }
Kopieren Sie folgende Dateien vom Framework zur Paketunterstützung für die Anwendungsarchitektur in das Stammverzeichnis der Staging-Windows-App. Diese Dateien finden Sie unter .\Microsoft.PackageSupportFramework.\<Version>\bin.
Anwendung (x64) Anwendung (x86) PSFLauncher64.exe PSFLauncher32.exe PSFRuntime64.dll PSFRuntime32.dll PSFRunDll64.exe PSFRunDll32.exe FileRedirectionFixup64.dll FileRedirectionFixup64.dll
Aktualisieren von AppxManifest
Nach dem Erstellen und Aktualisieren der Datei config.json aktualisieren Sie die Datei AppxManifest.xml der Windows-App für jeden Windows-App-Starter, den Sie in die Datei config.json aufgenommen haben. Die Datei AppxManifest.xml Applications
muss jetzt die Datei PSFLauncher.exe ansprechen, die zur Anwendungsarchitektur gehört.
- Öffnen Sie die Datei AppxManifest.xml im Staging-MSIX-App-Ordner, C:\PSF\Staging\PSFSampleApp.
- Fügen Sie den folgenden Code in die Datei AppxManifest.xml ein, um sie zu aktualisieren:
<Package ...> ... <Applications> <Application Id="PSFSample" Executable="PSFLauncher32.exe" EntryPoint="Windows.FullTrustApplication"> ... </Application> </Applications> </Package>
Erneutes Paketieren der Anwendung
Wenn Sie alle Korrekturen vorgenommen haben, paketieren Sie die Windows-App erneut in ein MSIX. Signieren Sie dann die App mit einem Codesignaturzertifikat.
Öffnen Sie ein PowerShell-Fenster mit erhöhten Rechten.
Legen Sie die folgenden Variablen fest:
$AppPath = "C:\PSF\SourceApp\PSFSampleApp_Updated.msix" ## Path to the MSIX App Installer $CodeSigningCert = "C:\PSF\Cert\CodeSigningCertificate.pfx" ## Path to your code signing certificate $CodeSigningPass = "<Password>" ## Password used by the code signing certificate $StagingFolder = "C:\PSF\Staging\PSFSampleApp" ## Path to where the MSIX App will be staged $OSArchitecture = "x$((gwmi Win32_Processor).AddressWidth)" ## Operating System Architecture $Win10SDKVersion = "10.0.19041.0" ## Latest version of the Win10 SDK
Führen Sie folgendes Cmdlet in der PowerShell aus, um die Windows-App im Staging-Ordner neu zu packen:
Set-Location "${env:ProgramFiles(x86)}\Windows Kits\10\Bin\$Win10SDKVersion\$OSArchitecture" .\makeappx.exe pack /p "$AppPath" /d "$StagingFolder"
Führen Sie das folgende PowerShell-Cmdlet aus, um die Windows-App zu signieren:
Set-Location "${env:ProgramFiles(x86)}\Windows Kits\10\Bin\$Win10SDKVersion\$OSArchitecture" .\signtool.exe sign /v /fd sha256 /f $CodeSigningCert /p $CodeSigningPass $AppPath
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für