Skip to content

Repo sync for protected CLA branch #4368

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Jan 13, 2023
6 changes: 3 additions & 3 deletions docs/build/arm64-exception-handling.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: "ARM64 exception handling"
description: Describes the exception handling conventions and data used by windows on ARM64.
ms.date: 10/10/2022
ms.date: 01/13/2023
---
# ARM64 exception handling

Expand Down Expand Up @@ -281,15 +281,15 @@ If exceptions were guaranteed to only ever occur within a function body, and nev

- By counting the number of instructions before the end of the prolog, it's possible to skip the equivalent number of unwind codes. We can execute the rest of the sequence to undo only those parts of the prolog that have completed execution.

The unwind codes are encoded according to the table below. All unwind codes are a single/double byte, except the one that allocates a huge stack. There are 22 unwind codes in total. Each unwind code maps exactly one instruction in the prolog/epilog, to allow for unwinding of partially executed prologs and epilogs.
The unwind codes are encoded according to the table below. All unwind codes are a single/double byte, except the one that allocates a huge stack (`alloc_l`). There are 22 unwind codes in total. Each unwind code maps exactly one instruction in the prolog/epilog, to allow for unwinding of partially executed prologs and epilogs.

| Unwind code | Bits and interpretation |
|--|--|
| `alloc_s` | 000xxxxx: allocate small stack with size \< 512 (2^5 * 16). |
| `save_r19r20_x` | 001zzzzz: save `<x19,x20>` pair at `[sp-#Z*8]!`, pre-indexed offset >= -248 |
| `save_fplr` | 01zzzzzz: save `<x29,lr>` pair at `[sp+#Z*8]`, offset \<= 504. |
| `save_fplr_x` | 10zzzzzz: save `<x29,lr>` pair at `[sp-(#Z+1)*8]!`, pre-indexed offset >= -512 |
| `alloc_m` | 11000xxx'xxxxxxxx: allocate large stack with size \< 16k (2^11 * 16). |
| `alloc_m` | 11000xxx'xxxxxxxx: allocate large stack with size \< 32K (2^11 * 16). |
| `save_regp` | 110010xx'xxzzzzzz: save `x(19+#X)` pair at `[sp+#Z*8]`, offset \<= 504 |
| `save_regp_x` | 110011xx'xxzzzzzz: save pair `x(19+#X)` at `[sp-(#Z+1)*8]!`, pre-indexed offset >= -512 |
| `save_reg` | 110100xx'xxzzzzzz: save reg `x(19+#X)` at `[sp+#Z*8]`, offset \<= 504 |
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
description: "Learn more about: Walkthrough: Deploying a Visual C++ Application By Using the Visual C++ Redistributable Package"
title: "Deploy an App By Using the Redistributable Package (C++)"
ms.date: 06/28/2022
ms.date: 01/13/2023
helpviewer_keywords: ["walkthrough, deploying a Visual C++ application by using the redistributable package"]
ms.assetid: e59becbf-b8c6-4c8e-bab3-b69cc1ed3e5e
ms.custom: intro-deployment
Expand Down Expand Up @@ -34,6 +34,8 @@ You must have these components to complete this walkthrough:
copy MyMFCApp.exe "C:\Program Files\MyMFCApp"
```

You can apply command-line options to the Redistributable executable in your batch file. For more information, see [Command-line options for the Redistributable packages](./redistributing-visual-cpp-files.md#command-line-options-for-the-redistributable-packages).

1. Create a self-extracting setup file:

1. At a command prompt or in the **Run** window, run `iexpress.exe`.
Expand Down Expand Up @@ -81,7 +83,7 @@ You must have these components to complete this walkthrough:
The self-extracting setup file installs the app that's in the folder you specified in `setup.bat`. The app should run successfully because the Microsoft Visual C++ Redistributable Package installer is included in the self-extracting setup file.

> [!IMPORTANT]
> To determine which version of the runtime is installed, the installer checks the registry key `\HKLM\SOFTWARE\Microsoft\VisualStudio\<version>\VC\Runtimes\<platform>\Version`. If the currently installed version is newer than the version that the installer is attempting to install, the installer returns success without installing the older version and leaves an additional entry on the installed programs page in the Control Panel.
> To determine which version of the runtime is installed, the installer checks the registry key `\HKLM\SOFTWARE\Microsoft\VisualStudio\<version>\VC\Runtimes\<platform>\Version`. (The `<version>` value used for Visual Studio 2015, 2017, 2019, and 2022 is 14.0.) If the currently installed version is newer than the version that the installer is attempting to install, the installer returns success without installing the older version and leaves an additional entry on the installed programs page in the Control Panel.

## See also

Expand Down
4 changes: 2 additions & 2 deletions docs/windows/latest-supported-vc-redist.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: "Latest supported Visual C++ Redistributable downloads"
description: "This article lists the download links for the latest versions of Visual C++ Redistributable packages."
ms.date: 04/07/2022
ms.date: 01/13/2023
helpviewer_keywords:
[
"redist",
Expand Down Expand Up @@ -42,7 +42,7 @@ Download other languages and versions, including versions for long term servicin

- **Windows XP Support**: Microsoft ended support for Windows XP on April 8, 2014. Current versions of the Visual C++ Redistributable for Visual Studio 2015-2022 only support Windows Vista, 7, 8.1, 10, and 11. The last version of the Visual C++ Redistributable that works on Windows XP shipped in Visual Studio 2019 version 16.7 (file versions starting with **14.27**). The Redistributable is available in the [my.visualstudio.com Downloads](https://my.visualstudio.com/Downloads/) section as **Visual C++ Redistributable for Visual Studio 2019 (version 16.7)**. Use the Search box to find this version. To download the files, select the platform and language you need, and then choose the **Download** button.

- The Visual C++ Redistributable supports several command-line options. The `/?`, `/h`, or `/help` options display a pop-up dialog that lists the available options. You may specify `/install` to install, `/repair` to repair, or `/uninstall` to uninstall the Redistributable. The `/layout` option copies the complete contents of the Redistributable in the current directory. By default, the Redistributable prompts the user for information and whether to restart after installation. You can specify the `/passive` option, which displays progress, but doesn't otherwise require user interaction. You can also specify a `/quiet` option, which doesn't display any UI or require any user interaction. The `/norestart` option suppresses any attempts to restart. By default, a log file is created in *`%TEMP%`*. You can use `/log filename.txt` to log to a specific file.
- The Visual C++ Redistributable supports several command-line options. For more information, see [Command-line options for the Redistributable packages](./redistributing-visual-cpp-files.md#command-line-options-for-the-redistributable-packages).

## Visual Studio 2013 (VC++ 12.0)

Expand Down
14 changes: 12 additions & 2 deletions docs/windows/redistributing-visual-cpp-files.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: "Redistributing Visual C++ Files"
description: "Visual Studio includes Redistributable libraries and components you can deploy with your app."
ms.date: 02/07/2022
ms.date: 01/13/2023
helpviewer_keywords: ["application deployment [C++], file redistributing", "redistributing applications [C++]", "deploying applications [C++], file redistributing", "file redistribution [C++]", "redistributing applications [C++], about redistributing applications"]
ms.assetid: d201b2ce-36f1-44e5-a96c-0db81a1ba652
---
Expand Down Expand Up @@ -52,7 +52,17 @@ In Visual Studio 2022 and 2019, merge module files are part of an optional insta

The Visual C++ Redistributable Packages install and register all Visual C++ libraries. If you use one, run it as a prerequisite on the target system before you install your application. We recommend that you use these packages for your deployments because they enable automatic updating of the Visual C++ libraries. For an example about how to use these packages, see [Walkthrough: Deploying a Visual C++ Application By Using the Visual C++ Redistributable Package](deploying-visual-cpp-application-by-using-the-vcpp-redistributable-package.md).

Each Visual C++ Redistributable package checks for the existence of a more recent version on the machine. If a more recent version is found, the package won't get installed. In Visual Studio 2015 or later, Redistributable packages display an error message stating that setup failed. If a package is run by using the **`/quiet`** flag, no error message is displayed. In either case, an error is logged by the Microsoft installer, and an error result is returned to the caller. In Visual Studio 2015 and later, you can avoid this error by checking the registry to find out if a more recent version is installed. The current installed version number is stored in the `HKEY_LOCAL_MACHINE\SOFTWARE[\Wow6432Node]\Microsoft\VisualStudio\14.0\VC\Runtimes\{x86|x64|ARM}` key. The version number is 14.0 for Visual Studio 2015, 2017, 2019, and 2022 because the latest Redistributable is binary compatible with previous versions back to 2015. The key is `ARM`, `x86`, or `x64` depending on the installed vcredist versions for the platform. (You need to check under the `Wow6432Node` subkey only if you're using Regedit to view the version of the installed x86 package on an x64 platform.) The version number is stored in the `REG_SZ` string value **`Version`** and also in the set of **`Major`**, **`Minor`**, **`Bld`**, and **`Rbld`** `REG_DWORD` values. To avoid an error at install time, you must skip installation of the Redistributable package if the currently installed version is more recent.
Each Visual C++ Redistributable package checks for the existence of a more recent version on the machine. If a more recent version is found, the package won't get installed. In Visual Studio 2015 or later, Redistributable packages display an error message stating that setup failed. If a package is run by using the **`/quiet`** flag, no error message is displayed. In either case, an error is logged by the Microsoft installer, and an error result is returned to the caller. In Visual Studio 2015 and later, you can avoid this error by checking the registry to find out if a more recent version is installed. The current installed version number is stored in the `HKEY_LOCAL_MACHINE\SOFTWARE[\Wow6432Node]\Microsoft\VisualStudio\14.0\VC\Runtimes\{x86|x64|arm64}` key. The version number is 14.0 for Visual Studio 2015, 2017, 2019, and 2022 because the latest Redistributable is binary compatible with previous versions back to 2015. The key is `arm64`, `x86`, or `x64` depending on the installed vcredist versions for the platform. (You need to check under the `Wow6432Node` subkey only if you're using Regedit to view the version of the installed x86 package on an x64 platform.) The version number is stored in the `REG_SZ` string value **`Version`** and also in the set of **`Major`**, **`Minor`**, **`Bld`**, and **`Rbld`** `REG_DWORD` values. To avoid an error at install time, you must skip installation of the Redistributable package if the currently installed version is more recent.

### Command-line options for the Redistributable packages

The Visual C++ Redistributable supports several command-line options. The `/?`, `/h`, or `/help` options display a pop-up dialog that lists the available options. You may specify `/install` to install, `/repair` to repair, or `/uninstall` to uninstall the Redistributable. The `/layout` option copies the complete contents of the Redistributable in the current directory. By default, the Redistributable installs its contents and prompts the user for information and whether to restart after installation. You can specify the `/passive` option, which displays progress, but doesn't otherwise require user interaction. You can also specify a `/quiet` option, which doesn't display any UI or require any user interaction. The `/norestart` option suppresses any attempts to restart. By default, a log file is created in *`%TEMP%`*. You can use `/log filename.txt` to log to a specific file.

This example command installs the x64 Redistributable. It shows installation progress, but doesn't require user interaction or a restart:

```cmd
vc_redist.x64.exe /install /passive /norestart
```

## Install the redistributable merge modules

Expand Down