Kerangka Kerja Dukungan Paket - Perbaikan Direktori Kerja

Investigasi

Aplikasi Windows akan mengalihkan direktori tertentu yang terkait dengan aplikasi ke C:\Program Files\WindowsApps folder. Jika aplikasi membuat subfolder (C:\Program Files\Vendor\subfolder) sebagai bagian dari penginstalan, dan kemudian memanggil subfolder ini, aplikasi akan gagal menemukan direktori karena tidak ada.

Menggunakan Package Support Framework (PSF), penyempurnaan dapat dilakukan pada paket aplikasi Windows untuk mengatasi masalah ini. Pertama, kita harus mengidentifikasi kegagalan, dan jalur direktori yang diminta oleh aplikasi.

Menangkap kegagalan aplikasi Windows

Memfilter hasil adalah langkah opsional, yang akan membuat melihat kegagalan terkait aplikasi lebih mudah. Untuk melakukan ini, kita akan membuat dua aturan filter. Filter yang disertakan pertama untuk nama proses aplikasi, dan yang kedua adalah penyertaan hasil apa pun yang tidak berhasil.

  1. Unduh dan ekstrak Monitor Proses SysInternals ke direktori C:\PSF\ProcessMonitor .
  2. Buka Windows Explorer dan navigasikan ke Folder Monitor Proses SysInternals yang diekstrak
  3. Klik dua kali file SysInternals Process Monitor (procmon.exe), meluncurkan aplikasi.
  4. Jika diminta oleh UAC, pilih tombol Ya .
  5. Di Jendela Filter Monitor Proses, pilih menu drop-down pertama berlabel Arsitektur.
  6. Pilih Nama Proses dari menu drop-down.
  7. Di menu drop-down berikutnya, verifikasi bahwa itu diatur dengan nilai adalah.
  8. Di bidang teks ketik nama proses Aplikasi Anda (Contoh: PSFSample.exe). Example of the Process Monitor Filter Windows with App Name
  9. Pilih tombol Tambahkan.
  10. Di Jendela Filter Monitor Proses, pilih menu drop-down pertama berlabel Nama Proses.
  11. Pilih Hasil dari menu drop-down.
  12. Di menu drop-down berikutnya, pilih, dan pilih bukan dari menu drop-down.
  13. Di bidang teks ketik: SUCCESS. Example of the Process Monitor Filter Windows with Result
  14. Pilih tombol Tambahkan.
  15. Pilih tombol Ok .
  16. luncurkan aplikasi Windows, picu kesalahan, dan tutup aplikasi Windows.

Meninjau log kegagalan aplikasi Windows

Setelah menangkap proses aplikasi Windows, hasilnya perlu diselidiki untuk mengidentifikasi apakah kegagalan terkait dengan direktori kerja.

  1. Tinjau hasil SysInternals Process Monitor, mencari kegagalan yang diuraikan dalam tabel di atas.
  2. Jika hasil menunjukkan hasil "Nama Tidak Ditemukan" , dengan detail "Akses yang Diinginkan: ..." untuk aplikasi spesifik Anda yang menargetkan direktori di luar artikel "C:\Program Files\WindowsApps\...\" (seperti yang terlihat pada gambar di bawah), maka Anda telah berhasil mengidentifikasi kegagalan yang terkait dengan direktori kerja, gunakan artikel Dukungan PSF - Filesystem Access untuk panduan tentang cara menerapkan koreksi PSF ke aplikasi Anda. Displays the error message witnessed in the SysInternals Process Monitor for failure to write to directory.

Resolusi

Aplikasi Windows akan mengalihkan direktori tertentu yang terkait dengan aplikasi ke C:\Program Files\WindowsApps folder. Jika aplikasi membuat subfolder (C:\Program Files\Vendor\subfolder) sebagai bagian dari penginstalan, dan kemudian memanggil subfolder ini, aplikasi akan gagal menemukan direktori karena tidak ada.

Untuk mengatasi masalah yang terkait dengan aplikasi Windows yang merujuk ke Direktori Kerja yang salah, kita harus mengikuti empat langkah berikut:

  1. Tahapkan aplikasi Windows ke direktori lokal
  2. Membuat Config.json dan menyuntikkan File PSF yang diperlukan
  3. Memperbarui file AppxManifest aplikasi Windows
  4. Mengemas ulang dan menandatangani aplikasi Windows

Langkah-langkah di atas memberikan panduan melalui mengekstrak konten aplikasi Windows ke direktori bertahap lokal, menyuntikkan file perbaikan PSF ke direktori aplikasi Windows bertahap, mengonfigurasi Peluncur Aplikasi untuk mengarahkan ke peluncur PSF, lalu mengonfigurasi file PSF config.json untuk mengalihkan peluncur PSF ke aplikasi yang menentukan direktori kerja.

Unduh dan Instal Alat yang Diperlukan

Proses ini akan memandu Anda melalui pengambilan, dan penggunaan alat berikut:

  • Alat Klien NuGet
  • Kerangka Kerja Dukungan Paket
  • Windows 10 SDK (versi terbaru)
  • Monitor Proses SysInternals

