搭配User-Mode驅動程式和傳統型應用程式使用 Microsoft C 執行時間

如果您要建置Windows 10的應用程式或驅動程式,則只需要閱讀本節。 如果您使用 Visual Studio 2015 之前的 Visual Studio 版本,請略過本節,然後從 Visual Studio 2015) 之前套用的重新發佈 C 執行時間 (開始

從 Visual Studio 2015 開始,通用 C 執行時間 (UCRT) 包含 C 執行時間。 Visual Studio 會在 VC++ 可轉散發套件中提供完整的程式 (C/C++ 語言功能、C++ 程式庫) 所需的其他部分。 為了避免執行時間轉散發需求,這些片段會以靜態方式連結。

警告

在 Visual Studio 中建置使用者模式驅動程式專案時,如果您將 PlatformToolset 設定為 WindowsUserModeDriver10.0 ,工具組會忽略專案中指定的任何執行時間程式庫,而是以靜態方式連結至 VC++ 執行時間,並動態連結至 UCRT。 使用此工具組時,無法重新設定此混合式連結行為。

如果您未使用 WindowsUserModeDriver10.0 工具組,請使用下列程式來修改 (例如包含另一個 DLL) :

  1. 設定為以靜態方式連結: 屬性 > C/C++ > 程式碼產生 > 執行時間程式庫 = 多執行緒 (/MT)
  2. 移除靜態連結的 UCRT: 屬性 > 連結器 > 輸入 > 忽略特定的預設程式庫 += libucrt.lib
  3. 新增動態連結的 UCRT: 屬性 > 連結器 > 輸入 > 其他相依性 += ucrt.lib屬性 > 連結器 > 輸入 > 忽略特定的預設程式庫 += libucrt.lib

在 Visual Studio 2015) 之前,轉散發 C 執行時間 (適用于

注意

此點下方的所有資訊僅適用于 2015 年之前。 在 2015 年之前,C 執行時間有兩個不同的版本:Visual C++ Runtime (VCRT,例如 msvcr120.dll) 和舊版 Windows CRT (msvcrt.dll) 。

Visual Studio 會將最新版的 VCRT 安裝到 System32 目錄中。 如果檔案不在這個位置,您可以將它直接複製到 Visual C++ 專案的組建目錄中。

如果您的使用者模式驅動程式或桌面應用程式使用 VCRT,您必須散發適當的動態連結程式庫。 使用 C++ 可轉散發套件 Package (VCRedist_x86.exeVCRedist_x64.exe) VCRedist_arm.exe 。 將 中的可轉散發套件與其他二進位檔鏈結,且可轉散發套件將會收到自動更新。

如果您想要達到隔離或避免對 VC++ 可轉散發套件的相依性,您可以改為以靜態方式連結至 CRT。 雖然非驅動程式專案通常能夠將特定的 Visual C/C++ DLL 複製到 應用程式本機資料夾 , (其中安裝應用程式) 以避免相依于 VC++ 可轉散發套件,但應用程式本機部署不適用於驅動程式。

請勿將個別 CRT 元件 System32 複製到 ,而不是使用可轉散發套件。 這可能會導致 CRT 不會自動服務,而且可能會遭到覆寫。

印表機驅動程式適用下列特殊考慮:

  • 這些驅動程式應該在 INF 中包含必要的 CRT 檔案,因此 CRT 檔案會複製到驅動程式存放區作為驅動程式承載的一部分。
  • V4 列印驅動程式無法使用共同安裝程式進行設定,因此 INF 必須將 C/C++ 執行時間程式庫的相關二進位檔複製到驅動程式存放區。 若要這樣做,請在驅動程式套件 的 [COPY_FILES] 區段中參考適當的檔案。
  • V3 列印驅動程式不應該使用共同安裝程式進行安裝,因為它們不會在點和列印連線期間執行。 這些驅動程式應該參考驅動程式套件 [COPY_FILES] 區段中的適當檔案。

以下是如何在 INF 的 [COPY_FILES] 區段中包含 CRT 二進位檔的範例:

[COPY_FILES]
;CRT
Msvcr120.dll
; other files

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

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

針對 UMDF 驅動程式:

  • 以靜態方式將驅動程式與 CRT 連結,以在二進位檔中包含執行時間。 在此情況下,您不需要重新發佈 CRT。

在 Visual Studio 2015) 之前, (將程式碼連結至 C 執行時間程式庫

若要判斷您必須與應用程式一起轉散發的 DLL,請收集應用程式相依的 DLL 清單。 收集清單的其中一種方式是執行相依性查核程式 (depends.exe) 。

如需詳細資訊,請參閱 決定要轉散發的 DLL選擇部署方法

您無法轉散發 Visual Studio 中包含的所有檔案;您只能轉散發適用于 Visual Studio 2013 Preview 和 Visual Studio 2013 SDK 預覽版之可轉散發程式碼中指定的檔案。 應用程式和各種 Visual C++ 動態連結程式庫的偵錯版本無法轉散發。

下列程式庫包含 C 執行時間程式庫函式:

詞彙 描述
Msvcr120.dll C 執行時間
Msvcp120.dll C++ 執行時間
Msvcr120d.dll C 執行時間的偵錯版本 - 不允許轉散發
Msvcp120d.dll C++ 執行時間的偵錯版本 - 不允許轉散發