Aracılığıyla paylaş


Paket Destek Çerçevesi ile Çalışmaya Başlama

Paket Destek Çerçevesi, bir MSIX kapsayıcısında çalışabilmesi için mevcut masaüstü uygulamanıza (kodu değiştirmeden) düzeltmeler uygulamanıza yardımcı olan bir açık kaynak setidir. Paket Destek Çerçevesi, uygulamanızın modern çalışma zamanı ortamının en iyi yöntemlerini izlemesine yardımcı olur.

Bu makalede, Paket Destek Çerçevesi'nin her bileşenine yönelik ilk bakıştan ve bunu kullanmaya yönelik adım adım kılavuzdan yararlanılmaktadır.

Paket Destek Çerçevesi'nin içinde neler olduğunu anlama

Paket Destek Çerçevesi yürütülebilir dosya, çalışma zamanı yöneticisi DLL'i ve çalışma zamanı düzeltmeleri kümesi içerir.

Paket Destek Çerçevesi

İşlem şu şekildedir:

  1. Uygulamanıza uygulamak istediğiniz düzeltmeleri belirten bir yapılandırma dosyası oluşturun.
  2. Paketinizi Paket Destek Çerçevesi (PSF) başlatıcı yürütülebilir dosyasını gösterecek şekilde düzenleyin.

Kullanıcılar uygulamanızı başlattığında Paket Destek Çerçevesi başlatıcısı, çalışan ilk yürütülebilir dosyadır. Yapılandırma dosyanızı okur ve çalışma zamanı düzeltmelerini ve çalışma zamanı yöneticisi DLL'sini uygulama işlemine ekler. Çalışma zamanı yöneticisi, uygulamanın bir MSIX kapsayıcısının içinde çalışması gerektiğinde düzeltmeyi uygular.

Paket Destek Çerçevesi DLL Ekleme

1. Adım: Paketlenmiş uygulama uyumluluğu sorunlarını belirleme

İlk olarak uygulamanız için bir paket oluşturun. Ardından yükleyin, çalıştırın ve davranışını gözlemleyin. Uyumluluk sorununu belirlemenize yardımcı olabilecek hata iletileri alabilirsiniz. Sorunları belirlemek için İşlem İzleyicisi'ni de kullanabilirsiniz. Yaygın sorunlar, çalışma dizini ve program yolu izinleri ile ilgili uygulama varsayımlarıyla ilgilidir.

Bir sorunu belirlemek için İşlem İzleyicisi'nin kullanılması

İşlem İzleyicisi , bir uygulamanın dosya ve kayıt defteri işlemlerini ve sonuçlarını gözlemlemek için güçlü bir yardımcı programdır. Bu, uygulama uyumluluğu sorunlarını anlamanıza yardımcı olabilir. İşlem İzleyicisi'ni açtıktan sonra, yalnızca uygulama yürütülebilir dosyasının olaylarını içerecek bir filtre (Filtre > Filtresi...) ekleyin.

ProcMon Uygulama Filtresi

Olayların listesi görüntülenir. Bu olayların çoğu için SONUÇ sütunundaBAŞARI sözcüğü görünür.

ProcMon Olayları

İsteğe bağlı olarak, olayları yalnızca hataları gösterecek şekilde filtreleyebilirsiniz.

ProcMon Dışlama Başarısı

Bir dosya sistemi erişim hatasından şüpheleniyorsanız, System32/SysWOW64 veya paket dosya yolu altında başarısız olayları arayın. Filtreler de burada yardımcı olabilir. Bu listenin en altından başlayın ve yukarı doğru kaydırın. Bu listenin en altında görünen hatalar en son oluştu. "Erişim reddedildi" ve "yol/ad bulunamadı" gibi dizeler içeren hatalara dikkat edin ve şüpheli görünmeyen öğeleri yoksayın. PSFSample'da iki sorun vardır. Bu sorunları aşağıdaki görüntüde görüntülenen listede görebilirsiniz.

ProcMon Config.txt

Bu görüntüde görüntülenen ilk sorunda, uygulama "C:\Windows\SysWOW64" yolunda bulunan "Config.txt" dosyasından okuyamamektedir. Uygulamanın bu yola doğrudan başvurmaya çalışması olası değildir. Büyük olasılıkla, göreli bir yol kullanarak bu dosyadan okumaya çalışıyor ve varsayılan olarak "System32/SysWOW64" uygulamanın çalışma dizinidir. Bu, uygulamanın geçerli çalışma dizininin pakette bir yere ayarlanmasını beklediğini gösterir. appx dosyasının içine baktığımızda dosyanın yürütülebilir dosyayla aynı dizinde bulunduğunu görebiliriz.