Berikut ini akan memberikan panduan langkah demi langkah tentang mengunduh dan menginstal alat yang diperlukan.

  1. Unduh versi terbaru (non-pratinjau) alat klien NuGet, dan simpan nuget.exe di C:\PSF\nuget folder.

  2. Unduh Kerangka Kerja Dukungan Paket menggunakan Nuget dengan menjalankan hal berikut dari jendela PowerShell Administratif:

    Set-Location "C:\PSF"
    .\nuget\nuget.exe install Microsoft.PackageSupportFramework
    
  3. Unduh dan instal Toolkit Pengembangan Perangkat Lunak Windows 10 (Win 10 SDK).

    1. Unduh Win 10 SDK.
    2. Jalankan winsdksetup.exe yang diunduh di langkah sebelumnya.
    3. Pilih tombol Berikutnya.
    4. Pilih hanya tiga fitur berikut untuk diinstal:
      • Alat Penandatanganan Windows SDK untuk Aplikasi Desktop
      • Windows SDK untuk Aplikasi C++ UWP
      • Windwos SDK untuk Pelokalan Aplikasi UWP
    5. Pilih tombol Instal.
    6. Pilih tombol Ok .

Tahapkan aplikasi Windows

Dengan penahapan aplikasi Windows, kami akan mengekstrak/membongkar konten aplikasi Windows ke direktori lokal. Setelah aplikasi Windows dibuka ke lokasi penahapan, file perbaikan PSF dapat disuntikkan untuk memperbaiki pengalaman yang tidak diinginkan.

  1. Buka jendela PowerShell Administratif.

  2. Atur variabel berikut yang 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
    
  3. 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 menerapkan tindakan korektif ke aplikasi Windows, Anda harus membuat file config.json , dan menyediakannya dengan informasi tentang peluncur aplikasi Windows yang gagal. Jika ada beberapa peluncur aplikasi Windows yang mengalami masalah, maka file config.json dapat diperbarui dengan beberapa entri.

Setelah memperbarui file config.json , file config.json dan file perbaikan PSF pendukung kemudian harus dipindahkan ke akar paket aplikasi Windows.

  1. Buka Visual Studio Code (VISUAL Code), atau editor teks lainnya.

  2. Buat file baru, dengan memilih menu File di bagian atas Visual Studio Code, memilih File Baru dari menu drop-down.

  3. Simpan file sebagai config.json, dengan memilih menu File di bagian atas jendela Visual Studio Code, pilih Simpan dari menu drop-down. Di jendela Simpan Sebagai, navigasikan ke direktori penahapan aplikasi Windows (C:\PSF\Staging\PSFSampleApp) dan atur Nama File sebagai config.json. Pilih tombol Simpan.

  4. Salin kode berikut ke file config.json yang baru dibuat.

    {
        "applications": [
            {
                "id": "",
                "executable": "",
                "workingDirectory": ""
            }
        ],
        "processes": [
            {
                "executable": ""
            }
        ]
    }
    
  5. Buka file AppxManifest aplikasi Windows bertahap yang terletak di folder penahapan aplikasi Windows (C:\PSF\Staging\PSFSampleApp\AppxManifest.xml) menggunakan Visual Studio Code, atau editor teks lainnya.

    <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>
    
  6. Salin nilai di bidang ID yang terletak di file AppxManifest.xml yang terletak di Package.Applications.Application bidang ID Aplikasi di file config.json . Image circling the location of the ID within the AppxManifest file.

  7. Salin jalur package-relative dari bidang Executable yang terletak di file AppxManifest.xml yang terletak di Package.Applications.Application bidang Applications Executable di file config.json . Image circling the location of the executable within the AppxManifest file.

  8. Salin jalur induk package-relative dari bidang Executable yang terletak di file AppxManifest.xml yang terletak di Package.Applications.Application bidang Applications WorkingDirectory di file config.json . Image circling the location of the working directory within the AppxManifest file.

  9. Salin nama yang dapat dieksekusi dari bidang Executable yang terletak di file AppxManifest.xml yang terletak di Package.Applications.Application ke bidang Processes Executable di file config.json . Image circling the location of the process executable within the AppxManifest file.

  10. Simpan file config.json yang diperbarui.

    {
        "applications": [
            {
            "id": "PSFSample",
            "executable": "VFS/ProgramFilesX64/PS Sample App/PSFSample.exe",
            "workingDirectory": "VFS/ProgramFilesX64/PS Sample App/"
            }
        ],
        "processes": [
            {
            "executable": "PSFSample"
            }
        ]
    }
    
  11. Salin tiga file berikut dari Package Support Framework berdasarkan arsitektur aplikasi yang dapat dieksekusi ke akar aplikasi Windows yang ditahapkan. File berikut terletak di dalam .\Microsoft.PackageSupportFramework.<Versi>\bin.

    Aplikasi (x64) Aplikasi (x86)
    PSFLauncher64.exe PSFLauncher32.exe
    PSFRuntime64.dll PSFRuntime32.dll
    PSFRunDll64.exe PSFRunDll32.exe

Memperbarui AppxManifest

Setelah membuat dan memperbarui file config.json, AppxManifest.xml aplikasi Windows harus diperbarui untuk setiap peluncur aplikasi Windows yang disertakan dalam config.json. Aplikasi AppxManifest sekarang harus menargetkan PSFLauncher.exe yang terkait dengan arsitektur aplikasi.

  1. Buka File Explorer, dan navigasikan ke folder Aplikasi MSIX Bertahap (C:\PSF\Staging\PSFSampleApp).

  2. Klik kanan pada AppxManifest.xml, dan pilih Buka dengan Kode dari menu drop-down (Secara opsional, Anda dapat membuka dengan editor teks lain).

  3. Perbarui file AppxManifest.xml dengan informasi berikut:

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

Mengemas ulang aplikasi

Semua koreksi telah diterapkan, sekarang aplikasi Windows dapat dipaketkan ulang ke dalam MSIX, dan ditandatangani menggunakan sertifikat penandatanganan kode.

  1. Buka Jendela PowerShell Administratif.

  2. 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
    
  3. 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"
    
  4. 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