Ergebnis 1 bis 10 von 10
  1. #1
    Michelangelo Virus Avatar von Chris K.
    Registriert seit
    31.01.2007
    Beiträge
    275

    Standard sich selber kopieren

    ich möchte gerne das sich meine programm von alleine in z.B. den ordner C:\Programme kopiert wie mach ich das es soll funktionieren egal in welchem ordner sich das prog befindet laso wenn es auf dem desktop ist soll es sich nach C:\Programme und auch wenn es z.b. in eigene dateien is soll es sich nach C:\Programme, es soll unabhängig vom speicherort funktionieren und sich selber kopieren.

    Kann vllt. jemand helfen

  2. #2
    Fortgeschrittener
    Registriert seit
    30.09.2007
    Beiträge
    35

    Standard

    Falls es um Autostart usw. geht -> Registry. Ansonsten, falls es darum geht, dass du die laufende .exe nicht kopieren kannst, binde sie als Resource ein, extrahiere sie, und kopiere sie mit CopyFile oder einer Kopierfunktion deiner Wahl in den gewünschten Ordner.

    (Geht sicher einfacher, aber mir fällt gerade nichts Besseres ein. )
    Yep, I fap to Reese Witherspoone. :_D

  3. #3
    DateMake Dialer
    Registriert seit
    17.08.2007
    Beiträge
    102

    Standard

    Code:
    char pfad[500];
    char ziel[500];
    HMODULE hMe = GetModuleHandle(NULL);      
    DWORD nRet = GetModuleFileName(hMe, pfad, 256); //Ermittel Pfad der Anwendung
    strcpy (ziel,"C:\\Programme\\Test.exe"); //Lege Ziel Pfad Fest
    CopyFile(pfad,ziel,0);  //Programm wird auf C:\Programme kopiert unter dem Namen Test.exe

  4. #4
    Michelangelo Virus
    Registriert seit
    14.06.2007
    Beiträge
    282

    Standard

    Schade dass die C++ FAQ ignoriert wird, aber weil dus bist.

    Erst suchen wir das Verzeichnis in dem sich unser zu kopierendes Programm versteckt. Das geht mit GetModuleFileName

    also

    Code:
    char Filepath[MAX_PATH+2];
    GetModuleFileName(NULL,Filepath, MAX_PATH);
    so jetzt haben wir den Pfad IN Filepath gespeichert, der sieht bespielsweise so aus: C:\Programme\dein_programm.exe

    wenn man es jetzt in den system32 ordner verschieben will, brauchen wir noch den Pfad. Dafür schreiben wir

    Code:
    char target[MAX_PATH+2];
    GetSystemDirectory(target, MAX_PATH);
    so jetzt haben wir den Pfad vo system32, der sieht jetzt beispielsweise so aus: C:\WINDOWS\system32
    wir brauchen aber mehr, der Pfad muss so aussehen, C:\WINDOWS\system32\dein_programm.exe oder ein x-belibieger Name.
    das machen wir so

    Code:
    char* target_+ = strcat(target, "\\dein_programm.exe");
    Jetzt haben wir den pfad wie wir ihn brauchen, willst du jetzt aber in einen andere Ordner kopieren kannst du auch sofort einen char array mit dem benötigten pfad anlegen. Jetzt gehts ans kopieren, das machen wir mit CopyFile

    Code:
    Copyfile(Filepath, target_+, false);
    achja das false in CopyFile besagt, dass wenn eine datei mit diesem namen schon besteht die datei überschriben wird.


    So ne Hilfe bekommt man nicht alle Tage:lol: , das ist schon fast Tutorialfähig.

    mfg

    Zao
    Write the code correctly and it will compile

  5. #5
    CIH-Virus Avatar von -[RiDER]-
    Registriert seit
    05.01.2007
    Beiträge
    496

    Standard

    Zitat Zitat von zao
    Erst suchen wir das Verzeichnis in dem sich unser zu kopierendes Programm versteckt. Das geht mit GetModuleFileName

    also

    Code:
    char Filepath[MAX_PATH+2];
    GetModuleFileName(NULL,Filepath, MAX_PATH);
    so jetzt haben wir den Pfad IN Filepath gespeichert, der sieht bespielsweise so aus: C:\Programme\dein_programm.exe
    Im Normalfall haste unter windows (afaik) den programmpfad + dateiname in argv[0].
    Korrigiert mich bitte, wenns falsch is.

    MfG RiDER

  6. #6
    I'm in ur VM. Avatar von l0dsb
    Registriert seit
    23.07.2007
    Beiträge
    1.038

    Standard

    Zitat Zitat von -[RiDER
    -]Korrigiert mich bitte, wenns falsch is.
    Habs jetzt nicht getestet, aber ich denke, das zao von einer Win32-Anwendung ausgeht? Also mit so einem EntryPoint:

    Code:
    int __stdcall WinMain(HINSTANCE__ *Instance, HINSTANCE__ *Previous, char *CmdLine, int CmdShow)
    {
    //...
    return 0;
    }
    Da gibt es kein argv, wie in einer Konsolenanwendung, und soweit ich weiß ist CmdLine kein 100%iges Äquivalent, sprich dort werden wirklich nur die Parameter gespeichert.
    I can haz RCE?

  7. #7
    W32.Lovgate
    Registriert seit
    01.07.2007
    Beiträge
    354

    Standard

    binde sie als Resource ein
    wie geht das?

  8. #8
    I'm in ur VM. Avatar von l0dsb
    Registriert seit
    23.07.2007
    Beiträge
    1.038

    Standard

    Manuell mit so ziemlich jedem Ressourceneditor, programmiertechnisch mit der WinApi (siehe MSDN, bzw. Google).

    /edit: Stell evtl. noch C++-Source rein, wenn gewünscht.
    I can haz RCE?

  9. #9
    W32.Lovgate
    Registriert seit
    01.07.2007
    Beiträge
    354

    Standard

    ja, ist gewünscht, denn von ressourcen habe ich überhaupt keine Ahnung.

  10. #10
    I'm in ur VM. Avatar von l0dsb
    Registriert seit
    23.07.2007
    Beiträge
    1.038

    Standard

    ]=-antr4xx-=[

    Warte, bis der C++-Wettbewerb zu Ende ist, dann hast du einen guten Beispielsource.
    I can haz RCE?

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •