2013-03-08 13 views
17

Utworzono aplikację serwera klienta w C++ przy użyciu programu Visual Studio.problemy z uruchomionym plikiem exe zbudowanym przy użyciu programu Visual Studio na innym komputerze

Teraz chcę uruchomić plik exe na innym komputerze klienta (który nie ma zainstalowanego Visual Studio) ale gdy próbuję uruchomić plik exe daje się następujący komunikat o błędzie:

Ta aplikacja nie udało się uruchomić, ponieważ konfiguracja aplikacji jest nieprawidłowa. Ponowna instalacja aplikacji może rozwiązać ten problem z numerem .

Jak mogę uruchomić plik exe bez instalowania czegokolwiek na komputerze?

+3

Czy komputer ma odpowiednią wersję biblioteki uruchomieniowej C. Jest to bardzo często inlcude msvcrtXX.dll, gdzie XX to wersja nie. w pakiecie instalacyjnym. –

Odpowiedz

4

I wdrożone mojego programu uwalniania zamiast debugowania i exe teraz działa na innym komputerze

2

Wygląda na to, że brakuje niektórych plików DLL. Pamiętaj, aby skopiować odpowiednie biblioteki DLL wraz z exe.

+1

Wygląda na to, że brakuje mu bibliotek uruchomieniowych VC++. Pyta, jak może wysłać exe bez nich, więc twoja odpowiedź nie pomoże. – Caesar

+0

Odpowiedź pomaga, jeśli brakująca zależność nie jest redystrybucją w C++. Zdajesz sobie sprawę, że programiści mogą używać wszystkich bibliotek dll, nie tylko MSVC, prawda? –

+0

@ Cezar nie, nie powiedział, wyślij .exe bez nich, powiedział bez * instalowania * niczego, więc ta odpowiedź jest w porządku. – JBentley

4

Nie widziałem wcześniej tego konkretnego błędu, zwykle jest to błąd związany z brakującą biblioteką DLL (redistributable Windows). Zakładając, że tak naprawdę nie ma problemu z konfiguracją, masz dwie możliwości:

1) Zmień tryb kompilacji z Multithreaded DLL na Multithreaded. Można to zrobić z sekcji C++ właściwości projektu podczas generowania kodu. W trybie wielowątkowym twój plik binarny będzie statycznie powiązany z redystrybucyjnymi oknami. To jest prawdopodobnie to, czego chcesz.

2) Zainstaluj Windows redistributable na maszynie docelowej. To prawdopodobnie nie jest OK b/c stwierdzasz, że nie chcesz instalować czegokolwiek na maszynie docelowej.

Ostrzeżenie dotyczące opcji 1, różne wersje okien mają różne wersje redystrybucji. Można spotkać wysoce wyspecjalizowane środowisko, w którym statystycznie powiązany program nie będzie działał zgodnie z oczekiwaniami.

+0

Istnieje więcej niż dwie opcje. Zobacz odpowiedź Nayany. – JBentley

18

Aplikacje zbudowane w Visual Studio zależą od Visual C++ Redistibutable (VCRedist). Gdy program jest dynamicznie łączony, twoje pliki binarne będą wymagać MSVCR**.dll (Microsoft C Runtime Library).

na MSDN, tam jest ładny artykuł o nazwie Redistributing Visual C++ Files (for Visual Studio 2008), które stwierdza, że ​​istnieją Potencjalne błędy run-time w przypadku, wymagane Visual C biblioteka ++ nie jest zainstalowane:

można uzyskać jeden z następujących komunikatów o błędach, w zależności od wersji systemu Windows, na którym próbujesz uruchomić aplikację:

  • Aplikacja nie została poprawnie zainicjowana (0xc0000135).
  • Nie można uruchomić tej aplikacji, ponieważ konfiguracja aplikacji jest nieprawidłowa. Ponowna instalacja aplikacji może rozwiązać ten problem.
  • System nie może wykonać określonego programu.
Zasadniczo masz dwie opcje:
  • Najprostszy z możliwych rozwiązań jest zmiana dynamiczne łączenie bibliotek uruchomieniowych do linkowania statycznego. Przejdź do właściwości projektu i pod C/C++> Generacja kodu znajdziesz bibliotekę wykonawczą opcji. Musisz go zmienić z Multi-threaded DLL (/MD) na Multi-threaded (/MT).
  • Innym możliwym rozwiązaniem jest upewnienie się, że właściwa wersja pakietu redystrybucyjnego Microsoft VC++ jest zainstalowana na maszynie docelowej.

Ale twoja aplikacja może również zależeć od innych bibliotek DLL. W przypadku, gdy chcesz dowiedzieć się, jakie są zależności od programu, jest doskonałym narzędziem o nazwie Dependency Walker, które pomogą Ci w tym iw wielu innych sytuacjach :)

+3

+1 za sugerowanie powiązania statycznego. To jest prawdziwa odpowiedź na pytanie OP (jak uruchomić bez instalowania czegokolwiek). 'depends' jest doskonałym narzędziem do określenia, jakich bibliotek brakuje. –

+0

Twój drugi punkt wypunktowania nie pomaga OP, ponieważ ma ograniczenie, że nie może zainstalować niczego na maszynie docelowej. Istnieją również więcej niż dwa rozwiązania - patrz odpowiedź Nayany. – JBentley

+0

Niestety, ale nie mogę zmienić biblioteki DLL. a także próbuję uruchomić plik exe bez instalowania czegoś na innym komputerze. – Karen123456

10

Tło:

  • C++ aplikacje Wymagają uruchomienia zestawów (DLL), aby uruchomić na dowolnym komputerze z systemem Windows.
  • Zwykle te zestawy uruchomieniowe znajdują się w katalogu C: \ Windows \ Winsxs.
  • Wszystkie systemy operacyjne Windows są domyślnie dostarczane z kilkoma złożeniami czasu wykonywania.
  • Ale jeśli aplikacja została opracowana w nowszej wersji środowiska montażowego środowiska wykonawczego, komputer docelowy musi również mieć tę samą wersję czasu uruchamiania.
  • Podczas instalowania programu Visual Studio na komputer jest dostarczana najnowsza wersja zestawu uruchomieniowego.

soloution: W końcu i tak kierować przez komputer powinien mieć dokładny czas zespoły run. Istnieje kilka sposobów, aby to zrobić (więcej szczegółów szukaj w Google każdy).

  1. Łączenie statycznie zespołów wykonawczych z aplikacją (uciążliwy dla dużych aplikacji).
  2. Zainstalować środowisko redystrybucji C++ na komputerze docelowym (najprostszy sposób).
  3. Tworzenie projektu instalacji w celu wdrożenia czasu pracy na komputerze docelowym podczas instalowania aplikacji. (Not bad)
  4. Wdrażanie zespoły run-time jak zespoły prywatne (Professional) here zobaczyć więcej szczegółów

Warunki:

  • Nie wolno używać ramy .NET w aplikacji.
  • Nie wolno używać języka wspólnego wsparcia run-time dla aplikacji
+0

Nigdy czy nowszy? – BBagi

+0

@RuralJuror. Dziękuję Ci. Poprawiłem to. –

+0

Moim zdaniem powinno to być zaakceptowaną odpowiedzią, ponieważ jest to jedyna opcja wzmianki o prywatnych złozeniach. Niektóre inne odpowiedzi są zupełnie błędne, ponieważ stwierdzają, że istnieją tylko dwie opcje (i jedna z tych opcji jest bezużyteczna dla PO, ponieważ ma ona ograniczenia nie instalowania czegokolwiek na maszynie docelowej). – JBentley