Bersiap untuk mengemas aplikasi desktop

Artikel ini mencantumkan hal-hal yang perlu Anda ketahui sebelum mengemas aplikasi desktop Anda. Anda mungkin tidak perlu melakukan banyak hal untuk menyiapkan aplikasi Anda untuk proses pengemasan, tetapi jika salah satu item di bawah ini berlaku untuk aplikasi Anda, Anda perlu mengatasinya sebelum pengemasan.

  • Aplikasi .NET Anda memerlukan versi .NET Framework yang lebih lama dari 4.6.2. Jika Anda mengemas aplikasi .NET, sebaiknya target aplikasi Anda .NET Framework 4.6.2 atau yang lebih baru. Kemampuan untuk menginstal dan menjalankan aplikasi desktop paket pertama kali diperkenalkan di Windows 10, versi 1607 (juga disebut Anniversary Update), dan versi OS ini mencakup .NET Framework 4.6.2 secara default. Versi OS yang lebih baru mencakup versi .NET Framework yang lebih baru. Untuk daftar lengkap versi .NET apa yang disertakan dalam versi Windows 10 yang lebih baru, lihat artikel ini.

    Menargetkan versi .NET Framework yang lebih lama dari 4.6.2 dalam aplikasi desktop paket diharapkan berfungsi dalam banyak kasus. Namun, jika Anda menargetkan versi yang lebih lama dari 4.6.2, Anda harus sepenuhnya menguji aplikasi desktop paket Anda sebelum mendistribusikannya kepada pengguna.

    • 4.0 - 4.6.1: Aplikasi yang menargetkan versi .NET Framework ini diharapkan berjalan tanpa masalah pada 4.6.2 atau yang lebih baru. Oleh karena itu, aplikasi ini harus menginstal dan menjalankan tanpa perubahan pada Windows 10, versi 1607 atau yang lebih baru dengan versi .NET Framework yang disertakan dengan OS.

    • 2.0 dan 3.5: Dalam pengujian kami, aplikasi desktop kemasan yang menargetkan versi .NET Framework ini umumnya berfungsi tetapi dapat menunjukkan masalah performa dalam beberapa skenario. Agar aplikasi paket ini dapat diinstal dan dijalankan, fitur .NET Framework 3.5 harus diinstal pada mesin target (fitur ini juga mencakup .NET Framework 2.0 dan 3.0). Anda juga harus menguji aplikasi ini secara menyeluruh setelah Mengemasnya.

  • Aplikasi Anda selalu berjalan dengan hak istimewa keamanan yang ditingkatkan. Aplikasi Anda harus berfungsi saat berjalan sebagai pengguna interaktif. Pengguna yang menginstal aplikasi Anda mungkin bukan administrator sistem, jadi mengharuskan aplikasi Anda untuk menjalankan peningkatan berarti tidak akan berjalan dengan benar untuk pengguna standar. Jika Anda berencana menerbitkan aplikasi ke Microsoft Store, aplikasi yang memerlukan elevasi untuk bagian mana pun dari fungsionalitasnya tidak akan diterima di Store.

  • Aplikasi Anda memerlukan driver mode kernel atau layanan Windows. MSIX tidak mendukung driver mode kernel atau layanan Windows yang perlu dijalankan di bawah akun sistem. Alih-alih layanan Windows, gunakan tugas latar belakang.

  • Modul aplikasi Anda dimuat dalam proses ke proses yang tidak ada dalam paket aplikasi Windows Anda. Ini tidak diizinkan, yang berarti bahwa ekstensi dalam proses, seperti ekstensi shell, tidak didukung. Tetapi jika Anda memiliki dua aplikasi dalam paket yang sama, Anda dapat melakukan komunikasi antarproses di antaranya.

  • Pastikan bahwa ekstensi apa pun yang diinstal oleh aplikasi akan menginstal tempat aplikasi diinstal. Windows memungkinkan pengguna dan manajer TI untuk mengubah lokasi penginstalan default untuk paket. Lihat "Pengaturan-System-Storage-More>>> Storage Pengaturan-> Ubah tempat konten baru disimpan ke -> Aplikasi Baru akan disimpan". Jika Anda menginstal ekstensi dengan aplikasi Anda, pastikan ekstensi tidak memiliki batasan folder penginstalan tambahan. Misalnya, beberapa ekstensi dapat menonaktifkan penginstalan ekstensinya ke drive non-sistem. Ini akan mengakibatkan kesalahan 0x80073D01 (ERROR_DEPLOYMENT_BLOCKED_BY_POLICY) jika lokasi default telah diubah.

  • Aplikasi Anda menggunakan ID Model Pengguna Aplikasi (AUMID) kustom. Jika proses Anda memanggil SetCurrentProcessExplicitAppUserModelID untuk mengatur AUMID sendiri, proses tersebut hanya dapat menggunakan AUMID yang dihasilkan oleh lingkungan model aplikasi/paket aplikasi Windows. Anda tidak dapat menentukan AUMID kustom.

  • Aplikasi Anda memodifikasi sarang registri HKEY_LOCAL_MACHINE (HKLM). Setiap upaya aplikasi Anda untuk membuat kunci HKLM, atau membukanya untuk modifikasi, akan mengakibatkan kegagalan akses ditolak. Ingatlah bahwa aplikasi Anda memiliki tampilan registri virtual pribadinya sendiri, sehingga gagasan tentang sarang registri pengguna dan seluruh komputer (yang tidak berlaku HKLM). Anda harus menemukan cara lain untuk mencapai apa yang Anda gunakan HKLM, seperti menulis ke HKEY_CURRENT_USER (HKCU) sebagai gantinya.

  • Aplikasi Anda menggunakan subkey registri ddeexec sebagai sarana untuk meluncurkan aplikasi lain. Sebagai gantinya, gunakan salah satu penangan kata kerja DelegateExecute seperti yang dikonfigurasi oleh berbagai ekstensi Activatable* dalam manifes paket aplikasi Anda.

  • Aplikasi Anda menulis ke folder AppData atau ke registri dengan tujuan berbagi data dengan aplikasi lain. Setelah konversi, AppData dialihkan ke penyimpanan data aplikasi lokal, yang merupakan penyimpanan privat untuk setiap aplikasi.

    Semua entri yang ditulis aplikasi Anda ke sarang registri HKEY_LOCAL_MACHINE dialihkan ke file biner terisolasi dan entri apa pun yang ditulis aplikasi Anda ke sarang registri HKEY_CURRENT_USER ditempatkan ke lokasi pribadi per pengguna per aplikasi. Untuk detail selengkapnya tentang pengalihan file dan registri, lihat Di balik layar Jembatan Desktop.

    Gunakan cara berbagi data antar-proses yang berbeda. Untuk informasi selengkapnya, lihat Menyimpan dan mengambil pengaturan dan data aplikasi lainnya.

  • Aplikasi Anda menulis ke direktori penginstalan untuk aplikasi Anda. Misalnya, aplikasi Anda menulis ke file log yang Anda masukkan ke direktori yang sama dengan exe Anda. Ini tidak didukung, jadi Anda harus menemukan lokasi lain, seperti penyimpanan data aplikasi lokal.

  • Aplikasi Anda menggunakan direktori kerja saat ini. Saat runtime, aplikasi desktop paket Anda tidak akan mendapatkan direktori kerja yang sama dengan yang sebelumnya Anda tentukan di desktop Anda. Pintasan LNK. Anda perlu mengubah CWD Anda pada runtime jika memiliki direktori yang benar penting bagi aplikasi Anda untuk berfungsi dengan benar.

    Catatan

    Jika aplikasi Anda perlu menulis ke direktori penginstalan atau menggunakan direktori kerja saat ini, Anda juga dapat mempertimbangkan untuk menambahkan perbaikan runtime menggunakan Kerangka Kerja Dukungan Paket ke paket Anda. Untuk detail selengkapnya, lihat artikel ini.

  • Penginstalan aplikasi Anda memerlukan interaksi pengguna. Alat penginstal aplikasi Anda harus dapat berjalan secara diam-diam, dan harus menginstal semua prasyaratnya yang tidak aktif secara default pada gambar OS yang bersih.

  • Aplikasi Anda mengekspos objek COM. Proses dan ekstensi dari dalam paket dapat mendaftar dan menggunakan server COM & OLE, baik dalam proses maupun di luar proses (OOP). Pembaruan Kreator menambahkan dukungan COM Paket yang menyediakan kemampuan untuk mendaftarkan server OOP COM & OLE yang sekarang terlihat di luar paket. Lihat Dukungan Server COM dan Dokumen OLE untuk Jembatan Desktop.

    Dukungan COM yang dipaketkan berfungsi dengan API COM yang ada, tetapi tidak akan berfungsi untuk ekstensi aplikasi yang mengandalkan pembacaan registri secara langsung, karena lokasi untuk COM Paket berada di lokasi privat.

  • Aplikasi Anda mengekspos rakitan GAC untuk digunakan oleh proses lain. Aplikasi Anda tidak dapat mengekspos rakitan GAC untuk digunakan oleh proses yang berasal dari executable eksternal ke paket aplikasi Windows Anda. Proses dari dalam paket dapat mendaftar dan menggunakan rakitan GAC seperti biasa, tetapi tidak akan terlihat secara eksternal. Ini berarti skenario interop seperti OLE tidak akan berfungsi jika dipanggil oleh proses eksternal.

  • Aplikasi Anda menautkan pustaka runtime C (CRT) dengan cara yang tidak didukung. Pustaka runtime Microsoft C/C++ menyediakan rutinitas untuk pemrograman untuk sistem operasi Microsoft Windows. Rutinitas ini mengotomatiskan banyak tugas pemrograman umum yang tidak disediakan oleh bahasa C dan C++. Jika aplikasi Anda menggunakan pustaka runtime C/C++, Anda perlu memastikannya ditautkan dengan cara yang didukung.

    Visual Studio 2017 mendukung penautan statis dan dinamis, untuk memungkinkan kode Anda menggunakan file DLL umum, atau penautan statis, untuk menautkan pustaka langsung ke kode Anda, ke versi CRT saat ini. Jika memungkinkan, kami sarankan aplikasi Anda menggunakan penautan dinamis dengan VS 2017.

    Dukungan dalam versi Visual Studio sebelumnya bervariasi. Untuk detailnya, lihat tabel berikut:

    versi Visual StudioPenautan dinamisPenautan statis
    2005 (VC 8)Tidak didukungDidukung
    2008 (VC 9)Tidak didukungDidukung
    2010 (VC 10)DidukungDidukung
    2012 (VC 11)DidukungTidak didukung
    2013 (VC 12)DidukungTidak didukung
    2015 dan 2017 (VC 14)DidukungDidukung

    Catatan: Dalam semua kasus, Anda harus menautkan ke CRT terbaru yang tersedia untuk umum.

  • Aplikasi Anda menginstal dan memuat rakitan dari folder Windows berdampingan. Misalnya, aplikasi Anda menggunakan pustaka runtime C VC8 atau VC9 dan secara dinamis menautkannya dari folder berdampingan Windows, yang berarti kode Anda menggunakan file DLL umum dari folder bersama. Ini tidak didukung. Anda harus menautkannya secara statis dengan menautkan ke file pustaka yang dapat didistribusikan ulang langsung ke dalam kode Anda.

  • Aplikasi Anda menggunakan dependensi di folder System32/SysWOW64. Agar DLL ini berfungsi, Anda harus menyertakannya dalam bagian sistem file virtual dari paket aplikasi Windows Anda. Ini memastikan bahwa aplikasi berakibat seolah-olah DLL diinstal di folder System32/SysWOW64 . Di akar paket, buat folder bernama VFS. Di dalam folder tersebut, buat folder SystemX64 dan SystemX86 . Kemudian, letakkan versi 32-bit DLL Anda di folder SystemX86 , dan letakkan versi 64-bit di folder SystemX64 .

  • Aplikasi Anda menggunakan paket kerangka kerja VCLibs. Jika Anda mengonversi aplikasi C++ Win32, Anda harus menangani penyebaran Visual C++ Runtime. Visual Studio 2019 dan SDK Windows menyertakan paket kerangka kerja terbaru untuk Versi 11.0, 12.0 dan 14.0 dari Runtime Visual C++ di folder berikut:

    • Paket kerangka kerja VC 14.0: C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop\14.0

    • Paket kerangka kerja VC 12.0: C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.120\14.0

    • Paket kerangka kerja VC 11.0: C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop.110\14.0

    Untuk menggunakan salah satu paket ini, Anda harus mereferensikan paket sebagai dependensi dalam manifes paket Anda. Saat pelanggan menginstal versi ritel aplikasi Anda dari Microsoft Store, paket akan diinstal dari Store bersama dengan aplikasi Anda. Dependensi tidak akan diinstal jika Anda memuat aplikasi dari sisi samping. Untuk menginstal dependensi secara manual, Anda harus menginstal paket kerangka kerja yang sesuai menggunakan paket .appx yang sesuai untuk x86, x64, atau ARM yang terletak di folder penginstalan yang tercantum di atas.

    Untuk mereferensikan paket kerangka kerja Visual C++ Runtime di aplikasi Anda:

    1. Buka folder penginstalan paket kerangka kerja yang tercantum di atas untuk versi Visual C++ Runtime yang digunakan oleh aplikasi Anda.

    2. Buka file SDKManifest.xml di folder tersebutFrameworkIdentity-Debug, temukan atribut atau FrameworkIdentity-Retail (tergantung pada apakah Anda menggunakan versi debug atau ritel runtime), dan salin nilai dan MinVersion dari atribut tersebutName. Misalnya, berikut adalah FrameworkIdentity-Retail atribut untuk paket kerangka kerja VC 14.0 saat ini.

      FrameworkIdentity-Retail = "Name = Microsoft.VCLibs.140.00.UWPDesktop, MinVersion = 14.0.27323.0, Publisher = 'CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US'"
      
    3. Dalam manifes paket untuk aplikasi Anda, tambahkan elemen berikut <PackageDependency> di bawah simpul <Dependencies> . Pastikan Anda mengganti Name nilai dan MinVersion dengan nilai yang Anda salin di langkah sebelumnya. Contoh berikut menentukan dependensi untuk versi paket kerangka kerja VC 14.0 saat ini.

      <PackageDependency Name="Microsoft.VCLibs.140.00.UWPDesktop" MinVersion="14.0.27323.0" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" />
      
  • Aplikasi Anda berisi daftar lompat kustom. Ada beberapa masalah dan peringatan yang harus diperhatikan saat menggunakan jump list.

    • Arsitektur aplikasi Anda tidak cocok dengan OS. Daftar lompat saat ini tidak berfungsi dengan benar jika arsitektur aplikasi dan OS tidak cocok (misalnya, aplikasi x86 yang berjalan pada Windows x64). Saat ini, tidak ada solusi selain mengolah ulang aplikasi Anda ke arsitektur yang cocok.

    • Aplikasi Anda membuat entri jump list dan memanggil ICustomDestinationList::SetAppID atau SetCurrentProcessExplicitAppUserModelID. Jangan atur AppID Anda secara terprogram dalam kode. Melakukannya akan menyebabkan entri jump list Anda tidak muncul. Jika aplikasi Anda memerlukan Id kustom, tentukan menggunakan file manifes. Lihat Mengemas aplikasi desktop secara manual untuk mendapatkan petunjuk. AppID untuk aplikasi Anda ditentukan di bagian YOUR_PRAID_HERE .

    • Aplikasi Anda menambahkan tautan shell jump list yang mereferensikan executable dalam paket Anda. Anda tidak dapat langsung meluncurkan executable dalam paket Anda dari jump list (dengan pengecualian jalur absolut .exe aplikasi sendiri). Sebagai gantinya, daftarkan alias eksekusi aplikasi (yang memungkinkan aplikasi desktop paket Anda untuk memulai melalui kata kunci seolah-olah berada di PATH) dan atur jalur target tautan ke alias sebagai gantinya. Untuk detail tentang cara menggunakan ekstensi appExecutionAlias, lihat Mengintegrasikan aplikasi desktop Anda dengan Windows 10. Perhatikan bahwa jika Anda memerlukan aset tautan dalam daftar lompat agar sesuai dengan .exe asli, Anda harus mengatur aset seperti ikon menggunakan SetIconLocation dan nama tampilan dengan PKEY_Title seperti yang Anda lakukan untuk entri kustom lainnya.

    • Aplikasi Anda menambahkan entri jump list yang mereferensikan aset dalam paket aplikasi dengan jalur absolut. Jalur penginstalan aplikasi dapat berubah ketika paketnya diperbarui, mengubah lokasi aset (seperti ikon, dokumen, dapat dieksekusi, dan sebagainya). Jika entri jump list mereferensikan aset berdasarkan jalur absolut, maka aplikasi harus menyegarkan daftar lompatnya secara berkala (seperti pada peluncuran aplikasi) untuk memastikan jalur diselesaikan dengan benar. Atau, gunakan Windows UWP. UI. Api StartScreen.JumpList sebagai gantinya, yang memungkinkan Anda mereferensikan string dan aset gambar menggunakan skema URI ms-resource relatif paket (yang juga bahasa, DPI, dan sadar kontras tinggi).

  • Aplikasi Anda memulai utilitas untuk melakukan tugas. Hindari memulai utilitas perintah seperti PowerShell dan Cmd.exe. Bahkan, jika pengguna menginstal aplikasi Anda ke sistem yang menjalankan Windows 10 S, aplikasi Anda tidak akan dapat memulainya sama sekali. Ini dapat memblokir aplikasi Anda dari pengiriman ke Microsoft Store karena semua aplikasi yang dikirimkan ke Microsoft Store harus kompatibel dengan Windows 10 S.

    Memulai utilitas sering kali dapat memberikan cara mudah untuk mendapatkan informasi dari sistem operasi, mengakses registri, atau mengakses kemampuan sistem. Namun, Anda dapat menggunakan API UWP untuk menyelesaikan tugas semacam ini sebagai gantinya. API tersebut lebih berkinerja karena tidak memerlukan executable terpisah untuk dijalankan, tetapi yang lebih penting, mereka menjaga aplikasi agar tidak menjangkau di luar paket. Desain aplikasi tetap konsisten dengan isolasi, kepercayaan, dan keamanan yang dilengkapi dengan aplikasi yang telah Anda kemas, dan aplikasi Anda akan berperilaku seperti yang diharapkan pada sistem yang berjalan Windows 10 S.

  • Aplikasi Anda menghosting add-in, plug-in, atau ekstensi. Dalam banyak kasus, ekstensi gaya COM kemungkinan akan terus berfungsi selama ekstensi belum dipaketkan, dan diinstal sebagai kepercayaan penuh. Itu karena alat penginstal tersebut dapat menggunakan kemampuan kepercayaan penuh mereka untuk memodifikasi registri dan menempatkan file ekstensi di mana pun aplikasi host Anda mengharapkan untuk menemukannya.

    Namun, jika ekstensi tersebut dipaketkan, dan kemudian diinstal sebagai paket aplikasi Windows, ekstensi tersebut tidak akan berfungsi karena setiap paket (aplikasi host dan ekstensi) akan diisolasi satu sama lain. Untuk membaca selengkapnya tentang bagaimana aplikasi diisolasi dari sistem, lihat Di balik layar Desktop Bridge.

    Semua aplikasi dan ekstensi yang diinstal pengguna ke sistem yang berjalan Windows 10 S harus diinstal sebagai paket aplikasi Windows. Jadi, jika Anda berniat untuk mengemas ekstensi Anda, atau Anda berencana untuk mendorong kontributor Anda untuk mengemasnya, pertimbangkan bagaimana Anda dapat memfasilitasi komunikasi antara paket aplikasi host dan paket ekstensi apa pun. Salah satu cara Anda mungkin dapat melakukan ini adalah dengan menggunakan layanan aplikasi.

  • Aplikasi Anda menghasilkan kode. Aplikasi Anda dapat menghasilkan kode yang digunakan dalam memori, tetapi menghindari penulisan kode yang dihasilkan ke disk karena proses sertifikasi aplikasi Windows tidak dapat memvalidasi kode tersebut sebelum pengiriman aplikasi. Selain itu, aplikasi yang menulis kode ke disk tidak akan berjalan dengan benar pada sistem yang menjalankan Windows 10 S. Ini dapat memblokir aplikasi Anda dari pengiriman ke Microsoft Store karena semua aplikasi yang dikirimkan ke Microsoft Store harus kompatibel dengan Windows 10 S.

Penting

Setelah membuat paket aplikasi Windows, uji aplikasi Anda untuk memastikan bahwa aplikasi berfungsi dengan benar pada sistem yang berjalan Windows 10 S. Semua aplikasi yang dikirimkan ke Microsoft Store harus kompatibel dengan Windows 10 S. Aplikasi yang tidak kompatibel tidak akan diterima di penyimpanan. Lihat Menguji aplikasi Windows Anda untuk Windows 10 S.