Name der Augabedatei in Visual Studio



  • 1. Ist das Dein Prozess, den Du startest? Wenn ja warum verwendest Du nicht in diesem Fall COM und die ROT?

    Es ist mein Prozess. Was ist ROT?. Und was bringt mir das über COM zu starten?

    2. Kann man eben eine Prozess unter kurzem und langen Namen starten!

    Ja, habe aber wie gesagt den Prozess auf beide Arten gestartet und er erscheint immer unter dem kurzen Namen

    3. Wie statest Du den Prozess? Darauf hast Du noch nciht geantwortet.

    Doch habe ich. Mit dem Befehl CreateProcess(), und wie gesagt mit kurzem oder langem Namen.



  • Das nennst Du kompliziert!? Das ist ungefähr ein 3-Zeiler...

    Was ist ein 3-Zeiler dass mit Mutex oder GetShortpathName() bei dem man wieder buffer allokieren muss.



  • Jetzt funktioniert es auch nicht mehr aus MFC heraus?



  • Ich habe nun die Funktion: GetShortpathName verwemdet

    TCHAR szShortName[_MAX_PATH]; 
    GetShortPathName(strExeFile, szShortName, _MAX_PATH-1);
    CString strShortName = szShortName;
    strShortName.MakeUpper();
    

    In szShortName steht nun allerdings nichts definiertes drin !?



  • 1. Rückgabewerte auswerten
    2. Ganzer Pfad zur EXE muss vorhanden sein
    3. Verwende ein Mutex...



  • If the function fails for any other reason, the return value is zero (0). To get extended error information, call GetLastError.

    Diesen Hinweis sollte man vielleicht mal ganz oben anpinnen.



  • Klar. Nur wenn ich bei strExeFile den ganzen Pfad angebe erhalte ich den zugehörigen shortname. Ich weiß den ganzen Pfad aber nicht. Grund die Exe kann von überall gestartet sein. Nur wenn sie nicht gestartet ist will ich sie neu starten.

    Kann mir noch jemand helfen



  • MFC Man schrieb:

    Kann mir noch jemand helfen

    Ich finde, Dir wurde schon genügend geholfen... verwende ein Mutex....

    Also, weil Du es bist:

    Schreib den Folgenden Code in "InitInstance" rein:

    HANDLE prevInstance;
    DWORD dwLastError;
    prevInstance = CreateMutex (NULL, FALSE, _T("GENERATED GUID OR SOMETHING ELSE THAT MAY BE UNIQUE"));
    if (prevInstance == NULL)
    {
       AfxMessageBox (_T("Can't create mutex!"));
       return FALSE;
    }
    dwLastError = GetLastError ();
    if (dwLastError == ERROR_ALREADY_EXISTS)
    {  
      if (prevInstance != NULL)  
      {      
        CloseHandle (prevInstance);      
        prevInstance = NULL;  
      }  
      return FALSE;  //don't start 2nd instance
    }
    

    Für eine extravagante Version siehe:
    http://www.naughter.com/sinstance.html



  • Moment entweder hast du nicht verstanden was ich will oder ich steh gerade auf dem Schlauch. Es war doch noch nie die Rede dass ich meine Applikation nur einmal starten will. Meine Anforderung war, einen Prozess zu starten wenn er noch nicht läuft. Das heißt: Mehrmals möglich aber mindesten 1 mal benötigt.



  • Hä? Ich verstehe Dich nicht...

    Was heisst denn "Mehrmals möglich aber mindesten 1 mal benötigt."?

    Für mich bedeutet das: Starte einfach den Prozess... es spielt ja keine Rolle, wie oft er läft...

    Oder hast Du Dich doch falsch ausgedrückt...



  • Also. Dieses Programm nimmt Nachrichten von einem anderen Programm entgegen. Wenn das zu empfangende Programm nicht gestartet ist wird es vom sendenden Programm gestartet. Das Programm soll dabei aber nur einmal gestartet werden, sonst habe ich nach 100 Nachrichten 100 mal das Programm geöffnet. Allerdings soll es möglich sein dass der Anwender das Programm auch z.B. 2 mal starten kann.


Anmelden zum Antworten