ExtractFilePath wird nicht akualisiert? Selbstgeschriebene Funktion wo liegt der Fehler..



  • Hi ich poste hier mal meine Funktion wenn ihr wollt könnt ihr ja ma reingucken und vieleicht fällt euch ein Fehler auf.

    Das Programm sollte beim Start prüfen ob es in einem bestimmten ordner is und wenn es nicht von da gestartet wurde dann soll es sich dort hinkopieren und starten. In dem Beispiel hab ich einfach ma den Windows ordner genommen. Wenn ich den code ausführe startet sich das programm permanent neu und zeigt immer die meldung an "kein windows". Weiß nicht wo der fehler liegt und ich sehe auch ehrlich keinen kann mir nur vorstellen, dass mit ExtractFilePath was nicht stimmt. Denn wenn ich das Programm erstelle und manuel in den ordner tue und starte dann zeigt es an, dass es im richtigen ordner is und alles läuft prima. Wäre dankbar für hilfe oder tipps wie ich vieleicht ExtractFilePath ersetzen könnte durch einen ähnlichen befehl...

    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    
     AnsiString win32, win, win34;
     Boolean copied;
     win=ExtractFilePath(Application->ExeName);
     win32= ExtractFileDrive(Application->ExeName) ;
     win34=win32+ "/WINDOWS" + "/svchost.exe";
    
    if (win==win32 + "\\WINDOWS")
    {
    Application->MessageBoxA("windows",0,0);
    }
    else{
     Application->MessageBoxA("Kein windows",0,0);
     CopyFileTo(Application->ExeName,win32+ "/WINDOWS" + "/svchost.exe" ); copied;
      if (copied!=true)
      {
      DeleteFile(win32+ "//WINDOWS" + "/svchost.exe" );
      CopyFileTo(Application->ExeName,win32+ "//WINDOWS" + "/svchost.exe" ) ;
    }
    ShellExecute(0, "open", win34.c_str(), 0, 0, SW_SHOWNORMAL);
    }
    
    }
    


  • Hallo

    dann benutzt doch mal deinen Debugger und verfolge den Verlauf deines Programms.
    Insbesondere diesen Vergleich und desen Variablenwerte :

    if (win==win32 + "\\WINDOWS")
    

    Desweiteren ist das hier ein (Schreib-)Fehler

    CopyFileTo(Application->ExeName,win32+ "/WINDOWS" + "/svchost.exe" ); copied;
      if (copied!=true)
    

    bis bald
    akari



  • if (win==win32 + "\\WINDOWS")
    

    Diese Zeile habe ich so geschrieben weil wenn ich nur einn Backslash benutze dann wird dieses nicht angezeigt (z.B. in nem Label) und bei 2 steht da ein backslash weiß auch nicht warum.
    mfg max



  • Und bei der FileCopyTo-Funktion steht zwar in der Borlandhilfe mann soll es so schreiben:

    CopyFileTo(Application->ExeName,win32+ "/WINDOWS" + "/svchost.exe" ): copied;
      if (copied!=true)
    

    Also ein ":" statt dem ";" vor dem cpoied aber dann spuckt der Debugger aus

    [C++ Error] Unit1.cpp(79): E2379 Statement missing ;
    

    mh... glaube habe die Syntax der Funktion noch nicht ganz gerafft.
    mfg max



  • Sorry will keineswegs spammen hab mich auch ma registriert oder eingeloggt dann kann ich meine post wieder editierenals immer ein neuen beitrag zu schreiben.
    Also das mit dem Syntax hab ich hinbekommen musste ein komma statt nem : hin.
    So das andere ist mir jedoch noch ein Rätsel wer ma debuggen..
    mfg max



  • Hallo

    ich weiß ja nicht wo du

    CopyFileTo(Application->ExeName,win32+ "/WINDOWS" + "/svchost.exe" ): copied;
      if (copied!=true)
    

    herhaben willst, aber das ist eine ungültige Syntax.
    Weder mein BCB5 noch die MSDN kennt CopyFileTo

    So ist das richtig :

    if (!CopyFileTo(Application->ExeName,win32+ "/WINDOWS" + "/svchost.exe" ))
    

    bis bald
    akari



  • Sehe ich das richtig, dass du dem Nutzer eine neue svchost.exe unterschieben willst? Was könnte es dafür für einen Grund geben??

    Du hast bedacht, dass die u.u. läuft?



  • Die Funktion CopyFileTo steht aber in meiner bcb-hilfe.

    Copies the source file to the destination file.
    
    function CopyFileTo(const Source: string; const Destination: string): Boolean;
    
    Parameters
    
    const Source: string
    
    Source file name.
    
    const Destination: string
    
    Destination file name.
    
    Returns
    
    Boolean - True if the file is copied, False on error.
    
    Description
    
    CopyFileTo is a function used to copy the file specified in Source to the file specified in Destination.
    CopyFileTo will return False if the file in Destination already exists.
    CopyFileTo encapsulates the platform-specific calls needed to perform the file copy operation. On the Windows platform, this is the Win32 API function CopyFile. On the Linux platform, CopyFileTo uses a TFileStream instance to create the destination file.
    

    Und außerdem hab ich die Syntax verbessert. So siehts dann richtig aus:

    CopyFileTo(Application->ExeName,win32+ "/WINDOWS" + "/svchost.exe" ), copied;
      if (copied!=true)
      {//befehle
    

    Das andere problem verstehe ich jedoch nicht recht...

    ps: was heißt u.u?
    mfg max



  • Dein Hilfetext ist aber kein C++ sondern Pascal. Vielleicht solltest du mal in die richtige Hilfe schauen.



  • Entschuldige es steht doch ganz klar in der Hilfe das Boolean der Rückgabewert ist, also der Datentyp, den die Funktion zurückgibt.

    Das heißt also du musst das ganze, wenn schon, so schreiben:

    bool copied;
    copied=CopyFileTo(Application->ExeName,win32+ "/WINDOWS" + "/svchost.exe" );
    if(copied!=true)
    {
    //Befehle
    }
    

    Um das Mal klar zu stellen.



  • Naja, das hier würde es auch tun

    if(!CopyFileTo(Application->ExeName,win32+ "/WINDOWS" + "/svchost.exe" ))
    {
    //Befehle
    }
    

    CopyFileTo kommt übrigens von Indy.



  • Danke für die Hilfe ich trottel guck in die hilfe für Pascal...
    Naja die Funktion funktioniert komischer weise trotzdem aber der Fehler ist der gleiche wie am Anfang. mhh... is irgendwie merkwürdig
    mfg max



  • Wie wärs, wenn du dir deine ganzen Strings mal ausgeben lässt um nachzuschauen was da drin steht. Desweiteren schau dir auch mal die Ergebnisse der verschiedenen Extract-Funktionen an.
    z.Bsp. liefern ExtractFileDir und ExtractFilePath im allgemeinen nicht denselben String bei gleichem Argument.


Anmelden zum Antworten