Penginstalan .NET terkelola di Windows

Penginstalan .NET yang dihapus sebagian adalah alasan umum mengapa perangkat lunak pemindaian kerentanan seperti Pengelolaan Kerentanan Microsoft Defender akan melaporkan perangkat. Memahami cara kerja penginstalan .NET dapat membantu administrator menyelidiki laporan dan mengambil tindakan perbaikan.

Pada Windows, komponen .NET seperti runtime dan SDK terdiri dari beberapa MSI. MSI individual tidak didistribusikan secara langsung. Sebaliknya, mereka dirantai bersama-sama untuk membuat bundel.

Memperoleh .NET di Windows

  • Bundel mandiri (EXEs) dapat diunduh dari situs web .NET.
  • WinGet menyediakan paket yang berisi bundel .NET.
  • Pembaruan layanan mendistribusikan bundel melalui pembaruan Microsoft menggunakan pembaruan otomatis, WSUS, dan Katalog Windows Update.
  • Vendor perangkat lunak independen (ISV) dapat mendistribusikan ulang bundel .NET sebagai bagian dari perangkat lunak mereka.
  • OEM terkadang menyertakan salinan bundel .NET yang telah diinstal sebelumnya dalam gambar pabrik perangkat baru.
  • Beberapa Azure gambar marketplace Windows termasuk salinan bundel yang telah diinstal sebelumnya.
  • Manajer paket pihak ketiga seperti Chocolatey juga mendistribusikan bundel .NET.
  • Perusahaan terkadang mengemas ulang bundel menggunakan paket kepemilikan untuk distribusi internal.
  • Beberapa host aplikasi .NET mungkin juga mengarahkan pengguna untuk mengunduh dan menginstal bundel runtime yang hilang.

Visual Studio juga dapat digunakan untuk memperoleh .NET dan menggunakan MSI yang sama dengan bundel mandiri.

Note

Bundel SDK .NET dikirim dengan Visual Studio hingga 16,2. Dimulai dengan .NET Core 3.0 di Visual Studio 16.3, bundel SDK diganti dengan MSI .NET individu.

Upgrades

.NET mendukung peningkatan antara versi patch dalam rilis utama/minor. .NET 8.0.7 akan meningkatkan rilis sebelumnya seperti 8.0.4 atau 8.0.0, termasuk versi prarilis, tetapi tidak akan meningkatkan rilis utama sebelumnya seperti .NET 7.0. SDK .NET mendukung peningkatan antara patch dalam pita fitur. SDK 8.0.100 dapat ditingkatkan ke 8.0.103, tetapi SDK 8.0.3xx tidak akan meningkatkan pita fitur 1xx atau 2xx.

Sebagian besar peningkatan ditangani pada tingkat bundel. Versi sebelumnya hanya dihapus setelah versi baru diinstal. Ada dua pengecualian: host .NET dan MSI Modul ASP.NET Core diperbarui di tempat.

Dimulai dengan .NET 8, pengguna memiliki opsi untuk menuangkan penghapusan versi bundel sebelumnya.

Komposisi bundel dan penghitungan referensi

Bundel terdiri dari beberapa MSI, beberapa di antaranya dibagikan di antara beberapa bundel.

komposisi alat penginstal .NET

  • Bundel runtime berisi tiga MSI yang juga dikirim dalam runtime desktop dan bundel SDK.
  • Bundel desktop menyertakan MSI tambahan yang dibagikan dengan bundel SDK.
  • SDK mencakup MSI tambahan yang berisi CLI, templat, dan paket penargetan yang digunakan untuk membuat dan membangun aplikasi .NET.

MSI bersama dikelola menggunakan penghitungan referensi. Setiap .NET MSI membuat kunci registri yang disebut kunci penyedia yang memungkinkan bundel mendaftarkan dirinya sebagai dependen. Jika MSI sudah diinstal, bundel hanya memperbarui informasi pendaftaran. Bundel tidak terdaftar saat dihapus. MSI bersama hanya dihapus setelah tidak ada dependen terdaftar.

Informasi registri di bawah ini adalah contoh kunci penyedia MSI host .NET. Ada empat dependen terdaftar, termasuk Visual Studio.

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Dependencies\Dotnet_CLI_SharedHost_10.0_x64
    (Default)   REG_SZ    {8A8CC49F-7D1E-45DC-B7B5-35FF61A2C25E}
    Version     REG_SZ    80.40.55332
    DisplayName REG_SZ    Microsoft .NET Host - 10.0.10 (x64)

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Dependencies\Dotnet_CLI_SharedHost_10.0_x64\Dependents\VS.{AEF703B8-D2CC-4343-915C-F54A30B90937}

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Dependencies\Dotnet_CLI_SharedHost_10.0_x64\Dependents\{609A456D-467D-4077-9BA2-B6404F1B1163}

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Dependencies\Dotnet_CLI_SharedHost_10.0_x64\Dependents\{866BECDA-F284-473A-9E84-0CCE816BF06F}

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Dependencies\Dotnet_CLI_SharedHost_10.0_x64\Dependents\{FD5EA214-C690-466F-B8FB-1741881913F9}

Note

MSI individual menjadi yatim piatu ketika dependen tetap terdaftar setelah bundel dihapus, misalnya, ketika penghapusan instalasi terganggu.

Note

Visual Studio menggunakan nilai terkenal, VS.{AEF703B8-D2CC-4343-915C-F54A30B90937}, untuk mendaftarkan dirinya sebagai dependen. Jumlah referensi aktual ditentukan dengan memeriksa manifes penginstalan untuk setiap instans Visual Studio.

Penginstalan bin yang disebarkan

