Windows 7 verweigert sämtliche Funktionen (_mkdir, CopyFile, RegOpenKeyEx)



  • Hallo allerseits 😉
    Ich habe ein Problem und zwar erledigt mein Programm die Aufgaben nicht die es eigentlich hätte tun sollen. Ich plane einen Server und scheitere bereits an der "Installation". Wenn das Programm gestartet wird soll ein Ordner angelegt werden, der Server da hinein kopiert werden und einen Reg eintrag zum automatischen starten geschrieben werden aber all dies tut er nicht und ich weiß nicht warum!

    #include <direct.h>
    #include <cstdlib>
    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    int main(void) {
        HKEY key;
    
        FILE *datei;
    
        //Prüfen ob Server bereits installiert
        if((datei = fopen("C:\\Programme\\MeinServer\\server.exe", "rb")) == NULL) {
            //Verzeichnis erstellen
            if(_mkdir("C:\\Programme\\MeinServer\\") != -1) {
                CopyFile("server.exe", "C:\\Programme\\MeinServer\\server.exe", 0);
            }
            //Eintrag in Regestry
            RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_ALL_ACCESS,&key);
            RegSetValueEx(key,"Server",0,REG_SZ,(BYTE*)"C:\\Programme\\MeinServer\\server.exe",200);
            RegCloseKey(key);
        }
    
        system("pause");
    }
    

    Beim erstellen des Ordners wird immer -1 ausgegeben aber warum hat das vielleicht etwas mit den Rechten zu tun? Arbeite aber als Administrator.

    Gruß



  • Hab einen Fehler gemacht nicht

    if(_mkdir("C:\\Programme\\MeinServer\\") != -1) {
    

    sondern

    if(_mkdir("C:\\Programme\\MeinServer") != -1) {
    


  • Geht aber immer noch nicht 😞
    Kann mein seine Beiträge auch editieren?



  • Serverprojekt schrieb:

    Kann mein seine Beiträge auch editieren?

    Wenn man sich registriert und als registrierter User postet.



  • Zudem nutzt man in C++ fstreams ...



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    Wie kommst Du darauf, dass Du einfach so mit einem Programm in jedes beliebige Verzeichnis schreiben kannst!

    C:\Programme ist durch Windows geschützt. Dazu muss Dein Programm als Admin laufen.
    Stelle Dein Manifest auf RequireAdministrator.

    BTW: die CRT hat eine Variable errno. Damit kannst Du den Grund des Fehlers erkennen...



  • EOutOfResources schrieb:

    Zudem nutzt man in C++ fstreams ...

    Thema verfehlt, Herr C++-Polizist ....



  • Weiters solltest du den Pfad auf das "Programme" Verzeichnis nicht hardcoden (gibt eine Umgebungsvariable dafür).

    Wozu überhaupt einen Installer für einen Server schreiben?

    Ich "installiere" meine Server immer mit "Files im Explorer kopieren" + "Service mit sc.exe registrieren".



  • Erstens das Verzeichnis heißt "Program Files" und zweitens Warum nutzt du nicht FindFirstFile, um zu gucken, ob die Datei existiert?



  • Zu all den genannten Problemen kommt noch die Tatsache hinzu, dass die Header-Datei nicht direct.h sondern dirent.h heißt - und allein deswegen wirst du beim Zugreifen auf Verzeichnisse scheitern. Zweitens, ich habe nicht im Kopf, wie die Datei aussieht, aber es kann sein, dass du noch cstdio bzw. stdio.h inkludieren musst.



  • [Rewind] schrieb:

    Zu all den genannten Problemen kommt noch die Tatsache hinzu, dass die Header-Datei nicht direct.h sondern dirent.h heißt - und allein deswegen wirst du beim Zugreifen auf Verzeichnisse scheitern. Zweitens, ich habe nicht im Kopf, wie die Datei aussieht, aber es kann sein, dass du noch cstdio bzw. stdio.h inkludieren musst.

    Jetz schreibst Du ein bisschen Quark zusammen. Klar heisst das Header-File direct.h! http://msdn.microsoft.com/en-us/library/2fkk4dzw%28v=vs.71%29.aspx



  • Danke schon mal wie kann man das mit der Manifest machen?


Anmelden zum Antworten