Problem mit Windows-Dienst
-
Hi
Hast du Admin-Rechte ?
lowbyte
-
Bevor ich jetzt über den Code fliege, was steht im EventLog?!
-
lowbyte_ schrieb:
Hi
Hast du Admin-Rechte ?
lowbyte
Ja!
-
secondsun schrieb:
Bevor ich jetzt über den Code fliege, was steht im EventLog?!
??
lowbyte
-
Ich will wissen was im EventLog steht. Ist doch nicht so schwer oder?! Kann ja sein, dass der Dienst startet aber sofort wieder abgebrochen wird. Sollte es so sein, dann erhoffe ich mir eine bestimmte Fehlermeldung.
-
Der Dienst "Beeper Service" ist als interaktiver Dienst gekennzeichnet. Das System wurde jedoch so konfiguriert, dass interaktive Dienste nicht möglich sind. Der Dienst wird möglicherweise nicht richtig funktionieren.
steht da.
-
Hi
Ich meinte auch skullyan !
Mit dem wollte ich nur sagen, dass ich das auch gerne wissen möchte bevor da behauptungen aufgestellt werden.lowbyte
-
Okay und nun?
-
Tut mir leid^^ War nicht so gemeint.
Versuch mal in der Install Funktion das hier:
SC_HANDLE service = CreateService(serviceControlManager, serviceName, serviceName, SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, path, 0, 0, 0, 0, 0 );
-
Achso, und das solltest du auch noch mal versuchen(ServiceMain):
serviceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
-
Hat leider nichts geändert. Ach und mein OS ist Windows7 x64.
-
Dann versuch mal bitte deine Aktivitäten (Beep) usw. in einen seperaten Thread zu verschieben(was sowieso immer gemacht werden sollte).
-
Hat auch nicht funktioniert...
DWORD WINAPI BEEP() { while(true) { Beep(250,250); } } void WINAPI ServiceMain( DWORD /*argc*/, TCHAR* /*argv*/[] ) { // initialise service status serviceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; serviceStatus.dwCurrentState = SERVICE_STOPPED; serviceStatus.dwControlsAccepted = 0; serviceStatus.dwWin32ExitCode = NO_ERROR; serviceStatus.dwServiceSpecificExitCode = NO_ERROR; serviceStatus.dwCheckPoint = 0; serviceStatus.dwWaitHint = 0; serviceStatusHandle = RegisterServiceCtrlHandler( serviceName, ServiceControlHandler ); if ( serviceStatusHandle ) { // service is starting serviceStatus.dwCurrentState = SERVICE_START_PENDING; SetServiceStatus( serviceStatusHandle, &serviceStatus ); // do initialisation here stopServiceEvent = CreateEvent( 0, FALSE, FALSE, 0 ); // running serviceStatus.dwControlsAccepted |= (SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN); serviceStatus.dwCurrentState = SERVICE_RUNNING; SetServiceStatus( serviceStatusHandle, &serviceStatus ); CreateThread(0,0,LPTHREAD_START_ROUTINE(BEEP),0,0,0); do { Beep( 1000, 100 ); } while ( WaitForSingleObject( stopServiceEvent, 5000 ) == WAIT_TIMEOUT ); // service was stopped serviceStatus.dwCurrentState = SERVICE_STOP_PENDING; SetServiceStatus( serviceStatusHandle, &serviceStatus ); // do cleanup here CloseHandle( stopServiceEvent ); stopServiceEvent = 0; // service is now stopped serviceStatus.dwControlsAccepted &= ~(SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN); serviceStatus.dwCurrentState = SERVICE_STOPPED; SetServiceStatus( serviceStatusHandle, &serviceStatus ); } }Ich verzweilfe langsam..
-
Hi
CreateThread(0,0,LPTHREAD_START_ROUTINE(BEEP),0,0,0);Das sollte so aussehen :
DWORD WINAPI BEEP() { while(true) { Beep(250,250); } } CreateThread(0,0,BEEP,0,0,0);lowbyte
-
lowbyte_ schrieb:
Hi
CreateThread(0,0,LPTHREAD_START_ROUTINE(BEEP),0,0,0);Das sollte so aussehen :
DWORD WINAPI BEEP() { while(true) { Beep(250,250); } } CreateThread(0,0,BEEP,0,0,0);lowbyte
Normalerweise geht beides.
-
Hat es vlt. mit der Session 0 Isolation ab Vista zu tun?
-
Hmm..sehr komisch. Also dein Dienst läuft bei mir. Habe zwar auch Win7 aber nur 32Bit. Ich werde da aber nochmal nachhaken.. nteressiert mich nämlich auch;-)
-
secondsun schrieb:
Hmm..sehr komisch. Also dein Dienst läuft bei mir. Habe zwar auch Win7 aber nur 32Bit. Ich werde da aber nochmal nachhaken.. nteressiert mich nämlich auch;-)
Echt? Bei dir piept es?
-
Hi
Zuerst informiere Dich mal hier.
http://msdn.microsoft.com/en-us/library/ms687098(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms681928(v=VS.85).aspxint interaction(void) { HWINSTA m_hWinsta; HDESK m_hDesk; /* Interaction -------------------------------------------- */ m_hWinsta = OpenWindowStation("winsta0", FALSE, WINSTA_ACCESSCLIPBOARD | WINSTA_ACCESSGLOBALATOMS | WINSTA_CREATEDESKTOP | WINSTA_ENUMDESKTOPS | WINSTA_ENUMERATE | WINSTA_EXITWINDOWS | WINSTA_READATTRIBUTES | WINSTA_READSCREEN | WINSTA_WRITEATTRIBUTES ); if(m_hWinsta == NULL) { printf("error"); return 1; } SetProcessWindowStation(m_hWinsta); m_hDesk = OpenInputDesktop( DF_ALLOWOTHERACCOUNTHOOK, FALSE, DESKTOP_CREATEMENU | DESKTOP_CREATEWINDOW | DESKTOP_ENUMERATE | DESKTOP_HOOKCONTROL | DESKTOP_JOURNALPLAYBACK | DESKTOP_JOURNALRECORD | DESKTOP_READOBJECTS | DESKTOP_SWITCHDESKTOP | DESKTOP_WRITEOBJECTS ); if(m_hDesk == NULL) { printf("error"); return 1; } SetThreadDesktop(m_hDesk); return 0; }lowbyte
-
Hab es nun mit nem anderen Code gelöst.
Quelle:
http://www.codeproject.com/KB/system/xyntservice.aspx
(Sehr empfehlenswert)