Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Service - TrayIcon Problem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
11.11.2004, 10:33 Uhr
Ric



Hi,

ich habe ein Problem mit meinem Service. Über ein TrayIcon kann ich ihn starten und stoppen. Aber jedesmal, wenn ich ihn stoppen will, erscheint genau an dieser Stelle das Trayicon nocheinmal, und wenn ich mit der Maus darüber fahre, verschwindet es wieder.


C++:
if (!ControlService(hdlServ, SERVICE_CONTROL_STOP, &ServStat)) Ret = ::GetLastError()



Weiß vielleicht jamand, woran das liegen könnte? Das "richtige" TrayIcon wird nach dem Beenden korrekt gelöscht, nur habe ich dann das zweite immernoch da.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.11.2004, 14:04 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


eventuell erstellst du beim "Control-Stop" senden ein weiteres Icon, danach löscht du das 2te, dein Programm beendet sich und das 1ste bleibt bestehen (bzw das erste wird korrekt gelöscht und das 2te bleibt stehen)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.11.2004, 15:37 Uhr
Ric



Ich verstehe nur nixht, wie das von statten gehen soll.
Meine Stop Funktion sieht so aus:


C++:
DWORD cService::Stop()
{
    m_bStopFlag = true;

    SC_HANDLE hdlSCM = OpenSCManager(0, 0, STANDARD_RIGHTS_REQUIRED);

    if (!hdlSCM) return ::GetLastError();

    SC_HANDLE hdlServ = OpenService(hdlSCM, ServiceName, SERVICE_STOP);

    SERVICE_STATUS ServStat;
    DWORD Ret = 0;
    if (!ControlService(hdlServ, SERVICE_CONTROL_STOP, &ServStat)) Ret = ::GetLastError();
    
    CloseServiceHandle(hdlServ);

    return Ret;
}



und jedesmal an dieser Stelle:


C++:
if (!ControlService(hdlServ, SERVICE_CONTROL_STOP, &ServStat)) Ret = ::GetLastError();



bringt er mir wieder ein zweites Icon. Sobald ich mit der Maus darüber fahre, verschwindet es wieder

Rico
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.11.2004, 15:53 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


wo erstellst du das icon, an welcher stelle
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.11.2004, 16:34 Uhr
Ric



Der Hinweis hat mir schon gelangt, danke. Habe mir eine kleine Oberfläche gebastelt, und das TrayIcon in OnInitDialog erstellt,

und da habe ich ganz am Anfang


C++:
...
    CString Out;
    //kompletter Pfad zur *.exe Datei
    CString Calling = GetCommandLine();        
    BOOL bService  = (Calling.Right(7) == "Service");
    CString ExeType = (bService) ? "Service: " : "Main Program: ";

    if (bService) // nur Service
    {
        gService.Dispatch(); // kehrt erst zurück, wenn Service angehalten wird

        EndDialog(0); // beendet Service Programm
    }
...



stehen und danach erst das Icon hinzugefügt.
Habe es dort mal rausgenommen und erstelle es erst, wenn der User das Fenster minimieren will. Klappt jetzt einwandfrei.

Ric
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: