Cara memperbaiki kesalahan Izin Tulis Sistem File Kerangka Kerja Dukungan Paket
Artikel ini menjelaskan cara menggunakan Package Support Framework (PSF) untuk mengatasi kesalahan Izin Tulis Sistem File.
Aplikasi Windows mengalihkan direktori terkait aplikasi tertentu ke C:\Program Files\WindowsApps
folder. Jika aplikasi mencoba menulis ke kontainer aplikasi Windows, kesalahan memicu, dan penulisan gagal. Anda dapat melakukan penyempurnaan pada paket aplikasi Windows untuk mengatasi masalah ini.
Investigasi
Pertama, identifikasi kegagalan, dan jalur direktori yang diminta aplikasi.
Menangkap kegagalan aplikasi Windows
Memfilter hasil bersifat opsional, tetapi memudahkan untuk melihat kegagalan terkait aplikasi. Untuk memfilter hasil, Anda membuat dua aturan filter. Filter pertama mencakup nama proses aplikasi, dan filter kedua menyertakan hasil apa pun yang tidak berhasil.
Unduh dan ekstrak Monitor Proses SysInternals ke direktori C:\PSF\ProcessMonitor .
Buka Windows Explorer dan navigasikan ke folder SysInternals ProcessMonitor yang diekstrak .
Pilih file procmon.exe SysInternals Process Monitor untuk meluncurkan aplikasi.
Jika diminta oleh UAC, pilih Ya.
Di jendela Filter Monitor Proses, pilih Nama Proses dari menu dropdown bidang pertama.
Verifikasi bahwa muncul di bidang berikutnya.
Di bidang berikutnya, masukkan nama proses aplikasi Anda, misalnya PSFSample.exe.
Pilih Tambahkan.
Di jendela Filter Monitor Proses, pilih Hasil dari menu dropdown bidang pertama.
Di bidang berikutnya, pilih bukan dari menu dropdown.
Di bidang teks, masukkan SUCCESS.
Pilih Tambahkan lalu pilih OK.
Luncurkan aplikasi Windows, picu kesalahan, lalu tutup aplikasi Windows.
Meninjau log kegagalan aplikasi Windows
Setelah Anda mengambil proses aplikasi Windows, selidiki hasilnya untuk menentukan apakah kegagalan terkait dengan direktori kerja.
Tinjau hasil kegagalan SysInternals Process Monitor. Jika hasilnya termasuk Akses ditolak, dengan Akses yang Diinginkan: Detail Tulis Generik, untuk aplikasi Anda yang menargetkan C:\Program Files\WindowsApps\...\, Anda telah mengidentifikasi kegagalan izin tulis yang terkait dengan direktori kerja.
Jika Anda mengidentifikasi kesalahan ini, terapkan koreksi PSF berikut ke aplikasi Anda.
Resolusi
Untuk mengatasi masalah aplikasi Windows yang gagal menulis ke kontainer aplikasi Windows, ikuti langkah-langkah berikut:
- Ekstrak konten aplikasi Windows ke direktori penahapan lokal.
- Buat config.json dan masukkan file perbaikan PSF ke direktori aplikasi Windows bertahap.
- Konfigurasikan peluncur aplikasi untuk menunjuk ke peluncur PSF, dan konfigurasikan file config.json PSF untuk mengalihkan peluncur PSF, menentukan direktori kerja.
- Perbarui file AppxManifest aplikasi Windows.
- Kemas ulang dan tanda tangani aplikasi Windows.
Mengunduh dan menginstal alat yang diperlukan
Proses ini memerlukan alat berikut:
- Alat klien NuGet
- Kerangka Kerja Dukungan Paket (PSF)
- Toolkit Pengembangan Perangkat Lunak Windows 10 (Win 10 SDK), versi terbaru
- Monitor Proses SysInternals
Untuk mengunduh dan menginstal NuGet dan PSF:
Unduh versi non-pratinjau terbaru dari alat klien NuGet, dan simpan nuget.exe di C:\PSF\nuget.
Unduh dan instal Kerangka Kerja Dukungan Paket dengan NuGet dengan menjalankan perintah berikut dari jendela PowerShell administratif:
Set-Location "C:\PSF" .\nuget\nuget.exe install Microsoft.PackageSupportFramework
Untuk mengunduh dan menginstal Windows 10 SDK:
- Unduh Win 10 SDK.
- Jalankan winsdksetup.exe .
- Pilih Selanjutnya.
- Pilih hanya tiga fitur berikut:
- Alat Penandatanganan Windows SDK untuk Aplikasi Desktop
- Windows SDK untuk Aplikasi C++ UWP
- Windwos SDK untuk Pelokalan Aplikasi UWP
- Pilih Instal, lalu pilih OK.
Tahapkan aplikasi Windows
Penahapan aplikasi Windows mengekstrak dan membongkar konten aplikasi ke direktori lokal. Setelah aplikasi Windows dibuka ke lokasi penahapan, Anda dapat menyuntikkan file perbaikan PSF untuk memperbaiki pengalaman yang tidak diinginkan.
Di jendela PowerShell administratif, atur variabel berikut untuk menargetkan file aplikasi spesifik Anda dan versi Windows 10 SDK:
$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
Buka kemasan aplikasi Windows ke folder penahapan dengan menjalankan cmdlet PowerShell berikut:
## 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"
Membuat dan menyuntikkan file PSF yang diperlukan
Untuk memperbaiki aplikasi Windows, Anda membuat file config.json dengan informasi tentang peluncur aplikasi Windows yang gagal. Jika beberapa peluncur aplikasi Windows mengalami masalah, Anda dapat mengonfigurasi file config.json dengan beberapa entri.
Setelah membuat file config.json , Anda memindahkan config.json dan mendukung file perbaikan PSF ke akar paket aplikasi Windows.
Buka Visual Studio Code atau editor teks lainnya.
Buat file baru bernama config.json di direktori penahapan aplikasi Windows, C:\PSF\Staging\PSFSampleApp.
Salin kode berikut ke file config.json yang baru dibuat.
{ "applications": [ { "id": "", "executable": "" } ], "processes": [ { "executable": "", "fixups": [ { "dll": "", "config": { "redirectedPaths": { "packageRelative": [ { "base": "", "patterns": [ "" ] } ] } } } ] } ] }
Buka file AppxManifest.xml di folder penahapan aplikasi Windows. Contoh berikut menunjukkan file AppxManifest.xml :
<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>
Buat perubahan berikut dalam file config.json :
Atur
applications.id
nilai menjadi nilai yang sama seperti diApplications.Application.ID
bidang file AppxManifest.xml .Atur
applications.executable
nilai untuk menargetkan jalur relatif ke aplikasi yang terletak diApplications.Application.Executable
bidang file AppxManifest.xml .Atur
applications.workingdirectory
nilai untuk menargetkan jalur folder relatif diApplications.Application.Executable
bidang file AppxManifest.xml .Atur
process.executable
nilai untuk menargetkan nama file, tanpa jalur dan ekstensi, diApplications.Application.Executable
bidang file AppxManifest.xml .Atur
processes.fixups.dll
nilai untuk menargetkan spesifikFileRedirectionFixup.dll
arsitektur . Jika koreksi adalah untuk arsitektur x64, atur nilainya menjadiFileRedirectionFixup64.dll
. Jika arsitekturnya x86, atau tidak diketahui, atur nilainya menjadiFileRedirectionFixup86.dll
.Atur
processes.fixups.config.redirectedPaths.packageRelative.base
nilai ke jalur folder package-relative diApplications.Application.Executable
bidang file AppxManifest.xml .Atur
processes.fixups.config.redirectedPaths.packageRelative.patterns
nilai agar sesuai dengan jenis file yang dibuat aplikasi. Jika Anda menggunakan.*\\.log
, PSF mengalihkan semua penulisan file log diprocesses.fixups.config.redirectedPaths.packageRelative.base
direktori dan direktori anak.
Simpan file config.json yang diperbarui. Contoh berikut menunjukkan file config.json yang diperbarui:
{ "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" ] } ] } } } ] } ] }
Salin file berikut dari Package Support Framework untuk arsitektur aplikasi yang dapat dieksekusi ke akar aplikasi Windows yang ditahapkan. Anda dapat menemukan file di .\Microsoft.PackageSupportFramework.\<Version>\bin.
Aplikasi (x64) Aplikasi (x86) PSFLauncher64.exe PSFLauncher32.exe PSFRuntime64.dll PSFRuntime32.dll PSFRunDll64.exe PSFRunDll32.exe FileRedirectionFixup64.dll FileRedirectionFixup64.dll
Memperbarui AppxManifest
Setelah Anda membuat dan memperbarui file config.json, perbarui file AppxManifest.xml aplikasi Windows untuk setiap peluncur aplikasi Windows yang Anda sertakan dalam config.json. AppxManifest.xml Applications
sekarang harus menargetkan PSFLauncher.exe yang terkait dengan arsitektur aplikasi.
- Buka AppxManifest.xml di folder aplikasi MSIX bertahap, C:\PSF\Staging\PSFSampleApp.
- Perbarui AppxManifest.xml dengan kode berikut:
<Package ...> ... <Applications> <Application Id="PSFSample" Executable="PSFLauncher32.exe" EntryPoint="Windows.FullTrustApplication"> ... </Application> </Applications> </Package>
Mengemas ulang aplikasi
Setelah Anda menerapkan semua koreksi, kemas ulang aplikasi Windows ke dalam MSIX dan tanda tangani dengan sertifikat penandatanganan kode.
Buka Jendela PowerShell Administratif.
Atur variabel berikut:
$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
Kemas ulang aplikasi Windows dari folder penahapan dengan menjalankan cmdlet PowerShell berikut:
Set-Location "${env:ProgramFiles(x86)}\Windows Kits\10\Bin\$Win10SDKVersion\$OSArchitecture" .\makeappx.exe pack /p "$AppPath" /d "$StagingFolder"
Tanda tangani aplikasi Windows dengan menjalankan cmdlet PowerShell berikut:
Set-Location "${env:ProgramFiles(x86)}\Windows Kits\10\Bin\$Win10SDKVersion\$OSArchitecture" .\signtool.exe sign /v /fd sha256 /f $CodeSigningCert /p $CodeSigningPass $AppPath