So beheben Sie Fehler beim Schreiben von Schreibberechtigungen für das Paketunterstützungsframework-Dateisystem
In diesem Artikel wird beschrieben, wie Sie das Paketunterstützungsframework (Package Support Framework, PSF) verwenden, um einen Fehler beim Schreiben von Dateisystemberechtigungen zu beheben.
Windows-Apps leiten bestimmte anwendungsbezogene Verzeichnisse in den C:\Program Files\WindowsApps
Ordner um. Wenn die Anwendung versucht, in den Windows-App-Container zu schreiben, wird ein Fehler ausgelöst, und der Schreibvorgang schlägt fehl. Sie können Verbesserungen am Windows-App-Paket vornehmen, um dieses Problem zu beheben.
Untersuchung
Identifizieren Sie zunächst den Fehler und die Verzeichnispfade, die die App anfordert.
Erfassen des Windows-App-Fehlers
Das Filtern der Ergebnisse ist optional, erleichtert aber das Anzeigen anwendungsbezogener Fehler. Zum Filtern von Ergebnissen erstellen Sie zwei Filterregeln. Der erste Filter enthält den Namen des Anwendungsprozesses, und der zweite Filter enthält alle Ergebnisse, die nicht erfolgreich sind.
Laden Sie den SysInternals-Prozessmonitor herunter, und extrahieren Sie es in das Verzeichnis "C:\PSF\ProcessMonitor".
Öffnen Sie Windows Explorer, und navigieren Sie zum extrahierten SysInternals ProcessMonitor-Ordner .
Wählen Sie die Datei SysInternals Process Monitor procmon.exe aus, um die App zu starten.
Wenn Sie von der UAC aufgefordert werden, wählen Sie "Ja" aus.
Wählen Sie im Fenster "Prozessüberwachungsfilter" im Dropdownmenü des ersten Felds "Prozessname" aus.
Stellen Sie sicher, dass im nächsten Feld angezeigt wird .
Geben Sie im nächsten Feld den Prozessnamen Ihrer App ein, z . B. PSFSample.exe.
Klicken Sie auf Hinzufügen.
Wählen Sie im Fenster "Prozessüberwachungsfilter" im Dropdownmenü des ersten Felds "Ergebnis" aus.
Im nächsten Feld befindet sich die Option nicht im Dropdownmenü.
Geben Sie im Textfeld SUCCESS ein.
Klicken Sie auf Hinzufügen und dann auf OK.
Starten Sie die Windows-App, lösen Sie den Fehler aus, und schließen Sie dann die Windows-App.
Überprüfen der Fehlerprotokolle der Windows-App
Untersuchen Sie nach der Erfassung der Windows-App-Prozesse die Ergebnisse, um zu ermitteln, ob der Fehler mit dem Arbeitsverzeichnis verknüpft ist.
Überprüfen Sie die Fehlerergebnisse des SysInternals-Prozessmonitors. Wenn die Ergebnisse Access verweigert haben, mit einem gewünschten Zugriff: Generisches Schreibdetail für Ihre App für C:\Programme\WindowsApps\...\, haben Sie einen Schreibberechtigungsfehler im Zusammenhang mit dem Arbeitsverzeichnis identifiziert.
Wenn Sie diesen Fehler identifizieren, wenden Sie die folgende PSF-Korrektur auf Ihre App an.
Lösung
Führen Sie die folgenden Schritte aus, um das Problem der Windows-App zu beheben, das nicht in den Windows-App-Container geschrieben werden kann:
- Extrahieren Sie den Inhalt der Windows-App in ein lokales Stagingverzeichnis.
- Erstellen Sie eine config.json, und fügen Sie die PSF-Fixupdateien in das mehrstufige Windows-App-Verzeichnis ein.
- Konfigurieren Sie das Anwendungsstartprogramm so, dass es auf das PSF-Startfeld zeigt, und konfigurieren Sie die PSF config.json-Datei , um das PSF-Startfeld umzuleiten, und geben Sie das Arbeitsverzeichnis an.
- Aktualisieren Sie die Datei "AppxManifest" der Windows-App.
- Packen Sie die Windows-App neu, und signieren Sie sie.
Herunterladen und Installieren der erforderlichen Tools
Für diesen Vorgang sind die folgenden Tools erforderlich:
- NuGet-Clienttool
- Framework zur Paketunterstützung (Package Support Framework, PSF)
- Windows 10 Software Development Toolkit (Win 10 SDK), neueste Version
- SysInternals-Prozessmonitor
So laden Sie NuGet und PSF herunter und installieren sie:
Laden Sie die neueste Nichtvorschauversion des NuGet-Clienttools herunter, und speichern Sie nuget.exe in C:\PSF\nuget.
Laden Sie das Paketunterstützungsframework mit NuGet herunter, und installieren Sie es, indem Sie den folgenden Befehl in einem Administrativen PowerShell-Fenster ausführen:
Set-Location "C:\PSF" .\nuget\nuget.exe install Microsoft.PackageSupportFramework
So laden Sie das Windows 10 SDK herunter und installieren es:
- Laden Sie das Win 10 SDK herunter.
- Run winsdksetup.exe .
- Wählen Sie Weiter aus.
- Wählen Sie nur die folgenden drei Features aus:
- Windows SDK-Signierungstools für Desktop-Apps
- Windows SDK für UWP-C++-Apps
- Windwos SDK für die Lokalisierung von UWP-Apps
- Wählen Sie "Installieren" und dann "OK" aus.
Stufen der Windows-App
Das Staging der Windows-App extrahiert und entpackt den Inhalt der App in ein lokales Verzeichnis. Sobald die Windows-App an den Stagingspeicherort entpackt wurde, können Sie PSF-Fixupdateien einfügen, um unerwünschte Erfahrungen zu korrigieren.
Legen Sie in einem Administrativen PowerShell-Fenster die folgenden Variablen so fest, dass sie auf Ihre spezifische App-Datei und die Windows 10 SDK-Version ausgerichtet sind:
$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
Entpacken Sie die Windows-App in den Stagingordner, indem Sie das folgende PowerShell-Cmdlet ausführen:
## 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 Einfügen erforderlicher PSF-Dateien
Um die Windows-App zu korrigieren, erstellen Sie eine config.json-Datei mit Informationen zum Windows-App-Startfeld, das fehlschlägt. Wenn mehrere Windows-App-Startprogramme Probleme haben, können Sie die Datei config.json mit mehreren Einträgen konfigurieren.
Nachdem Sie die Datei config.json erstellt haben, verschieben Sie die Datei config.json und unterstützende PSF-Fixupdateien in das Stammverzeichnis des Windows-App-Pakets.
Öffnen Sie Visual Studio Code oder einen anderen Text-Editor.
Erstellen Sie eine neue Datei namens config.json im Windows-App-Stagingverzeichnis C :\PSF\Staging\PSFSampleApp.
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 " im Windows-App-Stagingordner. Das folgende Beispiel zeigt eine AppxManifest.xml-Datei :
<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 in der Datei config.json vor:
Legen Sie den
applications.id
Wert auf denselben Wert fest wie imApplications.Application.ID
Feld der Datei "AppxManifest.xml ".Legen Sie den
applications.executable
Wert auf den relativen Pfad der Anwendung fest, dieApplications.Application.Executable
sich im Feld der Datei "AppxManifest.xml " befindet.Legen Sie den
applications.workingdirectory
Wert auf den relativen Ordnerpfad imApplications.Application.Executable
Feld der Datei "AppxManifest.xml " fest.Legen Sie den
process.executable
Wert auf den Dateinamen ohne Pfad und Erweiterung imApplications.Application.Executable
Feld der Datei "AppxManifest.xml " fest.Legen Sie den
processes.fixups.dll
Wert auf die architekturspezifische Ziel festFileRedirectionFixup.dll
. Wenn die Korrektur für die x64-Architektur gilt, legen Sie den Wert auf .FileRedirectionFixup64.dll
Wenn die Architektur x86 ist oder unbekannt ist, legen Sie den Wert auf .FileRedirectionFixup86.dll
Legen Sie den
processes.fixups.config.redirectedPaths.packageRelative.base
Wert auf den paketrelativen Ordnerpfad imApplications.Application.Executable
Feld der Datei "AppxManifest.xml " fest.Legen Sie den
processes.fixups.config.redirectedPaths.packageRelative.patterns
Wert fest, der dem von der Anwendung erstellten Dateityp entspricht. Bei Verwendung.*\\.log
leitet die PSF alle Protokolldateien in dasprocesses.fixups.config.redirectedPaths.packageRelative.base
Verzeichnis und die untergeordneten Verzeichnisse um.
Speichern Sie die aktualisierte Datei config.json . Das folgende Beispiel zeigt eine aktualisierte Config.json-Datei :
{ "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 die folgenden Dateien aus dem Paketunterstützungsframework für die ausführbare Anwendungsarchitektur in das Stammverzeichnis der mehrstufigen Windows-App. Sie finden die Dateien in .\Microsoft.PackageSupportFramework.\<Version>\bin.
Anwendung (x64) Anwendung (x86) PSF Startprogramm 64.exe PSF Startprogramm 32.exe PSFRuntime64.dll PSFRuntime32.dll PSFRunDll64.exe PSFRunDll32.exe FileRedirectionFixup64.dll FileRedirectionFixup64.dll
Aktualisieren von AppxManifest
Aktualisieren Sie nach dem Erstellen und Aktualisieren der Datei config.json die AppxManifest.xml-Datei der Windows-App für jedes Windows-App-Startfeld, das Sie in der Datei config.json enthalten haben. Die AppxManifest.xmlApplications
muss nun auf die PSF Startprogramm.exe ausgerichtet sein, die der Anwendungsarchitektur zugeordnet ist.
- Öffnen Sie AppxManifest.xml im mehrstufigen MSIX-App-Ordner C :\PSF\Staging\PSFSampleApp.
- Aktualisieren Sie AppxManifest.xml mit dem folgenden Code:
<Package ...> ... <Applications> <Application Id="PSFSample" Executable="PSFLauncher32.exe" EntryPoint="Windows.FullTrustApplication"> ... </Application> </Applications> </Package>
Erneutes Packen der Anwendung
Nachdem Sie alle Korrekturen angewendet haben, packen Sie die Windows-App in ein MSIX neu, und signieren Sie sie mit einem Codesignaturzertifikat.
Öffnen Sie ein PowerShell-Verwaltungsfenster.
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
Packen Sie die Windows-App aus dem Stagingordner, indem Sie das folgende PowerShell-Cmdlet ausführen:
Set-Location "${env:ProgramFiles(x86)}\Windows Kits\10\Bin\$Win10SDKVersion\$OSArchitecture" .\makeappx.exe pack /p "$AppPath" /d "$StagingFolder"
Signieren Sie die Windows-App, indem Sie das folgende PowerShell-Cmdlet ausführen:
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