Name der Augabedatei in Visual Studio
-
WER startet das?
-
Das startet meine andere MFC Anwendung.
-
Ok. Folgendes habe ich noch herausgefunden. Dazu muss ich vieleicht noch genauer den Sachverhalt beschreiben. Die genannte .exe wird aus einer von mir erstellten DLL gestartet. Wenn ich diese DLL in einer weiteren MFC exe einbinde und die Funktion zum starten der eventmonitor.exe aufrufe, stimmt der Name. Wenn ich die DLL allerdings in eine nicht MFC Anwendung verwende und die Funktion aufrufe, erhalte ich den namen im 8.3 Format.
-
Debugge halt mal bis zu der "CreateProcess" stelle und schaue nach, ob dort der 8.3 Name übergeben wird...
-
Das war bisher die schwierigkeit aus der fremden Anwendung raus zu debugen. Jetzt hat es aber geklappt. Vorher wird die Funktion FindExecutable() die wiederum im Paramter die exe im 8.3 Format zurückliefert. So jetzt muss ich nur noch wissen wie ich das umgehe?
-
Du hast vermutlich den ShortFileName in der Registry als Namen für die EXE eingetragen! (IMHO macht das die MFC automatisch, oder Martin?)
-
Ich habe jetzt die Funktion FindExecutable rausgenommen und den Namen richtig an CreateProcess übergeben. Trotzdem steht der abgekürzte Name im Taskmanager.
ShortFileName in der Registry?? nein also explizit habe ich da gar nichts gemacht.
Martin? Wer ist Martin?
-
Jochen Kalmbach schrieb:
Du hast vermutlich den ShortFileName in der Registry als Namen für die EXE eingetragen! (IMHO macht das die MFC automatisch, oder Martin?)
Jupp! CDocManager::RegisterShellFileTypes verwendet AfxGetModuleShortFileName.
-
Das ist der Martin-MFC-Guru!
-
Hallo
Achso jetzt steh ich gerade auf der Leitung. Was muss ich da nun wo einstellen.
-
Nix... was stört Dich denn an dem kurzen Namen?
-
Ich habe das Problem, dass ich den Prozess zuerst suche wenn dieser nicht läuft wird er neu getartet. Aber wenn er immer einen anderen Namen hat ist es nicht einfach nach ihm zu suchen.
-
Dann such halt nach dem langen *und* dem kurzen Namen! (GetShortpathName!)
http://msdn.microsoft.com/en-us/library/aa364989.aspxPS: Die *beste* lösung ist ein Mutex zu nehmen (such mal nach "single instance process")
http://www.bing.com/search?q=single+instance+process+mutex+site%3Acodeproject.com
-
Na super wieder total kompliziert.
-
1. Ist das Dein Prozess, den Du startest? Wnen ja warum verwendest Du nicht in diesem Fall COM und die ROT?
2. Kann man eben eine Prozess unter kurzem und langen Namen starten!
3. Wie statest Du den Prozess? Darauf hast Du noch nciht geantwortet.
-
MFC Man schrieb:
Na super wieder total kompliziert.
Das nennst Du kompliziert!? Das ist ungefähr ein 3-Zeiler...
-
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 !?