Uygulama Config.txt

İkinci sorun aşağıdaki görüntüde gösterilir.

ProcMon Logfile

Bu sorunda uygulama, paket yoluna bir .log dosyası yazamamaktadır. Bu, bir dosya yeniden yönlendirme düzeltmesinin yardımcı olabileceğini gösterir.

2. Adım: Çalışma zamanı düzeltmesi bul

PSF, dosya yeniden yönlendirme düzeltmesi gibi şu anda kullanabileceğiniz çalışma zamanı düzeltmeleri içerir.

Dosya Yeniden Yönlendirme Düzeltmesi

MsIX kapsayıcısında çalışan bir uygulamadan erişilmeyen bir dizinde veri yazma veya okuma girişimlerini yeniden yönlendirmek için Dosya Yeniden Yönlendirme Düzeltmesi'ni kullanabilirsiniz.

Örneğin, uygulamanız uygulama yürütülebilir dosyasıyla aynı dizinde yer alan bir günlük dosyasına yazarsa, bu günlük dosyasını yerel uygulama veri deposu gibi başka bir konumda oluşturmak için Dosya Yeniden Yönlendirme Düzeltmesi'ni kullanabilirsiniz.

Topluluk tarafından yapılan çalışma zamanı düzeltmeleri

GitHub sayfamıza topluluk katkılarını gözden geçirmeyi unutmayın. Diğer geliştiriciler sizinkine benzer bir sorunu çözmüş ve çalışma zamanı düzeltmesi paylaşmış olabilir.

3. Adım: Çalışma zamanı düzeltmesi uygulama

Windows SDK'sından birkaç basit araçla ve aşağıdaki adımları izleyerek mevcut bir çalışma zamanı düzeltmesini uygulayabilirsiniz.

  • Paket düzeni klasörü oluşturma
  • Paket Destek Çerçevesi dosyalarını alma
  • Bunları paketinize ekleyin
  • Paket bildirimini değiştirme
  • Yapılandırma dosyası oluşturma

Şimdi her görevi inceleyelim.

Paket düzeni klasörünü oluşturma

Zaten bir .msix (veya .appx) dosyanız varsa, içeriğini paketinizin hazırlama alanı olarak görev yapacak bir düzen klasörüne açabilirsiniz. Bunu, SDK'nın yükleme yolunu temel alarak MakeAppx aracını kullanarak komut isteminden yapabilirsiniz. Windows 10 bilgisayarınızda makeappx.exe aracını burada bulabilirsiniz: x86: C:\Program Files (x86)\Windows Kits\10\bin\x86\makeappx.exe x64: C:\Program Files (x86)\Windows Kits\10\bin\x64\makeappx.exe

makeappx unpack /p PSFSamplePackage_1.0.60.0_AnyCPU_Debug.msix /d PackageContents

Bu size aşağıdakine benzer bir şey verir.

Paket Düzeni

Başlangıç olarak bir .msix (veya .appx) dosyanız yoksa, paket klasörünü ve dosyaları sıfırdan oluşturabilirsiniz.

Paket Destek Çerçevesi dosyalarını alma

PSF Nuget paketini tek başına Nuget komut satırı aracını kullanarak veya Visual Studio aracılığıyla alabilirsiniz.

Komut satırı aracını kullanarak paketi alma

Nuget komut satırı aracını şu konumdan yükleyin: https://www.nuget.org/downloads. Ardından Nuget komut satırında şu komutu çalıştırın:

nuget install Microsoft.PackageSupportFramework

Alternatif olarak, paket uzantısını .zip olarak yeniden adlandırabilir ve sıkıştırmasını kaldırabilirsiniz. İhtiyacınız olan tüm dosyalar /bin klasörünün altında yer alır.

Visual Studio kullanarak paketi alma

Visual Studio'da çözümünüz veya proje düğümünüze sağ tıklayın ve Nuget Paketlerini Yönet komutlarından birini seçin. Paketi Nuget.org'da bulmak için Microsoft.PackageSupportFramework veya PSF arayın. Ardından yükleyin.

