Bagikan melalui


Menggunakan Microsoft C Runtime dengan Driver User-Mode dan Aplikasi Desktop

Jika Anda membangun aplikasi atau driver untuk Windows 10, Anda hanya perlu membaca bagian ini. Jika Anda menggunakan versi Visual Studio yang lebih lama dari Visual Studio 2015, lewati bagian ini dan mulailah dengan Mendistribusikan Ulang Runtime C (berlaku untuk sebelum Visual Studio 2015).

Mulai visual Studio 2015, Universal C Runtime (UCRT) mencakup runtime C. Bagian lain yang diperlukan untuk program lengkap (Fitur Bahasa C/C++, Pustaka C++) disediakan oleh Visual Studio di VC++ Redistributable. Untuk menghindari persyaratan redistribusi runtime, potongan-potongan tersebut secara statis ditautkan.

Peringatan

Saat membuat proyek driver mode pengguna di Visual Studio, jika Anda mengatur PlatformToolset ke WindowsUserModeDriver10.0, toolset mengabaikan pustaka runtime yang ditentukan dalam proyek dan sebaliknya menautkan secara statis terhadap VC++ Runtime dan secara dinamis terhadap UCRT. Saat menggunakan toolset ini, perilaku penautan hibrid ini tidak dapat dikonfigurasi ulang.

Jika Anda tidak menggunakan set WindowsUserModeDriver10.0 alat, gunakan prosedur berikut untuk melakukan modifikasi (misalnya sertakan DLL lain):

  1. Atur ke tautan secara statis secara umum: Properti > C/C++ > Code Generation > Runtime Library = Multi-threaded (/MT)
  2. Hapus UCRT yang ditautkan secara statis: Input > Penaut > Properti > Abaikan Pustaka Default Tertentu += libucrt.lib
  3. Tambahkan UCRT yang ditautkan secara dinamis: Properti > Input > Linker > Dependensi Tambahan += ucrt.lib, Input > Linker > Properti > Abaikan Pustaka Default Tertentu += libucrt.lib

Mendistribusikan ulang Runtime C (berlaku untuk sebelum Visual Studio 2015)

Catatan

Semua informasi di bawah titik ini hanya berlaku untuk pra-2015. Sebelum 2015, ada dua versi terpisah dari C Runtime: Visual C++ Runtime (VCRT, misalnya msvcr120.dll) dan Windows CRT warisan (msvcrt.dll).

Visual Studio menginstal versi terbaru VCRT ke System32 direktori. Jika file tidak berada di lokasi ini, Anda dapat menyalinnya langsung ke direktori build proyek Visual C++ Anda.

Jika driver mode pengguna atau aplikasi desktop Anda menggunakan VCRT, Anda harus mendistribusikan pustaka tautan dinamis yang sesuai. Gunakan Paket Visual C++ Redistributable (VCRedist_x86.exe, VCRedist_x64.exe, VCRedist_arm.exe). Rantai paket yang dapat didistribusikan ulang dengan biner lain, dan paket yang dapat didistribusikan ulang akan menerima pembaruan otomatis.

Jika Anda ingin mencapai isolasi atau menghindari dependensi pada VC++ Redistributable, Anda dapat menautkan secara statis ke CRT sebagai gantinya. Meskipun proyek non-driver biasanya dapat menyalin DLL Visual C/C++ tertentu ke folder lokal aplikasi (tempat aplikasi diinstal) untuk menghindari dependensi pada VC++ Redistributable, penyebaran aplikasi-lokal tidak sesuai untuk driver.

Jangan menyalin komponen CRT individual ke System32 alih-alih menggunakan paket yang dapat didistribusikan ulang. Hal ini dapat menyebabkan CRT tidak dilayanan secara otomatis, dan berpotensi ditimpa.

Pertimbangan khusus berikut berlaku untuk driver printer:

  • Driver ini harus menyertakan file CRT yang diperlukan dalam INF, sehingga file CRT disalin ke penyimpanan driver sebagai bagian dari payload driver.
  • Driver cetak V4 tidak dapat menggunakan penginstal bersama untuk penyetelan, sehingga INF harus menyalin biner yang relevan dari pustaka runtime C/C++ ke penyimpanan driver. Untuk melakukan ini, referensikan file yang sesuai di bagian [COPY_FILES] dari paket driver.
  • Driver cetak V3 tidak boleh menggunakan penginstal bersama untuk penyetelan, karena tidak dijalankan selama koneksi Titik dan Cetak. Driver ini harus mereferensikan file yang sesuai di bagian [COPY_FILES] dari paket driver.

Berikut ini adalah contoh cara menyertakan biner CRT di bagian [COPY_FILES] inf:

[COPY_FILES]
;CRT
Msvcr120.dll
; other files

* [SourceDisksFiles]
Msvcr120.dll = 2 
; other files

* [SourceDisksNames.amd64]
1 = %Location%,,,
2 = %Location%,,,"amd64"

Untuk driver UMDF:

  • Tautkan driver Anda secara statis terhadap CRT untuk menyertakan runtime dalam biner. Dalam hal ini, Anda tidak perlu mendistribusikan ulang CRT.

Menautkan kode Anda dengan pustaka C Runtime (berlaku untuk sebelum Visual Studio 2015)

Untuk menentukan DLL mana yang harus Didistribusikan ulang dengan aplikasi Anda, kumpulkan daftar DLL yang bergantung pada aplikasi Anda. Salah satu cara untuk mengumpulkan daftar adalah dengan menjalankan Dependency Walker (depends.exe).

Untuk informasi selengkapnya, lihat Menentukan DLL mana yang akan Didistribusikan Ulang dan Memilih Metode Penyebaran.

Anda tidak dapat mendistribusikan ulang semua file yang disertakan dalam Visual Studio; Anda hanya diizinkan untuk mendistribusikan ulang file yang ditentukan dalam Kode yang Dapat Didistribusikan Ulang untuk Pratinjau Visual Studio 2013 dan Pratinjau SDK Visual Studio 2013. Versi debug aplikasi dan berbagai pustaka tautan dinamis Visual C++ tidak dapat didistribusikan ulang.

Pustaka berikut berisi fungsi pustaka run-time C:

Istilah Deskripsi
Msvcr120.dll Runtime C
Msvcp120.dll Runtime C++
Msvcr120d.dll Versi debug runtime C - tidak ada redistribusi yang diizinkan
Msvcp120d.dll Versi debug runtime C++ - tidak ada redistribusi yang diizinkan