Penginstalan bin yang disebarkan mengacu pada salinan .NET yang tidak terkait dengan MSI. Ini dapat dicapai dengan menjalankan skrip penginstalan sebagai administrator dan mengatur direktori penginstalan ke 'Program Files\dotnet'. Penginstalan bin yang disebarkan dapat mempersulit remediasi. Pemindai akan melaporkan kerentanan, tetapi administrator tidak akan menemukan MSI untuk dicopot pemasangannya. DNIM dapat mendeteksi penginstalan bin yang disebarkan.

Deteksi

DNIM bergantung pada sejumlah heuristik untuk mengidentifikasi bundel dan MSI yang terkait dengan .NET. Mendeteksi penginstalan secara akurat sangat penting untuk berhasil memulihkan perangkat yang tidak mengeluh.

Bundles

Bundel diidentifikasi menggunakan nama tampilan dan informasi file yang disimpan dalam registri. Pemeriksaan tambahan dilakukan pada executable untuk memastikan mereka adalah penginstal yang valid. Informatio ini juga dibandingkan dengan data JSON .NET penerbitan untuk setiap rilis.

Deteksi MSI

DNIM melakukan pencarian lengkap terhadap data komponen penginstal yang disimpan di registery di bawah HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components untuk mengidentifikasi MSI .NET.

Setiap subkunjuk mewakili ID komponen yang berbeda. Nilai di bawah setiap kunci mewakili kode produk. ID komponen dan kode produk disimpan sebagai GUID yang dikemas. Contoh di bawah ini adalah komponen yang terkait dengan dotnet.exe.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\BBB993545ADD68342A9E16F83B5CA481
    40A3E8A8CB38EDC4299598B366C6A11B    REG_SZ    C:\Program Files\dotnet\dotnet.exe
    A75437C333A10ED46B2CF6AB78E7F1FC    REG_SZ    C:\Program Files (x86)\dotnet\dotnet.exe
    79D2396D1F638B04C9CDAC38562B0100    REG_SZ    C:\Program Files\dotnet\dotnet.exe
    EA6D9CBF69367CF4CB81005882631FD6    REG_SZ    C:\Program Files (x86)\dotnet\dotnet.exe
    872D9C61B8AA60F47A4CDF137C8523A3    REG_SZ    C:\Program Files (x86)\dotnet\dotnet.exe
    6235DF10DB18AED4F910D396BBDD7AE5    REG_SZ    C:\Program Files\dotnet\dotnet.exe
    0370151E43A53FE48B564853D1B81FAB    REG_SZ    C:\Program Files\dotnet\dotnet.exe
    F6D22817F79056B46B45655C7495EE9A    REG_SZ    C:\Program Files (x86)\dotnet\dotnet.exe
    D512842CB6C6A404BAE605D564042E50    REG_SZ    C:\Program Files\dotnet\dotnet.exe

Bin penginstalan yang disebarkan

Karena DNIM melakukan pencarian lengkap komponen alat penginstal, file Program Files\dotnet apa pun yang tidak terkait dengan MSI diklasifikasikan sebagai penginstalan yang disebarkan bin.

Classification

Klasifikasi penginstalan yang salah dapat mengakibatkan penghapusan atau pertahankan penginstalan yang salah, aplikasi yang berpotensi melanggar atau meninggalkan perangkat dalam status tidak patuh.

Setelah produk (misalnya, NET 10) diidentifikasi, informasi tambahan seperti rilisnya (misalnya, 10.0.4) dan fase dukungan (misalnya, aktif) dapat ditentukan. Ini memungkinkan administrator untuk membuat penyebaran yang fleksibel.

Penginstalan selanjutnya diklasifikasikan sesuai dengan komponen .NET mereka (ASP.NET Core, SDK, dll.), arsitektur, dan jenis instalasi (bundel, MSI, atau bin yang disebarkan).

Ada beberapa kasus khusus yang perlu disebutkan.

.NET Standar 2.1

Memastikan perilaku yang konsisten memerlukan penginstalan untuk menentukan fase produk, rilis, dan dukungan mereka. Paket penargetan untuk .NET Standard 2.1 menghadirkan tantangan yang menarik. Ini tidak berisi kode yang dapat dieksekusi dan hanya menyediakan rakitan referensi untuk API yang ditentukan oleh standar. Paket penargetan pertama kali dikirim sebagai bagian dari .NET Core 3.0.100 SDK, tetapi disertakan dalam setiap SDK berikutnya hingga .NET 10. Meskipun DNIM akan mengklasifikasikan rilis dan produk di bawah .NET Core 3.0, fase dukungan selalu dilaporkan aktif karena mungkin disertakan dalam SDK yang berada dalam dukungan aktif.

Note

Paket penargetan .NET Standard 2.1 dihapus dari penginstalan SDK di .NET 10. SDK secara otomatis mengunduh paket penargetan yang hilang menggunakan paket NuGet saat membangun aplikasi.

.NET band fitur SDK

Dalam .NET Core 1.0 dan 1.1, SDK menggunakan skema penerapan versi yang mirip dengan runime. SDK terakhir di .NET Core 1.1 versi 1.1.14 dan menyertakan runtime 1.1.13.

Band fitur SDK diperkenalkan dalam 2.1.100 SDK untuk membedakan antara fitur yang didukung di Visual Studio. SDK dikirim sebagai bagian dari rilis .NET Core 2.0.5. 2.0 SDK terakhir di-versi sebagai 2.1.202 dan disertakan dalam rilis 2.0.9. SDK pertama yang dikirim di .NET Core 2.1 versinya adalah 2.1.300. Dalam rilis selanjutnya, band fitur SDK selalu dimulai pada 100, misalnya, 2.2.100, 3.0.100, dll.