2009-04-20 16 views
5

Utilizando Visual Studio 2008, creé un proyecto C++ Win32. Para lanzar el programa, hice un proyecto de instalación de Visual Studio dentro de la misma solución.¿Por qué mi proyecto de Visual Studio Win32 requiere la instalación de .NET 3.5 SP1?

setup.exe pide a mis usuarios que instalen .NET 3.5 SP1, que suele ser una instalación de más de 15 minutos y solo se permite a las cuentas de nivel de administrador. Si no lo hacen, hay un error en la línea de "marco equivocado". Estoy confundido sobre lo que en mi proyecto requiere .NET 3.5 SP1. Sospecho que solo porque ese es el marco en el que está mi PC ... ¿Hay alguna manera de ampliar los marcos en los que se ejecutará?

El código es en su mayoría llamadas de API de Win32. Por si acaso, aquí están mis dependencias y # incluye:

gdiplus.lib 
comctl32.lib 
Winmm.lib 
d3d9.lib 

(. El proyecto de instalación agrega automáticamente comdlg32.dll, entonces me dice para excluirlo)

#include <windows.h> 
#include <tchar.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <iostream> 
#include <fstream> 
#include <string.h> 

#include <commctrl.h> 
#include <process.h> 
#include <sstream> 
#include <math.h> 
#include <d3d9.h> 
#include <time.h> 
#include <gdiplus.h> 

Mi conjetura es que en algún lugar a través windows.h hay una configuración de versión WIN_VER o similar que está configurada en .NET 3.5 SP1, y de ahí viene la dependencia. Si ese es el caso, y tengo que definir una versión diferente, me encantaría escuchar los consejos de todos sobre lo que se debe/no se debe hacer/y cómo hacerlo, y qué tan atrás puedo ir para una inclusión máxima.

+0

relacionadas: [? ¿Por qué los proyectos de C++ nativas tienen una TargetFrameworkVersion] * (http://stackoverflow.com/ preguntas/21845605) * –

Respuesta

3

En VS 2008, el marco de destino predeterminado es .NET 3.5.

Para C++ en la página Propiedades comunes hay un menú desplegable "Marco de referencia", pero en el proyecto de prueba que creé está en gris, por lo que parece que no se puede cambiar después de que se haya creado el proyecto.

Creé un segundo proyecto de C++ y seleccioné la plantilla 2.0 del cuadro de diálogo Nuevo proyecto y la tenía 2.0 en el "Marco de referencia".

Por lo tanto, si desea apuntar a una versión inferior del marco, parece que primero tiene que crear su proyecto correctamente.

EDIT: En cuanto a qué versión del marco se debe orientar - todo depende

¿Es necesario utilizar cualquiera de las características 3.0 ó 3.5 (!)? Si no, ve por 2.0. Si lo hace, seleccione ese y tome el golpe de la descarga. No puedo decir qué tan probable es que cualquier clase de usuario tenga una versión particular instalada. Con el paso del tiempo, será cada vez más probable que tengan 3.5 instalados, ya que otras aplicaciones lo requerirán.

+0

Ok, veo esto ahora. Gracias. Lamentablemente, está atenuado, así que supongo que comenzaré un nuevo proyecto y copiaré todo. Todos mis usuarios tendrán Windows XP profesional, ¿sabe alguien al margen cuál es el marco de destino al que debería recurrir? –

+0

Re de qué versión: en realidad no necesito las características de .NET (que yo sepa, es el código de api win32), pero visual studio 2008 me limita a elegir .NET 2.0, 3.0 o 3.5. Así que iré por el más antiguo, 2.0, con la esperanza de que Windows XP Professional, Microsoft Office 2003 o Internet Explorer 6 (en todas las PC del usuario de destino) tengan al menos 2.0. Si no, esos usuarios pueden descargar la actualización. ¡Gracias de nuevo! –

+0

Puede aceptar esto;) – ChrisF

3

¿Ha verificado los requisitos previos en el proyecto del instalador? (Clic con el botón derecho ->Propiedades; botón Prerequisitos).

En el proyecto de prueba que creé, el marco .NET se selecciona por defecto (supongo que no analiza los proyectos que se están instalando, ya que tampoco incluye las bibliotecas de tiempo de ejecución de C++).

+1

Gracias por la respuesta. Los requisitos previos en el proyecto del instalador incluyen .Net Framework 3.5 SP1. Sin embargo, si elimino esto, obtendré el error "marco erróneo" cuando ejecutan el programa. La respuesta de ChrisF, creo que es mi problema, que cuando creé el proyecto dejé de forma predeterminada .Net 3.5 como el marco de referencia ... y por alguna razón esto no se puede cambiar en C++ después de la creación. –

+0

¿En qué plantilla creaste la aplicación? ¿Está utilizando alguno de los modificadores/clr (o similares)? ¿Has probado usar depnds.exe para determinar las dependencias reales? –

+0

Utilicé la plantilla "Proyecto Win32" y luego en el asistente de configuración del proyecto seleccioné "proyecto vacío". Los modificadores del compilador son "/ O2/Oi/GL/D" _MBCS "/ FD/EHsc/MD/Gy/Fo" Versión \\ "/Fd"Release\vc90.pdb"/W3/nologo/c/Zi/TP/errorReport: prompt " del cual no creo que ninguno esté relacionado con el tiempo de ejecución del lenguaje común. Estoy configurando el depends.exe ahora (adivinar que no fue una instalación predeterminada, tengo que especificarlo en la instalación personalizada de Visual Studio) y lo investigaré. Gracias - Jeff –

0

Bueno, para los proyectos de C#, si hace clic con el botón derecho en el archivo de Proyecto en el Explorador de soluciones y va a Propiedades, puede cambiar el Marco de objetivos en la pestaña "Aplicación". Puede haber algo similar en las propiedades del proyecto C++.

3

En mi caso, solucioné todos los problemas que la interfaz de usuario me permitía, prerrequisitos, propiedades comunes ... No importaba, todavía quería .NET 3.5.

Por lo tanto, abrí el archivo vdproj en slickedit y lo modifiqué directamente. Cambiado

"ExternalPersistence" 
    { 
     "LaunchCondition" 
     { 
      "{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_38ABBBBC51344AFFA38F2922DFFFE5B5" 
      { 
      "Name" = "8:.NET Framework" 
      "Message" = "8:[VSDNETMSG]" 
      "Version" = "8:3.5.30729" 
      "AllowLaterVersions" = "11:FALSE" 
      "InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=76617" 
      } 
     } 
    } 

a

"ExternalPersistence" 
    { 
    } 

Y dejó de pedir .NET 3.5

Cuestiones relacionadas