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, kami sarankan aplikasi Anda menargetkan .NET Framework 4.6.2 atau yang lebih baru. Kemampuan untuk menginstal dan menjalankan aplikasi desktop kemasan pertama kali diperkenalkan di Windows 10, versi 1607 (juga disebut Pembaruan Hari Jadi), 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 awal 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 komputer 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 perlu berfungsi saat berjalan sebagai pengguna interaktif. Pengguna yang menginstal aplikasi Anda mungkin bukan administrator sistem, jadi mengharuskan aplikasi Anda untuk menjalankan peningkatan berarti aplikasi tersebut 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 ke Bursa.
Aplikasi Anda memerlukan driver Windows. MSIX tidak mendukung driver Windows.
Aplikasi Anda memerlukan layanan Windows pengguna. MSIX tidak mendukung layanan Windows per pengguna. MSIX mendukung layanan sesi-0 (per mesin) yang berjalan di bawah salah satu akun sistem yang ditentukan (LocalSystem, LocalService, atau NetworkService). Alih-alih layanan Windows pengguna, 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 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, pastikan ekstensi tidak memiliki batasan folder penginstalan tambahan. Misalnya, beberapa ekstensi dapat menonaktifkan penginstalan ekstensi mereka 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 kustom (AUMID). Jika proses Anda memanggil SetCurrentProcessExplicitAppUserModelID untuk mengatur AUMID sendiri, maka 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 yang ditolak. Ingatlah bahwa aplikasi Anda memiliki tampilan registri virtual privatnya sendiri, sehingga gagasan sarang registri pengguna dan seluruh mesin (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 subkuntah registri ddeexec sebagai sarana untuk meluncurkan aplikasi lain. Sebagai gantinya, gunakan salah satu handler 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 niat 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 Desktop Bridge.
Gunakan cara berbagi data antarproses 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 Paket Kerangka Kerja Dukungan ke paket Anda. Untuk detail selengkapnya, lihat artikel ini.
Penginstalan aplikasi Anda memerlukan interaksi pengguna. 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 Pembuat menambahkan dukungan COM Paket yang menyediakan kemampuan untuk mendaftarkan server OOP COM & OLE yang sekarang terlihat di luar paket. Lihat Dukungan Com Server dan Dokumen OLE untuk Jembatan Desktop.
Dukungan COM paket 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, sebaiknya aplikasi Anda menggunakan penautan dinamis dengan VS 2017.
Dukungan di versi Visual Studio sebelumnya bervariasi. Untuk detailnya, lihat tabel berikut:
Versi Visual Studio Penautan dinamis Penautan statis 2005 (VC 8) Tidak didukung Didukung 2008 (VC 9) Tidak didukung Didukung 2010 (VC 10) Didukung Didukung 2012 (VC 11) Didukung Tidak didukung 2013 (VC 12) Didukung Tidak didukung 2015 dan 2017 (VC 14) Didukung Didukung Catatan: Dalam semua kasus, Anda harus menautkan ke CRT terbaru yang tersedia untuk umum.
Aplikasi Anda menginstal dan memuat rakitan dari folder berdampingan Windows. 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 paket aplikasi Windows Anda. Ini memastikan bahwa aplikasi berulah 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, tempatkan versi 32-bit DLL Anda di folder SystemX86 , dan tempatkan 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 Windows SDK menyertakan paket kerangka kerja terbaru untuk versi 11.0, 12.0 dan 14.0 dari Visual C++ Runtime 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 secara 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 Runtime Visual C++ di aplikasi Anda:
Buka folder penginstalan paket kerangka kerja yang tercantum di atas untuk versi Runtime Visual C++ yang digunakan oleh aplikasi Anda.
Buka file SDKManifest.xml di folder tersebut
FrameworkIdentity-Debug
, temukan atribut atauFrameworkIdentity-Retail
(tergantung pada apakah Anda menggunakan versi debug atau ritel runtime), dan salin nilai danMinVersion
dari atribut tersebutName
. Misalnya, berikutFrameworkIdentity-Retail
adalah 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'"
Dalam manifes paket untuk aplikasi Anda, tambahkan elemen berikut
<PackageDependency>
di bawah simpul<Dependencies>
. Pastikan Anda menggantiName
nilai danMinVersion
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 lompatan 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 x64 Windows). Saat ini, tidak ada solusi selain mengkombinasikan 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 dari .exe aplikasi sendiri). Sebagai gantinya, daftarkan alias eksekusi aplikasi (yang memungkinkan aplikasi desktop paket Anda untuk memulai melalui kata kunci seolah-olah ada 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 jump list 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 berdasarkan 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 UWP Windows.UI.StartScreen.JumpList API sebagai gantinya, yang memungkinkan Anda untuk mereferensikan string dan aset gambar menggunakan skema URI ms-resource paket relatif (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 seringkali 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 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 menjalankan 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 menjalankan 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 yang mungkin dapat Anda lakukan 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 Anda membuat paket aplikasi Windows, uji aplikasi Anda untuk memastikan bahwa aplikasi berfungsi dengan benar pada sistem yang menjalankan Windows 10 S. Semua aplikasi yang dikirimkan ke Microsoft Store harus kompatibel dengan Windows 10 S. Aplikasi yang tidak kompatibel tidak akan diterima di toko. Lihat Menguji aplikasi Windows Anda untuk Windows 10 S.