Po napisaniu aplikacji CGI w programie Visual Studio 2008 i debugowaniu jej lokalnie, przesłałem ją do systemu operacyjnego Windows Server 2003, w którym natychmiast się nie uruchomiła.Uruchamianie plików binarnych C++ bez redystrybucji środowiska wykonawczego (Server2k3, XPSP3)
mam zgadywać muszę zainstalować nędznego Runtime Dystrybucyjnego, ale po przeczytaniu tego:
http://kobyk.wordpress.com/2007/07/20/dynamically-linking-with-msvcrtdll-using-visual-c-2005/
Zastanawiam się, czy to ma większy sens, aby zignorować ten obok siebie rzeczy i po prostu re-write Aplikacja.
Zgaduję, że Windows Server 2003 nie ma wersji MSCRVT, której potrzebuję? Czy system Windows Server 2003 to posiada?
Jeśli chodzi o wdrażanie grubych klientów, chciałbym rozpowszechniać wymagane biblioteki dll z moją aplikacją. Co oni zakładają, że po prostu INCLUDE iostream, sstream, string?
Czy zmienia się znacząco, jeśli dodaję plik windows.h?
Dodano:
Używając przełącznika/MT zalecane poniżej
C/C++ -> Code Generation -> Runtime Library -> Wielowątkowym (/ MT)
(Prawdopodobnie będziesz potrzebować zrobić clean:
Build -> Clean
aby uniknąć komunikatu o błędzie
"Zapisanie zaktualizowanego manifestu w pliku" nie powiodło się)
Nadęty mój app od 38k do 573k. To, co nazywam Significant (wyobraź sobie, jeśli to była twoja pensja). Ponieważ wiele instancji tej aplikacji będzie stale ładowanych i rozładowywanych (wymagając cennej pamięci i zasobów procesora), chciałbym znaleźć lepsze (mniejsze) rozwiązanie.
Rozumiem, że nie jest to ważne w dzisiejszych wielu sytuacjach, a nie w centrum uwagi wielu programistów, stąd tendencja do uruchamiania aplikacji .NOT i 60 MB, ale właśnie to chcę zrobić.
Dodano:
Po usunięciu debugowanie, aby projekt do kompilacji:
Project -> Propeties -> C/C++ -> preprocesor -> preprocesora Definicje (usunąć DEBUG;)
rozmiar został zmniejszony do 300 tys. i będzie działał.
Dodano: Jak sugeruje Chris Becke poniżej, kopiowanie: msvcm90.dll msvcp90.dll Msvcr90.dll Microsoft.VC90.CRT.manifest do katalogu aplikacji zapewni cały czas pracy potrzebny.
Korzystanie z programu Visual Studio 6 zostało zasugerowane kilka razy, ale nie obsługuje systemu Vista (lub Windows 7, który zakładamy). Inne rozwiązania, które nie wymagają dystrybucji w środowisku wykonawczym, prawdopodobnie byłyby dla mnie MASM, a nawet podstawą Basic.Niestety, pokonuje to cel używania języka OOP wysokiego poziomu, takiego jak C++.
Tak długo, jak muszę wymagać instalacji redystrybucji C++, kompromis jest dodatkowy 260k. Ów dopuszczalne
Czy * co * zmienia się znacząco? Niemal wszystko, co zbudujesz przy pomocy VS2008, będzie wymagało również instalacji w środowisku wykonawczym. – Joe
Będziesz potrzebował środowiska wykonawczego niemal bez względu na wszystko. Twój wybór znajduje się w * jak * możesz to uwzględnić. Najwygodniejszą metodą jest użycie statycznie połączonej wersji. Wtedy nie musisz w ogóle dystrybuować osobnej biblioteki dll. W przeciwnym razie masz pół miliona sposobów dystrybucji biblioteki dll. Począwszy od bardzo skomplikowanej rzeczy, która wymaga przeczytania 15 stron dokumentacji, po prostu umieszczenie jej w folderze o poprawnej nazwie w folderze głównym aplikacji, co jest całkiem łatwe w zarządzaniu. – jalf
Nie jestem pewien, jak skuteczne byłoby to, ale spróbuj błądzić z opcjami kompilatora/linkera. Było kilka czynników, które wpływały na rozmiar pliku wykonywalnego (coś na temat optymalizacji rozmiaru i usuwania nieużywanych rzeczy). –