Paket Destek Çerçevesi dosyalarını paketinize ekleme

Gerekli 32 bit ve 64 bit PSF DLL'lerini ve yürütülebilir dosyaları paket dizinine ekleyin. Kılavuz olarak aşağıdaki tabloyu kullanın. Ayrıca ihtiyacınız olan tüm çalışma zamanı düzeltmelerini de dahil etmek isteyeceksiniz. Örneğimizde dosya yeniden yönlendirme çalışma zamanı düzeltmesine ihtiyacımız var.

Uygulama yürütülebilir dosyası x64 biçimindedir. Uygulama çalıştırılabilir dosyası x86
PSFLauncher64.exe PSFLauncher32.exe
PSFRuntime64.dll PSFRuntime32.dll
PSFRunDll64.exe PSFRunDll32.exe

Paket içeriğiniz artık şuna benzer olmalıdır.

Paket İkiliLeri

Paket bildirimini değiştirme

Paket bildiriminizi bir metin düzenleyicisinde açın ve ardından Executable öğesinin Application özniteliğini PSF Launcher yürütülebilir dosyasının adı olarak ayarlayın. Hedef uygulamanızın mimarisini biliyorsanız uygun sürümü seçin, PSFLauncher32.exe veya PSFLauncher64.exe. Aksi takdirde, PSFLauncher32.exe her durumda çalışır. İşte bir örnek.

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

Yapılandırma dosyası oluşturma

Bir dosya adı config.jsonoluşturun ve bu dosyayı paketinizin kök klasörüne kaydedin. config.json dosyasının bildirilen uygulama kimliğini değiştirerek yeni değiştirdiğiniz yürütülebilir dosyaya yönlendirin. İşlem İzleyicisi'ni kullanarak elde ettiğiniz bilgileri kullanarak, çalışma dizinini ayarlayabilir ve dosya yeniden yönlendirme düzeltmesini kullanarak okumaları/yazma işlemlerini pakete göre "PSFSampleApp" dizini altındaki .log dosyalarına yönlendirebilirsiniz.

{
    "applications": [
        {
            "id": "PSFSample",
            "executable": "PSFSampleApp/PSFSample.exe",
            "workingDirectory": "PSFSampleApp/"
        }
    ],
    "processes": [
        {
            "executable": "PSFSample",
            "fixups": [
                {
                    "dll": "FileRedirectionFixup.dll",
                    "config": {
                        "redirectedPaths": {
                            "packageRelative": [
                                {
                                    "base": "PSFSampleApp/",
                                    "patterns": [
                                        ".*\\.log"
                                    ]
                                }
                            ]
                        }
                    }
                }
            ]
        }
    ]
}

config.json şemasına yönelik bir kılavuz aşağıdadır:

Dizi anahtar Değer
uygulamalar kimlik Paket bildirimindeki Id öğesinin özniteliğinin Application değerini kullanın.
uygulamalar Yürütüle -bilir Başlatmak istediğiniz yürütülebilir dosyanın paket göreli yolu. Çoğu durumda, bu değeri değiştirmeden önce paket bildirim dosyanızdan alabilirsiniz. Executable öğesinin Application niteliğinin değeridir.
uygulamalar çalışmaDizini (İsteğe bağlı) Uygulama başlatıldığında çalışma dizini olarak kullanılacak paket göreli yol. Bu değeri ayarlamazsanız, işletim sistemi uygulamanın çalışma dizini olarak dizinini kullanır System32 .
Süreç Yürütüle -bilir Çoğu durumda, bu, yukarıda yapılandırılan ve yol ile dosya uzantısı kaldırılan executable adıdır.
düzeltmeler Dll Yüklenecek düzeltmenin paketle göreceli yolu: .msix/.appx.
düzeltmeler konfigürasyon (İsteğe bağlı) Düzeltme dll'sinin nasıl davranacağını denetler. Her düzeltme bu "blobu" istediği gibi yorumlayabildiği için bu değerin tam biçimi düzeltmeye göre değişiklik gösterir.

applications, processesve fixups anahtarları dizilerdir. Bu, birden fazla uygulama, işlem ve düzeltme DLL'sini belirtmek için config.json dosyasını kullanabileceğiniz anlamına gelir.

Uygulamayı paketleme ve test edin

Ardından bir paket oluşturun.

makeappx pack /d PackageContents /p PSFSamplePackageFixup.msix

