Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Untersuchung
Windows-Apps leiten bestimmte Verzeichnisse, die sich auf die Anwendung beziehen, in den C:\Program Files\WindowsApps
Ordner um. Wenn eine Anwendung einen Unterordner (C:\Program Files\Vendor\subfolder
) als Teil der Installation erstellt und später diesen Unterordner aufruft, wird das Verzeichnis nicht gefunden, da es nicht vorhanden ist.
Mithilfe des Paketsupportframeworks (PSF) können Verbesserungen an dem Windows-App-Paket vorgenommen werden, um dieses Problem zu beheben. Zunächst müssen wir den Fehler und Verzeichnispfade identifizieren, die von der App angefordert werden.
Den Fehler einer Windows-App erfassen
Das Filtern der Ergebnisse ist ein optionaler Schritt, der das Anzeigen anwendungsbezogener Fehler erleichtert. Dazu erstellen wir zwei Filterregeln. Der erste ist ein Einschlussfilter für den Namen des Anwendungsprozesses, und der zweite umfasst 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-Prozessüberwachungsordner.
- Doppelklicken Sie auf die SysInternals-Prozessüberwachungsdatei (procmon.exe), und starten Sie die App.
- Wenn Sie von der UAC aufgefordert werden, wählen Sie die Schaltfläche "Ja " aus.
- Wählen Sie im Fenster "Prozessüberwachungsfilter" das erste Dropdownmenü mit der Bezeichnung "Architektur" aus.
- Wählen Sie im Dropdownmenü "Prozessname " aus.
- Überprüfen Sie im nächsten Dropdownmenü, ob sie mit dem Wert „ist" festgelegt ist.
- Geben Sie im Textfeld den Prozessnamen Ihrer App ein (Beispiel: PSFSample.exe).
- Wählen Sie die Schaltfläche Hinzufügen aus.
- Wählen Sie im Fenster "Prozessüberwachungsfilter" das erste Dropdownmenü mit der Bezeichnung "Prozessname" aus.
- Wählen Sie im Dropdownmenü "Ergebnis " aus.
- Wählen Sie im nächsten Dropdownmenü die Option aus, und wählen Sie ist nicht aus dem Dropdownmenü aus.
- Geben Sie im Textfeld ein: SUCCESS.
- Wählen Sie die Schaltfläche Hinzufügen aus.
- Wählen Sie die Schaltfläche OK aus.
- Starten Sie die Windows-App, lösen Sie den Fehler aus, und schließen Sie die Windows-App.
Überprüfen der Fehlerprotokolle der Windows-App
Nach dem Erfassen der Windows-App-Prozesse müssen die Ergebnisse untersucht werden, um festzustellen, ob der Fehler mit dem Arbeitsverzeichnis verknüpft ist.
- Überprüfen Sie die Ergebnisse des SysInternals-Prozessmonitors, und suchen Sie nach Fehlern, die in der obigen Tabelle beschrieben sind.
- Wenn die Ergebnisse ein Ergebnis "Name Nicht gefunden" mit den Details "Gewünschter Zugriff: ..." für Ihre spezifische App anzeigen, die auf ein Verzeichnis außerhalb der "C:\Program Files\WindowsApps\...\" ausgerichtet ist (wie in der nachstehenden Abbildung dargestellt), haben Sie erfolgreich einen Fehler im Zusammenhang mit dem Arbeitsverzeichnis identifiziert, verwenden Sie den PSF-Support - Filesystem Access-Artikel , um Anleitungen zum Anwenden der PSF-Korrektur auf Ihre App zu erhalten.
Beschluss
Windows-Apps leiten bestimmte Verzeichnisse, die sich auf die Anwendung beziehen, in den C:\Program Files\WindowsApps
Ordner um. Wenn eine Anwendung einen Unterordner (C:\Program Files\Vendor\subfolder
) als Teil der Installation erstellt und später diesen Unterordner aufruft, wird das Verzeichnis nicht gefunden, da es nicht vorhanden ist.
Um das Problem im Zusammenhang mit der Windows-App zu beheben, das auf ein falsches Arbeitsverzeichnis verweist, müssen wir die folgenden vier Schritte ausführen:
- Bereitstellen der Windows-App in einem lokalen Verzeichnis
- Erstellen der Config.json und Einfügen erforderlicher PSF-Dateien
- Aktualisieren der Datei "Windows AppxManifest"
- Erneutes Packen und Signieren der Windows-App
Die obigen Schritte bieten Anleitungen zum Extrahieren des Inhalts der Windows-App in ein lokales inszeniertes Verzeichnis, zum Einfügen der PSF-Fixupdateien in das inszenierte Windows-App-Verzeichnis, zum Konfigurieren des Anwendungsstarters so, dass er auf den PSF-Starter zeigt, und dann die PSF-config.json-Datei so zu konfigurieren, dass der PSF-Starter an die App umgeleitet wird, die das Arbeitsverzeichnis angibt.
Herunterladen und Installieren der erforderlichen Tools
Dieser Prozess führt Sie durch den Abruf und die Verwendung der folgenden Tools:
- NuGet Clienttool
- Framework zur Paketunterstützung
- Windows 10 SDK (neueste Version)
- SysInternals-Prozessmonitor
Im Folgenden finden Sie schrittweise Anleitungen zum Herunterladen und Installieren der erforderlichen Tools.
Laden Sie die neueste (Nichtvorschau)-Version des NuGet-Clienttools herunter, und speichern Sie die nuget.exe im
C:\PSF\nuget
Ordner.Laden Sie das Paketunterstützungsframework mithilfe von Nuget herunter, indem Sie folgendes aus einem PowerShell-Verwaltungsfenster ausführen:
Set-Location "C:\PSF" .\nuget\nuget.exe install Microsoft.PackageSupportFramework
Laden Sie das Windows 10 Software Development Toolkit (Win 10 SDK) herunter, und installieren Sie es.
- Laden Sie das Win 10 SDK herunter.
- Führen Sie die winsdksetup.exe aus, die im vorhergehenden Schritt heruntergeladen wurde.
- Wählen Sie die Schaltfläche Weiter aus.
- Wählen Sie nur die folgenden drei Features für die Installation aus:
- Windows SDK-Signaturtools für Desktop-Apps
- Windows SDK für UWP-C++-Apps
- Windwos SDK für die Lokalisierung von UWP-Apps
- Wählen Sie die Schaltfläche Installieren aus.
- Wählen Sie die Schaltfläche OK aus.
Stagen der Windows-App
Durch das Staging der Windows-App werden wir den Inhalt der Windows-App in ein lokales Verzeichnis extrahieren/entpacken. Sobald die Windows-App an den Stagingspeicherort entpackt wurde, können PSF-Fixupdateien eingefügt werden, um unerwünschte Erfahrungen zu korrigieren.
Öffnen Sie ein PowerShell-Verwaltungsfenster.
Legen Sie die folgenden Variablen für Ihre spezifische App-Datei und die Windows 10 SDK-Version fest:
$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 Korrekturmaßnahmen auf die Windows-App anzuwenden, müssen Sie eine config.json Datei erstellen und diese mit Informationen zum Windows-App-Startfeld bereitstellen, das fehlschlägt. Wenn mehrere Windows-App-Startprogramme probleme haben, kann die config.json Datei mit mehreren Einträgen aktualisiert werden.
Nach dem Aktualisieren der config.json Datei müssen die config.json Datei und die unterstützenden PSF-Fixupdateien dann in das Stammverzeichnis des Windows-App-Pakets verschoben werden.
Öffnen Sie Visual Studio Code (VS Code) oder einen anderen Text-Editor.
Erstellen Sie eine neue Datei, indem Sie oben im VS-Code das Menü "Datei " auswählen und im Dropdownmenü " Neue Datei " auswählen.
Speichern Sie die Datei als config.json, indem Sie oben im Vs Code-Fenster das Menü "Datei " auswählen und im Dropdownmenü " Speichern" auswählen. Navigieren Sie im Fenster "Speichern unter" zum Stagingverzeichnis der Windows-App (C:\PSF\Staging\PSFSampleApp), und legen Sie den Dateinamen als
config.json
fest. Wählen Sie die Schaltfläche Speichern aus.Kopieren Sie den folgenden Code in die neu erstellte config.json Datei.
{ "applications": [ { "id": "", "executable": "", "workingDirectory": "" } ], "processes": [ { "executable": "" } ] }
Öffnen Sie die mehrstufige Windows-App AppxManifest-Datei im Windows-App-Stagingordner (C:\PSF\Staging\PSFSampleApp\AppxManifest.xml) mit VS Code oder einem anderen Text-Editor.
<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>
Kopieren Sie den Wert im Feld "ID", das sich in der Datei "AppxManifest.xml" befindet, in das Feld
Package.Applications.Application
"Anwendungs-ID" in der Dateiconfig.json.Kopieren Sie den paketrelativen Pfad aus dem Executable-Feld, das sich in der Datei AppxManifest.xml befindet, in das
Package.Applications.Application
-Feld der Anwendungen in der Datei config.json.Kopieren Sie den paketrelativen übergeordneten Pfad aus dem "Executable"-Feld in der Datei AppxManifest.xml, das sich in
Package.Applications.Application
befindet, in das Feld "WorkingDirectory" der Anwendungen in der config.json-Datei.Kopieren Sie den Namen der ausführbaren Datei aus dem Feld "Ausführbare Datei" in der Datei AppxManifest.xml in
Package.Applications.Application
das Feld "Ausführbare Prozesse " in der Datei config.json.Speichern Sie die aktualisierte config.json Datei.
{ "applications": [ { "id": "PSFSample", "executable": "VFS/ProgramFilesX64/PS Sample App/PSFSample.exe", "workingDirectory": "VFS/ProgramFilesX64/PS Sample App/" } ], "processes": [ { "executable": "PSFSample" } ] }
Kopieren Sie die folgenden drei Dateien aus dem Paketunterstützungsframework basierend auf der ausführbaren Architektur der Anwendung in den Stamm der mehrstufigen Windows-App. Die folgenden Dateien befinden sich im .\Microsoft.PackageSupportFramework.<Version>\bin.
Anwendung (x64) Anwendung (x86) PSFLauncher64.exe PSFLauncher32.exe PSFRuntime64.dll PSFRuntime32.dll PSFRunDll64.exe PSFRunDll32.exe
Aktualisieren von AppxManifest
Nach dem Erstellen und Aktualisieren der config.json Datei muss die AppxManifest.xml der Windows-App für jedes Windows-App-Startfeld aktualisiert werden, das im config.jsonenthalten war. Die Anwendungen von AppxManifest müssen nun auf die PSFLauncher.exeabzielen, die der Anwendungsarchitektur zugeordnet ist.
Öffnen Sie den Datei-Explorer und navigieren Sie zum Ordner "Bereitgestellte MSIX-App" (C:\PSF\Staging\PSFSampleApp).
Klicken Sie mit der rechten Maustaste auf AppxManifest.xml, und wählen Sie im Dropdownmenü " Mit Code öffnen" aus (Optional können Sie mit einem anderen Text-Editor öffnen).
Aktualisieren Sie die AppxManifest.xml Datei mit den folgenden Informationen:
<Package ...> ... <Applications> <Application Id="PSFSample" Executable="PSFLauncher32.exe" EntryPoint="Windows.FullTrustApplication"> ... </Application> </Applications> </Package>
Erneutes Verpacken der Anwendung
Alle Korrekturen wurden angewendet, jetzt kann die Windows-App in ein MSIX-Paket gepackt und mit einem Codesignaturzertifikat signiert werden.
Ö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 erneut, 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