En cours d'exécution C++ binaires sans le moteur d'exécution redistribuable (Server2k3, XPSP3)

Avoir écrit une application CGI dans Visual Studio 2008 et debigged en local, je l'ai transféré sur un ordinateur Windows Server 2003 du système d'exploitation où il rapidement échoué.

Je suppose que j'ai besoin d'installer le malheureux Runtime distribuables, mais après lecture de ceci:

http://kobyk.wordpress.com/2007/07/20/dynamically-linking-with-msvcrtdll-using-visual-c-2005/

Je me demande si il est plus judicieux d'ignorer ce stuff et tout simplement ré-écriture de l'application.

Je devine Windows Server 2003 n'ont pas MSCRVT version dont j'ai besoin?
Windows Server 2003?

Quand il s'agit de déployer des clients lourds, je tiens à distribuer les dll requises avec mon application.
Que sont-ils, en supposant que je viens d'INCLURE iostream, succession, chaîne?

Faut-il changer de manière significative si j'ajoute windows.h?

Ajouté:

L'aide de la /MT commutateur recommandé ci-dessous

C /C++ -> Génération de Code -> Bibliothèque d'Exécution -> multithread(/MT)

(Vous aurez probablement besoin de faire un clean:

Build -> Nettoyer

afin d'éviter le message d'erreur

"Impossible d'enregistrer le manifeste mis à jour dans le fichier")

gonflé mon application de 38k à 573k. C'est ce que j'appelle Significative (imaginez si c'était votre salaire). Depuis de nombreux cas de cette application va être chargés et déchargés en permanence (nécessitant précieux de la mémoire et des ressources du processeur) je voudrais trouver une meilleure (la plus petite) solution.

Je comprends que ce n'est pas important pour de nombreuses situations d'aujourd'hui et pas l'objet de beaucoup de développeurs, d'où la tendance .PAS et 60MO runtimes, mais c'est ce que je veux faire.

Ajouté:

Après le retrait de débogage pour obtenir le projet de compilation:

Projet -> Propriétés -> c/c++ -> Préprocesseur -> Définitions de Préprocesseur (suppression de DÉBOGAGE;)

la taille a été réduite à 300k, et il sera exécuté.

Ajouté:
Comme suggéré par Chris Becke ci-dessous, la copie:
msvcm90.dll
msvcp90.dll
msvcr90.dll
Microsoft.VC90.CRT.manifeste
Le répertoire de l'application fournira tous le moteur d'exécution nécessaires.

À l'aide de Visual Studio 6 a été suggéré à quelques reprises, mais il ne supporte pas Vista (ou Windows 7, nous supposons) d'Autres solutions qui ne nécessitent pas un temps d'exécution distribuable serait probablement me MASM ou même une saveur de Base. Malheureusement, cela va à l'encontre de l'objectif de l'utilisation d'un haut niveau de la programmation orientée objet, les langages comme le C++.

Tellement longtemps que je n'ai besoin d'exiger le C++ redistributable être installé, le compromis est un supplément de 260k. C'est acceptable

N' ce modifier de manière significative? Joli beaucoup, presque tout ce que vous construisez avec VS2008 va exiger l'exécution installer aussi bien.
Vous allez avoir besoin de le moteur d'exécution presque n'importe quoi. Votre choix est en comment de l'inclure. La méthode la plus pratique est d'utiliser le statiquement version. Ensuite, vous n'avez pas à distribuer une dll. À défaut, vous disposez d'un demi-million de façons de distribuer le fichier dll. Allant de la super-compliqué side-by-side chose qui nécessite la lecture des 15 pages de documentation, il suffit de le mettre dans un dossier avec le nom correct dans votre dossier racine de l'application, ce qui est assez gérable.
Je ne suis pas sûr de l'efficacité de ce serait, mais essayer de bidouiller avec le compilateur/linker options. Il y avait quelques-uns qui ont affecté la taille de l'exécutable (quelque chose au sujet de l'optimisation de la taille et de la suppression inutilisés des trucs).
Ajout /MT provoque le C et le C++ runtime être lié statiquement, au lieu de lié de façon dynamique, d'où l'augmentation de la taille. Vous ne savez pas si cela fait une différence, car dans les deux cas, le moteur d'exécution doit encore être chargé dans votre processus de l'espace d'adresse. Pourquoi ne pas lancer maintenant? Quel message d'erreur avez-vous l'obtenir? Essayez de le charger avec depends.exe et voir ce que les Dll qu'il recherche.
Voir ci-dessus. Sa recherche d'une certaine version de MSVCRT qui doit être installées côte à côte (c'est ce que le C++ runtime). Je NE peux pas le faire dans ce cas.

OriginalL'auteur Mike Trader | 2009-10-17