Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Se você estiver criando aplicativos ou drivers para o Windows 10, você só precisa ler esta seção. Se você estiver usando uma versão do Visual Studio anterior ao Visual Studio 2015, ignore esta seção e comece com Redistribuindo o C Runtime (aplica-se a antes do Visual Studio 2015).
A partir do Visual Studio 2015, o Universal C Runtime (UCRT) engloba o tempo de execução C. As outras partes necessárias para um programa completo (recursos de linguagem C/C++, biblioteca C++) são fornecidas pelo Visual Studio no VC++ Redistributable. Para evitar um requisito de redistribuição de tempo de execução, essas partes são vinculadas estaticamente.
Advertência
Ao criar um projeto de driver de modo de usuário no Visual Studio, se você definir PlatformToolset como WindowsUserModeDriver10.0, o conjunto de ferramentas ignorará qualquer biblioteca de tempo de execução especificada no projeto e, em vez disso, vinculará estaticamente ao VC++ Runtime e dinamicamente ao UCRT. Ao usar esse conjunto de ferramentas, esse comportamento de vinculação híbrida não pode ser reconfigurado.
Se você não estiver usando o WindowsUserModeDriver10.0 conjunto de ferramentas, use o procedimento a seguir para fazer modificações (por exemplo, incluir outra DLL):
- Definir para vincular estaticamente em geral: Propriedades > C/C++ > Code Generation > Runtime Library = Multi-threaded (/MT)
- Remova o UCRT vinculado estaticamente: Propriedades > Linker > Entrada > Ignorar bibliotecas padrão específicas += libucrt.lib
- Adicione o UCRT vinculado dinamicamente: Propriedades > Linker > Entradas > Dependências adicionais += ucrt.lib, Propriedades > Linker > Entradas > Ignorar bibliotecas padrão específicas += libucrt.lib
Redistribuindo o C Runtime (aplica-se a antes do Visual Studio 2015)
Observação
Todas as informações abaixo deste ponto aplicam-se apenas aos anteriores a 2015. Antes de 2015, havia duas versões separadas do C Runtime: o Visual C++ Runtime (VCRT, por exemplo msvcr120.dll) e o Windows CRT herdado (msvcrt.dll).
Visual Studio instala a versão mais recente do VCRT no System32 diretório. Se o arquivo não estiver nesse local, você pode copiá-lo diretamente para o diretório de compilação do seu projeto Visual C++.
Se o driver de modo de usuário ou o aplicativo de área de trabalho usa o VCRT, você deve distribuir as bibliotecas de vínculo dinâmico apropriadas. Use o pacote redistribuível do Visual C++ (VCRedist_x86.exe, VCRedist_x64.exeVCRedist_arm.exe, ). Encadeie o pacote redistribuível com outros binários e o pacote redistribuível receberá atualizações automáticas.
Se pretendes obter isolamento ou evitar a dependência do Redistributable VC++, podes ligar estaticamente ao CRT. Enquanto os projetos que não são de driver geralmente são capazes de copiar as DLLs específicas do Visual C/C++ para a pasta local do aplicativo (onde o aplicativo está instalado) para evitar uma dependência do VC++ Redistributable, a implantação local de aplicativos não é apropriada para um driver.
Não copie componentes CRT individuais para em System32 vez de usar um pacote redistribuível. Isso pode fazer com que o CRT não seja atendido automaticamente e, potencialmente, seja substituído.
As seguintes considerações especiais se aplicam aos drivers de impressora:
- Esses drivers devem incluir os arquivos CRT necessários no INF, para que os arquivos CRT sejam copiados para o armazenamento de driver como parte da carga útil do driver.
- Os drivers de impressão V4 não podem usar um coinstalador para a instalação, portanto, o INF deve copiar binários relevantes da biblioteca de tempo de execução C/C++ para o armazenamento de driver. Para fazer isso, consulte os arquivos apropriados na seção [COPY_FILES] do pacote de driver.
- Os drivers de impressão V3 não devem usar coinstaladores para a configuração, pois eles não são executados durante as conexões Ponto e Impressão. Esses drivers devem fazer referência aos arquivos apropriados na seção [COPY_FILES] do pacote de driver.
A seguir está um exemplo de como incluir os binários CRT na seção [COPY_FILES] de um INF:
[COPY_FILES]
;CRT
Msvcr120.dll
; other files
* [SourceDisksFiles]
Msvcr120.dll = 2
; other files
* [SourceDisksNames.amd64]
1 = %Location%,,,
2 = %Location%,,,"amd64"
Para drivers UMDF:
- Vincule estaticamente seu driver ao CRT para incluir o tempo de execução no binário. Nesse caso, não é necessário redistribuir o CRT.
Vinculando seu código às bibliotecas do C Runtime (aplica-se antes do Visual Studio 2015)
Para determinar quais DLLs você deve redistribuir com seu aplicativo, colete uma lista das DLLs das quais seu aplicativo depende. Uma maneira de coletar a lista é executar Dependency Walker (depends.exe).
Para obter mais informações, consulte Determinando quais DLLs redistribuir e Escolhendo um método de implantação.
Você não pode redistribuir todos os arquivos que estão incluídos no Visual Studio; você só tem permissão para redistribuir os arquivos especificados em Código redistribuível para Visual Studio 2013 Preview e Visual Studio 2013 SDK Preview. Versões de depuração de aplicações e as várias bibliotecas de ligação dinâmica do Visual C++ não são redistribuíveis.
As seguintes bibliotecas contêm as funções da biblioteca de tempo de execução C:
| Período | Descrição |
|---|---|
| Msvcr120.dll | C runtime |
| Msvcp120.dll | Tempo de execução do C++ |
| Msvcr120d.dll | Versão de depuração do tempo de execução C - nenhuma redistribuição permitida |
| Msvcp120d.dll | Versão de depuração do runtime do C++ - não é permitida a redistribuição |