O zaman imzalayın.

signtool sign /a /v /fd sha256 /f ExportedSigningCertificate.pfx PSFSamplePackageFixup.msix

Daha fazla bilgi için bkz. Paket imzalama sertifikası oluşturma ve signtool kullanarak bir paketi imzalama

PowerShell'i kullanarak paketi yükleyin.

Uyarı

Önce paketi kaldırmayı unutmayın.

powershell Add-AppPackage .\PSFSamplePackageFixup.msix

Uygulamayı çalıştırın ve çalışma zamanı düzeltmesi uygulanmış davranışı gözlemleyin. Tanılama ve paketleme adımlarını gerektiği gibi tekrarlayın.

Paket Destek Çerçevesi'nin çalışıp çalışmadığını denetleme

Çalışma zamanı düzeltmenizin çalışıp çalışmadığını de kontrol edebilirsiniz. Bunu yapmak için Görev Yöneticisi'nin açılması ve Diğer ayrıntılar'a tıklamak gerekir. Paket destek çerçevesinin uygulandığı uygulamayı bulun ve daha fazla ayrıntı eklemek için uygulama ayrıntılarını genişletin. Paket Destek Çerçevesi'nin çalıştığını görüntüleyebilmeniz gerekir.

İzleme Düzeltmesi'ni kullanma

Paketlenmiş uygulama uyumluluğu sorunlarını tanılamanın alternatif bir tekniği, "Trace Fixup"ı kullanmaktır. Bu DLL, PSF'ye dahil edilir ve İşlem İzleyicisi'ne benzer şekilde uygulamanın davranışına ilişkin ayrıntılı bir tanılama görünümü sağlar. Uygulama uyumluluğu sorunlarını ortaya çıkarmak için özel olarak tasarlanmıştır. İzleme Düzeltmesi'ni kullanmak için DLL'yi pakete ekleyin, aşağıdaki parçayı config.json'ınıza ekleyin ve ardından uygulamanızı paketleyip yükleyin.

{
    "dll": "TraceFixup.dll",
    "config": {
        "traceLevels": {
            "filesystem": "allFailures"
        }
    }
}

İzleme Düzeltmesi varsayılan olarak "beklenen" olarak kabul edilebilecek hataları filtreler. Örneğin, uygulamalar sonucu yoksayarak zaten var olup olmadığını denetlemeden bir dosyayı koşulsuz olarak silmeye çalışabilir. Bu, bazı beklenmeyen hataların filtrelenebilmesinin talihsiz bir sonucu olduğundan, yukarıdaki örnekte tüm hataları dosya sistemi işlevlerinden almayı tercih ediyoruz. Bunu, Config.txt dosyasından okuma girişiminin "dosya bulunamadı" iletisiyle başarısız olduğunu önceden bildiğimiz için yaparız. Bu, sık gözlemlenen ve genellikle beklenmeyen olduğu varsayılmayan bir hatadır. Uygulamada en iyisi filtrelemeye yalnızca beklenmeyen hatalar için başlamak ve hâlâ tanımlanamayan bir sorun varsa tüm hatalara geri dönmektir.

Varsayılan olarak, İzleme Düzeltmesi'nden alınan çıkış ekli hata ayıklayıcıya gönderilir. Bu örnekte hata ayıklayıcı eklemeyeceğiz ve bunun yerine çıkışını görüntülemek için SysInternals'dan DebugView programını kullanacağız. Uygulamayı çalıştırdıktan sonra, öncekiyle aynı hataları görebiliriz ve bu, aynı çalışma zamanı düzeltmelerine yönlendirecektir.

TraceShim Dosyası Bulunamadı

TraceShim Erişimi Reddedildi

Çalışma zamanı düzeltmesinde hata ayıklama, genişletme veya oluşturma

Visual Studio'yu kullanarak çalışma zamanı düzeltmesinde hata ayıklayabilir, çalışma zamanı düzeltmesini genişletebilir veya sıfırdan oluşturabilirsiniz. Başarılı olmak için bunları yapmanız gerekir.

  • Paketleme projesi ekleme
  • Çalışma zamanı düzeltmesi projesi ekle
  • PSF Launcher yürütülebilir dosyasını başlatacak bir proje ekleyin
  • Paketleme projesini yapılandırma

İşiniz bittiğinde çözümünüz şuna benzer olacaktır.

Tamamlanan çözüm

