Konsole nicht anzeigen unter NT
-
Vielen Dank schonmal für den Tip mit dem leeren Projekt.
Habe eins erstellt und eine neue CPP-Datei mit WinMain hinzugefügt.
Jetzt läuft es komplett ohne Konsole, allerdings immer noch nicht unter NT.
Erste fehlte mscoree.dll und dann ein Eintrag in der Registry mit Pfad zum .Net-Framework.
-
kann sein, dass ichs überlesen habe aber falls du Dev-C++ verwendest, da habe ich schonmal bei den Projekt-Optionen gesehen, dass man einfach das Fenster nicht compilieren lässt.
D.h. er dürfte es einfach nicht einbauen, habs net ausprobiert aber dürfte klappen... schau einfach mal in die Optionen falls du Dev-C++ nimmst.
-
@Auron
Ja du hast es überlesen. Er hat VS.NET => Visual Studio .NET von M$@Tody
Registryeinträge würde ich vermeiden, benutze lieber die Umgebungsvariable PATH. Diese kannst du auch leicht aus deinem Programm heraus setzen, wenn nötig.Welche Funktionen nutzt du eigentlich? Vielleicht verwendest du ja eine besondere WinAPI, die erst ab Win2k eingeführt wurde. Es kann aber auch an einem Übergabeparameter an eine Funktion bzw. WinAPI liegen. Es gibt übrigens auch eine WinAPI, mit der man das Betriebssystem ermitteln kann.
Um den Fehler am besten rauszufinden, wäre es gut, wenn du auf einem NT-System eine entsprechende Entwicklungsumgebung mit Debugger hättest, dann kannst du nämlich leichter den Fehler eingrenzen.
-
Hi, danke schonmal für die Tips. Das hier ist mein Code, ich hoffe, es ist nicht zu viel und nicht zu chaotisch.
#include <stdio.h> #include <windows.h> #include <winnetwk.h> // Prototypes DWORD Connect(); DWORD DisConnect(); int StartExe(TCHAR file[MAX_PATH]); // Global Variables TCHAR remote[MAX_PATH] = "\\\\192.168.99.33\\freigabe$"; TCHAR user[32] = "user"; TCHAR pass[32] = "passwort"; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { DWORD err; if ((err = Connect()) == NO_ERROR) { CreateDirectory("Pfad", NULL); if (CopyFile("Pfad\Datei", "Pfad\Datei", FALSE)) { //StartExe("Pfad\Datei"); //Sleep(1000); //StartExe("Pfad\Datei"); //Sleep(30000); } if (DisConnect() != NO_ERROR) { MessageBox(NULL, "Fehler beim Trennen", "Inventory", MB_OK); } } else { MessageBox(NULL, "Error", "Inventory", MB_OK); } return 0; } // Function Connect DWORD Connect() { NETRESOURCE netresource; netresource.dwType = RESOURCETYPE_DISK; netresource.lpLocalName = NULL; netresource.lpRemoteName = remote; netresource.lpProvider = NULL; DWORD result = WNetAddConnection2( &netresource, // points to structure that specifies connection details pass, // points to password string user, // points to user name string FALSE); // set of bit flags that specify // connection options return result; } // Function Disconnect DWORD DisConnect() { DWORD result = WNetCancelConnection2( remote, // pointer to resource name to disconnect 0, // connection type flags 1); // flag for unconditional disconnect return result; } // Function StartExe int StartExe(TCHAR file[MAX_PATH]) { int result = WinExec(file, SW_HIDE); return result; }
-
Weißt du an welcher Stelle genau, das Problem auftritt bei NT? Kommt eigentlich irgendeine Fehlermeldung?
-
Wenn ich das Programm unter NT ausführe kommen folgende Meldungen:
- Die DLL mscoree.dll wurde nicht gefunden
wenn ich diese dll nach C:\WinNT\System kopiere (von XP), kommt diese Meldung:
- .Net Framework installation Error.
Please set Registry-Key ...
-
Wenn du eine .lib Version der DLL hast, dann würde ich diese einfach kurzerhand ins Projekt einbinden und die Sache ist gegessen.
Welche der drei WinAPI-Funktionen, die du verwendest, sind in dieser dll?
-
Wo finde ich denn so was raus? Ich bin noch nicht so fit in C++.
Ich habe folgende Infos aus der MSDN-Library:
- CreateDirectory(), CopyFile() und WinExec() sind in der Kernel32.lib
- WNetAddConnection2() und WNetCancelConnection2() sind in der Mpr.lib
- MessageBox() ist in der User32.libDie sind alle eingebunden.
Wozu die mscoree.dll und der Reg-Key zum .Net-Framework benötigt wird weiß ich nicht.
-
Wofür brauchst du eigentlich die winnetwk.h?? Du hast das Programm mit VS.NET erstellt, richtig? Welches Projekt hast du da ausgewählt? Evtl. liegts auch einfach daran.
-
Ich habe ein verwaltetes leeres Projekt ausgewählt.
Die <winnetwk.h> brauch ich für WNetAddConnection2 und WNetCancelConnection2.Ich muss mal die Projekteigenschaften auf den Kopf stellen. Vielleicht gibts da irgendwelche komischen Voreinstellungen.