Programm läuft nicht auf anderen Rechnern

Hallo Leute,
ich weiß, dass das Problem schon 1000 Mal besprochen wurde aber ich habe immernoch keine Lösung gefunden.

Ich habe ein Programm mit Microsoft Visual C++ 2008 Express Edition geschrieben. Eine ganz normale Windows Anwendung. Es soll nur ein Fenster geöffnet werden ein ganz leeres Fenster ohne Buttons ohne alles.

Dieses Programm läuft auf meinem Rechner perfekt auf anderen jedoch nicht. Habe auf anderen Zielrechnern SP2 drauf und .NET Framework 2 drauf und so weiter.

Fehlermeldung: Die Anwendungskonfiguration ist nicht korrekt.

Habe schon gehört, dass das irgendwas mit Manifesdateien zu tun haben soll, aber das sind für mich noch Fragezeichen.

Würde mich über baldige Antwort freuen.

Freundliche Grüße

M.
[EDIT: Name auf Wunsch entfernt]

Ich habe ein Programm mit Microsoft Visual C++ 2008 Express
Edition geschrieben. Eine ganz normale Windows Anwendung. Es
soll nur ein Fenster geöffnet werden ein ganz leeres Fenster
ohne Buttons ohne alles.

Was heisst „eine ganz normale Windows-Anwendung“? Kein .NET, Fenster öffnen per Win32-API? Dann bist du hier vielleicht nicht ganz richtig.

Oder verwendest du C++/CLI? Windows Forms? WPF? Die Tatsache, dass du was zum .NET-Framework schreibst, würde ja darauf hindeuten.

Grüße,
Sebastian

Mein aktuellster Stand ist folgender:
Ich benutze Microsoft Visual C++ Express Ediotion 2008. Ich mache eine neue Windows Formsanwendung auf, die erstmal nur aus einem Fenster ohne alles besteht.
Weder die Release Version oder die Debug Version lassen sich auf einem anderen Computer ausführen mit installiertem .NET Framework 2.0.

Ich habe mir nun folgendes Video angeguckt, denn dieses ist genau mein Problem:
http://www.kalmbach-software.de/screencasts/VC2008EE…

Wenn ich die Einstellungen jetzt so ändere wie der Mann mir das sagt, dann lässt sich mein Projekt nicht mehr kompilieren. Da kommen folgende Fehler:


------ Erstellen gestartet: Projekt: Test, Konfiguration: Release Win32 ------
Kompilieren…
Test.cpp
e:\alles mögliche\visual c++\test\Form1.h(6) : error C2871: ‚System‘: Es ist kein Namespace mit diesem Namen vorhanden
e:\alles mögliche\visual c++\test\Form1.h(7) : error C2653: ‚System‘: Keine Klasse oder Namespace
e:\alles mögliche\visual c++\test\Form1.h(7) : error C2871: ‚ComponentModel‘: Es ist kein Namespace mit diesem Namen vorhanden
e:\alles mögliche\visual c++\test\Form1.h(8) : error C2653: ‚System‘: Keine Klasse oder Namespace
e:\alles mögliche\visual c++\test\Form1.h(8) : error C2871: ‚Collections‘: Es ist kein Namespace mit diesem Namen vorhanden
e:\alles mögliche\visual c++\test\Form1.h(9) : error C2653: ‚System‘: Keine Klasse oder Namespace
e:\alles mögliche\visual c++\test\Form1.h(9) : error C2871: ‚Forms‘: Es ist kein Namespace mit diesem Namen vorhanden
e:\alles mögliche\visual c++\test\Form1.h(10) : error C2653: ‚System‘: Keine Klasse oder Namespace
e:\alles mögliche\visual c++\test\Form1.h(10) : error C2871: ‚Data‘: Es ist kein Namespace mit diesem Namen vorhanden
e:\alles mögliche\visual c++\test\Form1.h(11) : error C2653: ‚System‘: Keine Klasse oder Namespace
e:\alles mögliche\visual c++\test\Form1.h(11) : error C2871: ‚Drawing‘: Es ist kein Namespace mit diesem Namen vorhanden
e:\alles mögliche\visual c++\test\Form1.h(22) : error C2059: Syntaxfehler: ‚public‘
e:\alles mögliche\visual c++\test\Form1.h(22) : error C2059: Syntaxfehler: ‚public‘
e:\alles mögliche\visual c++\test\Form1.h(22) : error C2653: ‚System‘: Keine Klasse oder Namespace
e:\alles mögliche\visual c++\test\Form1.h(23) : error C2143: Syntaxfehler: Es fehlt ‚;‘ vor ‚{‘
e:\alles mögliche\visual c++\test\Form1.h(23) : error C2447: ‚{‘: Funktionsheader fehlt - Parameterliste im alten Stil?
.\Test.cpp(8) : error C2337: „STAThreadAttribute“: Attribut wurde nicht gefunden.
.\Test.cpp(9) : error C2065: ‚array‘: nichtdeklarierter Bezeichner
.\Test.cpp(9) : error C2653: ‚System‘: Keine Klasse oder Namespace
.\Test.cpp(9) : error C2065: ‚String‘: nichtdeklarierter Bezeichner
.\Test.cpp(9) : error C2059: Syntaxfehler: ‚>‘
.\Test.cpp(10) : error C2143: Syntaxfehler: Es fehlt ‚;‘ vor ‚{‘
.\Test.cpp(10) : error C2447: ‚{‘: Funktionsheader fehlt - Parameterliste im alten Stil?
AssemblyInfo.cpp
.\AssemblyInfo.cpp(3) : error C2871: ‚System‘: Es ist kein Namespace mit diesem Namen vorhanden
.\AssemblyInfo.cpp(4) : error C2653: ‚System‘: Keine Klasse oder Namespace
.\AssemblyInfo.cpp(4) : error C2871: ‚Reflection‘: Es ist kein Namespace mit diesem Namen vorhanden
.\AssemblyInfo.cpp(5) : error C2653: ‚System‘: Keine Klasse oder Namespace
.\AssemblyInfo.cpp(5) : error C2871: ‚CompilerServices‘: Es ist kein Namespace mit diesem Namen vorhanden
.\AssemblyInfo.cpp(6) : error C2653: ‚System‘: Keine Klasse oder Namespace
.\AssemblyInfo.cpp(6) : error C2871: ‚InteropServices‘: Es ist kein Namespace mit diesem Namen vorhanden
.\AssemblyInfo.cpp(7) : error C2653: ‚System‘: Keine Klasse oder Namespace
.\AssemblyInfo.cpp(7) : error C2871: ‚Permissions‘: Es ist kein Namespace mit diesem Namen vorhanden
.\AssemblyInfo.cpp(14) : error C2337: „AssemblyTitleAttribute“: Attribut wurde nicht gefunden.
.\AssemblyInfo.cpp(15) : error C2337: „AssemblyDescriptionAttribute“: Attribut wurde nicht gefunden.
.\AssemblyInfo.cpp(16) : error C2337: „AssemblyConfigurationAttribute“: Attribut wurde nicht gefunden.
.\AssemblyInfo.cpp(17) : error C2337: „AssemblyCompanyAttribute“: Attribut wurde nicht gefunden.
.\AssemblyInfo.cpp(18) : error C2337: „AssemblyProductAttribute“: Attribut wurde nicht gefunden.
.\AssemblyInfo.cpp(19) : error C2337: „AssemblyCopyrightAttribute“: Attribut wurde nicht gefunden.
.\AssemblyInfo.cpp(20) : error C2337: „AssemblyTrademarkAttribute“: Attribut wurde nicht gefunden.
.\AssemblyInfo.cpp(21) : error C2337: „AssemblyCultureAttribute“: Attribut wurde nicht gefunden.
.\AssemblyInfo.cpp(34) : error C2337: „AssemblyVersionAttribute“: Attribut wurde nicht gefunden.
.\AssemblyInfo.cpp(36) : error C2337: „ComVisible“: Attribut wurde nicht gefunden.
.\AssemblyInfo.cpp(38) : error C2337: „CLSCompliantAttribute“: Attribut wurde nicht gefunden.
.\AssemblyInfo.cpp(40) : error C2337: „SecurityPermission“: Attribut wurde nicht gefunden.
.\AssemblyInfo.cpp(40) : error C2653: ‚SecurityAction‘: Keine Klasse oder Namespace
.\AssemblyInfo.cpp(40) : error C2065: ‚RequestMinimum‘: nichtdeklarierter Bezeichner
Fehlen die Anführungszeichen ("") um „RequestMinimum“?
Das Buildprotokoll wurde unter „file://e:\Alles Mögliche\Visual C++\Test\Release\BuildLog.htm“ gespeichert.
Test - 46 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


Ich habe keine Ahnung woran das liegt.

Bitte um Hilfe.

Freundliche Grüße
[EDIT: Name auf Wunsch entfernt]

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo!
Du bist sicher, dass es eine reine .NET Anwendung ist und keine C++/CLI?
Sprich: Lass’ bitte mal Code sehen, sonst tut man sich unheimlich schwer…
Eine Hypothese wäre, dass Du eben nicht nur .NET verwendest, sondern eine Anwendung erstellt hast, die auch die Visual C++ Runtime und / oder MFC verwendet und diese Komponenten nicht in der nötigen Version auf dem Zielrechner vorhanden sind.
Mit dem ganzen WinSxS-Gedöns ist es leider nicht mehr damit getan, einfach die entsprechenden mfc80.dll, msvcrt80.dll und wie sie alle heissen ins Win32-Verzeichnis des Zielrechners zu werfen, sondern da muss ein Installer her, in den Du dann die entsprechenden Merge Module (msm-Dateien) einbinden kannst.

Gruß,
Martin

Nachtrag:
Nachdem ich mir gerade jetzt doch das Video angeschaut habe, ist mir auch klar, warum Du jetzt die ganzen Fehlermeldungen bei der Verwendung der .NET Klassen bekommst. Wie dort beschrieben funktioniert das statische Binden an die MSVCRT nur ohne CLR-Unterstützung.
CLR Unterstützung heisst aber: .NET. Du sagst dem Compiler also: Nimm kein .NET, wunderst Dich dann aber, dass er die betreffenden Klassen anmeckert…
Das im Video ist also Pfusch (zumindest für Deinen Fall).
Bau Dir einen Installer, der die VCRT in der richtigen Version installiert und alles müsste gut sein.

Gruß,
Martin

Danke erstmal für die Antwort die war schonmal eine große Hilfe ich schicke hier mal den Code:

Form1.h:

#pragma once

namespace Test {

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::smiley:ata;
using namespace System::smiley:rawing;

///
/// Zusammenfassung für Form1
///
/// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch
/// die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,
/// das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.
/// Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen
/// arbeiten, die diesem Formular zugewiesen sind.
///
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: Konstruktorcode hier hinzufügen.
//
}

protected:
///
/// Verwendete Ressourcen bereinigen.
///
~Form1()
{
if (components)
{
delete components;
}
}

private:
///
/// Erforderliche Designervariable.
///
System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
///
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
///
void InitializeComponent(void)
{
this->components = gcnew System::ComponentModel::Container();
this->Size = System::smiley:rawing::Size(300,300);
this->Text = L"Form1";
this-&gt:stuck_out_tongue_winking_eye:adding = System::Windows::Forms::stuck_out_tongue:adding(0);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
}
#pragma endregion
};
}

Test.cpp:
#include „stdafx.h“
#include „Form1.h“

using namespace Test;

[STAThreadAttribute]
int main(array ^args)
{
// Aktivieren visueller Effekte von Windows XP, bevor Steuerelemente erstellt werden
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);

// Hauptfenster erstellen und ausführen
Application::Run(gcnew Form1());
return 0;
}

Das ist im Prinzip ein neues Projekt in Visual C++ 2008 Express Edition. Ich weiß jetzt nicht genau wo der Unterschied zwischen einer reinen .net Anwendung und einer C++/CLI Anwendung ist.
Ich glaube aber es ist eine C++/CLI Anwendung…

Wie genau würde man sich eine solche Installationsroutine bauen?

Freundliche Grüße
[EDIT: Name auf Wunsch entfernt]

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Marlo!
Erst mal danke für den Code, auch wenn das wirklich nur eine leere Windows Forms Applikation ist.
Du kannst die .NET Klassen nutzen, um die Anwendung zu erstellen. Dann bleibt es eine „reine“ .NET Anwendung.
Bei C++ kannst Du aber auch die bisherige Win32-API nutzen oder ATL oder MFC, alles in einem Projekt.
Jede dieser APIs benötigt eigene Laufzeit-DLLs.
C++ selbst die MSVCRTxx.dll. MFC die MFCxx.dll usw.
Das xx steht jeweils für eine Versionsnummer (bspw. mit VS2003 war es 7.1, mit VS2005 8.0 und mit VS2008 ist es jetzt 9.0).
Wenn eine der benötigten Runtime-DLLs nicht vorhanden ist, lässt sich die Anwendung auf dem Zielrechner nicht starten.
Bei einer C+±Anwendung wie der Deinen muss immer mindestens die MSVCRTxx.dll vorhanden sein, sonst geht gar nichts (und .NET, da Du es ja verwendest).

Die Aufgabe des Installationspakets ist u.a., auch die benötigten Laufzeitumgebungen zu installieren, falls sie auf dem Zielrechner noch nicht vorhanden sind.
Bei den Nicht-Express-Varianten gibt es auch explizite Projekttypen für die Erstellung von solchen Setups, bei VS2008 Express geht das leider nicht.
Du musst Dir also einen anderen Installer suchen (es gibt verschiedene, auch kostenlose, im Netz).
Zur Vereinfachung der Installation liegen meist sog. Merge Module (Dateien mit der Endung .msm) bei, die man bei den meisten Installern in die Installationspakete aufnehmen kann. Dort ist neben den eigentlichen Dateien hinterlegt, wohin sie installiert werden und was sonst noch bei der Installation gemacht werden muss (bspw. Registrierung von Komponenten).
Für die VC++ Runtime-Komponenten gibt es so ein Merge Modul, für MFC und ATL auch, aber ich weiss nicht, ob die irgendwo bei der Express-Version dabei sind.

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]