Şimdi bu örnekteki her projeye göz atalım.

Proje Amaç
Masaüstü Uygulama Paketi Bu proje , Windows Uygulama Paketleme projesini temel alır ve MSIX paketinin çıkışını oluşturur.
Runtimefix Bu, çalışma zamanı düzeltmesi işlevi gören bir veya daha fazla değiştirme fonksiyonu içeren bir C++ Dynamic-Linked Kütüphanesi projesidir.
PSFLauncher Bu, C++ Boş Projesidir. Bu proje, Paket Destek Çerçevesi'nin dağıtılabilir çalışma zamanı dosyalarını toplamak için bir yerdir. Yürütülebilir bir dosya çıktısı alır. Bu yürütülebilir dosya, çözümü başlattığınızda çalıştırabileceğiniz ilk şeydir.
WinFormsDesktopApplication Bu proje bir masaüstü uygulamasının kaynak kodunu içerir.

Bu tür projelerin tümünü içeren eksiksiz bir örneğe bakmak için bkz. PSFSample.

Şimdi çözümünüzde bu projelerin her birini oluşturma ve yapılandırma adımlarını inceleyelim.

Paket çözümü oluşturma

Masaüstü uygulamanız için henüz bir çözümünüz yoksa Visual Studio'da yeni bir Boş Çözüm oluşturun.

Boş çözüm

Ayrıca, sahip olduğunuz tüm uygulama projelerini de eklemek isteyebilirsiniz.

Paketleme projesi ekleme

Henüz bir Windows Uygulama Paketleme Projeniz yoksa, bir proje oluşturun ve bunu çözümünüze ekleyin.

Paket projesi şablonu

Windows Uygulama Paketleme projesi hakkında daha fazla bilgi için bkz. Visual Studio kullanarak uygulamanızı paketleme.

Çözüm Gezgini'nde paketleme projesine sağ tıklayın, Düzenle'yi seçin ve bunu proje dosyasının en altına ekleyin:

<Target Name="PSFRemoveSourceProject" AfterTargets="ExpandProjectReferences" BeforeTargets="_ConvertItems">
<ItemGroup>
  <FilteredNonWapProjProjectOutput Include="@(_FilteredNonWapProjProjectOutput)">
  <SourceProject Condition="'%(_FilteredNonWapProjProjectOutput.SourceProject)'=='<your runtime fix project name goes here>'" />
  </FilteredNonWapProjProjectOutput>
  <_FilteredNonWapProjProjectOutput Remove="@(_FilteredNonWapProjProjectOutput)" />
  <_FilteredNonWapProjProjectOutput Include="@(FilteredNonWapProjProjectOutput)" />
</ItemGroup>
</Target>

Çalışma zamanı düzeltmesi projesi ekle

Çözüme bir C++ Dynamic-Link Kitaplığı (DLL) projesi ekleyin.

Çalışma zamanı hata düzeltme kitaplığı

Bu projeye sağ tıklayın ve özellikler'i seçin.

Özellik sayfalarında C++ Dil Standardı alanını bulun ve ardından bu alanın yanındaki açılan listede ISO C++17 Standart (/std:c++17) seçeneğini belirleyin.

ISO 17 Seçeneği

Bu projeye sağ tıklayın ve bağlam menüsünde Nuget Paketlerini Yönet seçeneğini belirleyin. Paket kaynağı seçeneğinin Tümü veya nuget.org olarak ayarlandığından emin olun.

Bu alanın yanındaki ayarlar simgesine tıklayın.

PSF* Nuget paketini arayın ve bu proje için yükleyin.

nuget paketi

Var olan bir çalışma zamanı düzeltmesinin hatalarını ayıklamak veya genişletmek istiyorsanız, bu kılavuzun Çalışma zamanı düzeltmesi bulma bölümünde açıklanan yönergeleri kullanarak elde ettiğiniz çalışma zamanı düzeltme dosyalarını ekleyin.

Yepyeni bir düzeltme oluşturmayı planlıyorsanız, bu projeye henüz bir şey eklemeyin. Bu kılavuzun ilerleyen bölümlerinde bu projeye doğru dosyaları eklemenize yardımcı olacağız. Şimdilik çözümünüzü ayarlamaya devam edeceğiz.

PSF Launcher yürütülebilir dosyasını başlatacak bir proje ekleyin

Çözüme bir C++ Boş Proje projesi ekleyin.

Boş proje

Önceki bölümde açıklanan yönergeleri kullanarak PSF Nuget paketini bu projeye ekleyin.

Projenin özellik sayfalarını açın ve Genel ayarlar sayfasında Hedef Adı özelliğini PSFLauncher32 uygulamanızın mimarisine bağlı olarak veya PSFLauncher64 olarak ayarlayın.

PSF Launcher referansı

Çözümünüzdeki çalışma zamanı düzeltme projesine bir proje başvurusu ekleyin.

çalışma zamanı düzeltme referansı

Başvuruya sağ tıklayın ve Özellikler penceresinde bu değerleri uygulayın.

Mülkiyet Değer
Yerel kopyala Doğru
Yerel Uydu Derlemelerini Kopyala Doğru
Referans Derlemesi Çıktısı Doğru
Bağlantı Kitaplığı Bağımlılıkları Yanlış
Bağlantı Kitaplığı Bağımlılık Girişleri Yanlış

Paketleme projesini yapılandırma

Paketleme projesinde Uygulamalar klasörüne sağ tıklayın ve ardından Başvuru Ekle'yi seçin.

Proje Başvurusu Ekle

PSF Launcher projenizi ve masaüstü uygulama projenizi seçin ve ardından Tamam düğmesini seçin.

Masaüstü projesi

Uyarı

Uygulamanızın kaynak kodu yoksa PSF Launcher projesini seçmeniz yeter. Yapılandırma dosyası oluşturduğunuzda yürütülebilir dosyanıza nasıl başvurabileceğinizi göstereceğiz.

Uygulamalar düğümünde PSF Launcher uygulamasına sağ tıklayın ve giriş noktası olarak ayarla'yı seçin.

Giriş noktasını ayarlama

Paketleme projenize adlı config.json bir dosya ekleyin, ardından aşağıdaki json metnini kopyalayıp dosyaya yapıştırın. Paket Eylemi özelliğini İçerik olarak ayarlayın.

{
    "applications": [
        {
            "id": "",
            "executable": "",
            "workingDirectory": ""
        }
    ],
    "processes": [
        {
            "executable": "",
            "fixups": [
                {
                    "dll": "",
                    "config": {
                    }
                }
            ]
        }
    ]
}

Her anahtar için bir değer sağlayın. Bu tabloyu kılavuz olarak kullanın.

Dizi anahtar Değer
uygulamalar kimlik Paket bildirimindeki Id öğesinin özniteliğinin Application değerini kullanın.
uygulamalar Yürütüle -bilir Başlatmak istediğiniz yürütülebilir dosyanın paket göreli yolu. Çoğu durumda, bu değeri değiştirmeden önce paket bildirim dosyanızdan alabilirsiniz. Executable öğesinin Application niteliğinin değeridir.
uygulamalar çalışmaDizini (İsteğe bağlı) Uygulama başlatıldığında çalışma dizini olarak kullanılacak paket göreli yol. Bu değeri ayarlamazsanız, işletim sistemi uygulamanın çalışma dizini olarak dizinini kullanır System32 .
Süreç Yürütüle -bilir Çoğu durumda, bu, yukarıda yapılandırılan ve yol ile dosya uzantısı kaldırılan executable adıdır.
düzeltmeler Dll Yüklenecek düzeltme DLL'sinin paketle ilişkili yolu.
düzeltmeler konfigürasyon (İsteğe bağlı) Düzeltme DLL'sinin nasıl davranacağını denetler. Her düzeltme bu "blobu" istediği gibi yorumlayabildiği için bu değerin tam biçimi düzeltmeye göre değişiklik gösterir.

İşiniz bittiğinde dosyanız config.json şuna benzer olacaktır.

{
  "applications": [
    {
      "id": "DesktopApplication",
      "executable": "DesktopApplication/WinFormsDesktopApplication.exe",
      "workingDirectory": "WinFormsDesktopApplication"
    }
  ],
  "processes": [
    {
      "executable": ".*App.*",
      "fixups": [ { "dll": "RuntimeFix.dll" } ]
    }
  ]
}

Uyarı

applications, processesve fixups anahtarları dizilerdir. Bu, birden fazla uygulama, işlem ve düzeltme DLL'sini belirtmek için config.json dosyasını kullanabileceğiniz anlamına gelir.

Çalışma zamanı düzeltmesinde hata ayıklama

Visual Studio'da hata ayıklayıcıyı başlatmak için F5 tuşuna basın. İlk olarak hedef masaüstü uygulamanızı başlatan PSF Launcher uygulaması başlatılır. Hedef masaüstü uygulamasında hata ayıklamak için, Hata Ayıkla-İşlem Ekle'ye> tıklayıp uygulama işlemini seçerek, masaüstü uygulama işlemine elle bağlanmanız gerekir. Yerel çalışma zamanı düzeltme DLL'sine sahip bir .NET uygulamasının hata ayıklamasına izin vermek için yönetilen ve yerel kod türlerini (karma mod hata ayıklama) seçin.

Bunu ayarladıktan sonra, masaüstü uygulama kodunda ve çalışma zamanı düzeltme projesinde kod satırlarının yanında kesme noktaları ayarlayabilirsiniz. Uygulamanızın kaynak kodu yoksa, çalışma zamanı düzeltme projenizde yalnızca kod satırlarının yanında kesme noktaları ayarlayabilirsiniz.

F5 hata ayıklaması uygulamayı bir .msix/.appx paketinden yüklemek yerine paket düzeni klasör yolundan gevşek dosyalar dağıtarak çalıştırdığından, düzen klasöründe genellikle yüklü paket klasörüyle aynı güvenlik kısıtlamaları yoktur. Sonuç olarak, çalışma zamanı düzeltmesi uygulanmadan önce paket yolu erişim engelleme hatalarını yeniden oluşturmak mümkün olmayabilir.

Bu sorunu gidermek için F5 gevşek dosya dağıtımı yerine .msix / .appx paket dağıtımı kullanın. Bir .msix / .appx paket dosyası oluşturmak için, yukarıda açıklandığı gibi Windows SDK'sından MakeAppx yardımcı programını kullanın. Alternatif olarak, Visual Studio'dan uygulama proje düğümünüze sağ tıklayıp Mağaza -> Uygulama Paketleri Oluştur'u seçin.

Visual Studio ile ilgili bir diğer sorun, hata ayıklayıcı tarafından başlatılan alt işlemlere eklemeye yönelik yerleşik desteğe sahip olmamasıdır. Bu, hedef uygulamanın başlatma yolundaki mantık hatalarını ayıklamayı zorlaştırır ve Visual Studio'nun uygulamaya başlatma sonrasında manuel olarak bağlanması gerekir.

Bu sorunu gidermek için alt süreç bağlantısını destekleyen bir hata ayıklayıcı kullanın. Hedef uygulamaya tam zamanında (JIT) hata ayıklayıcı eklemenin genellikle mümkün olmadığını unutmayın. Bunun nedeni, çoğu JIT tekniğinin ImageFileExecutionOptions kayıt defteri anahtarı aracılığıyla hedef uygulama yerine hata ayıklayıcıyı başlatmayı içermesidir. Bu, PSFLauncher.exe tarafından hedef uygulamaya FixupRuntime.dll eklemek için kullanılan saptırma mekanizmasını yener. Windows için Hata Ayıklama Araçları'na dahil edilen ve Windows SDK'sından alınan WinDbg, alt süreçlere bağlanmayı destekler. Ayrıca artık bir UWP uygulamasının doğrudan başlatılmasını ve hata ayıklamasını da destekliyor.

Hedef uygulama başlatma hatalarını alt işlem olarak ayıklamak için başlatın WinDbg.

windbg.exe -plmPackage PSFSampleWithFixup_1.0.59.0_x86__7s220nvg1hg3m -plmApp PSFSample

WinDbg isteminde, çocuk hata ayıklamayı etkinleştirin ve uygun kesme noktalarını ayarlayın.

.childdbg 1
g

(hedef uygulama başlayana ve hata ayıklayıcıya girene kadar yürütür)

sxe ld fixup.dll
g

(düzeltme DLL'i yüklenene kadar çalıştır)

bp ...

Uyarı

PLMDebug , başlatıldıktan sonra bir uygulamaya hata ayıklayıcı eklemek için de kullanılabilir ve Windows için Hata Ayıklama Araçları'na da eklenir. Ancak, kullanmak artık WinDbg tarafından sağlanan doğrudan destekten daha karmaşıktır.

Destek

Sorularınız mı var? MSIX teknoloji topluluğu sitesindeki Paket Destek Çerçevesi konuşma alanında bize sorun.