|
I am using visual studio 2005 and i am trying to write a windows service which will basically check whether a particular exe is running or not.
I have down loaded a sample code and created a service called "Service1" and i am able to successfully install and uninstall the service in to my windows XP machine with service pack 2.
Problem:
I cant start the service from the win service list and i am getting an error message as below.
Could not start service on the local system.
ERROR 1053:The service did not respond to the start or control request in a timely fashion.
Below is my service code
#include "stdafx.h"
#include "Windows.h"
#include "Winsvc.h"
#include "time.h"
#include "tlhelp32.h"
SERVICE_STATUS m_ServiceStatus;
SERVICE_STATUS_HANDLE m_ServiceStatusHandle;
BOOL bRunning=true;
void WINAPI ServiceMain(DWORD argc, LPTSTR *argv);
void WINAPI ServiceCtrlHandler(DWORD Opcode);
BOOL InstallService();
BOOL DeleteService();
bool isExeRunning(WCHAR *zExeName, bool *pbRunning);
int main(int argc, char* argv[])
{
if(argc>1)
{
if(strcmp(argv[1],"-i")==0)
{
if(InstallService())
printf("\n\nService Installed Sucessfully\n");
else
printf("\n\nError Installing Service\n");
}
if(strcmp(argv[1],"-d")==0)
{
if(DeleteService())
printf("\n\nService UnInstalled Sucessfully\n");
else
printf("\n\nError UnInstalling Service\n");
}
else
{
printf("\n\nUnknown Switch Usage\n\nFor Install use Srv1 -i\n\nFor UnInstall use Srv1 -d\n");
}
}
else
{
SERVICE_TABLE_ENTRY DispatchTable[]={{L"PointService",ServiceMain},{NULL,NULL}};
StartServiceCtrlDispatcher(DispatchTable);
}
return 0;
}
void WINAPI ServiceMain(DWORD argc, LPTSTR *argv)
{
m_ServiceStatus.dwServiceType = SERVICE_WIN32;
m_ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
m_ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;
m_ServiceStatus.dwWin32ExitCode = 0;
m_ServiceStatus.dwServiceSpecificExitCode = 0;
m_ServiceStatus.dwCheckPoint = 0;
m_ServiceStatus.dwWaitHint = 0;
m_ServiceStatusHandle = RegisterServiceCtrlHandler(L"PointService", ServiceCtrlHandler);
if (m_ServiceStatusHandle == (SERVICE_STATUS_HANDLE)0)
{
return;
}
m_ServiceStatus.dwCurrentState = SERVICE_RUNNING;
m_ServiceStatus.dwCheckPoint = 0;
m_ServiceStatus.dwWaitHint = 0;
if (!SetServiceStatus (m_ServiceStatusHandle, &m_ServiceStatus))
{
}
bRunning=true;
while(bRunning)
{
Sleep(3000);
bool pbRunning = true;
isExeRunning(L"Point-HD.exe",&pbRunning);
if(pbRunning == true)
{
printf("Point-HD running......\n");
}
else
{
printf("Point-HD running......\n");
}
}
return;
}
void WINAPI ServiceCtrlHandler(DWORD Opcode)
{
switch(Opcode)
{
case SERVICE_CONTROL_PAUSE:
m_ServiceStatus.dwCurrentState = SERVICE_PAUSED;
break;
case SERVICE_CONTROL_CONTINUE:
m_ServiceStatus.dwCurrentState = SERVICE_RUNNING;
break;
case SERVICE_CONTROL_STOP:
m_ServiceStatus.dwWin32ExitCode = 0;
m_ServiceStatus.dwCurrentState = SERVICE_STOPPED;
m_ServiceStatus.dwCheckPoint = 0;
m_ServiceStatus.dwWaitHint = 0;
SetServiceStatus (m_ServiceStatusHandle,&m_ServiceStatus);
bRunning=false;
break;
case SERVICE_CONTROL_INTERROGATE:
break;
}
return;
}
BOOL InstallService()
{
WCHAR strDir[1024];
SC_HANDLE schSCManager,schService;
GetCurrentDirectory(1024,strDir);
wcscat(strDir,L"\\Point-HDListener.exe");
schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if (schSCManager == NULL)
return false;
LPCTSTR lpszBinaryPathName=strDir;
schService = CreateServiceW(schSCManager,
L"PointService",
L"Point HD Listener Service",
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL,
lpszBinaryPathName,
NULL,
NULL,
NULL,
NULL,
NULL);
if (schService == NULL)
return false;
CloseServiceHandle(schService);
return true;
}
BOOL DeleteService()
{
SC_HANDLE schSCManager;
SC_HANDLE hService;
schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if (schSCManager == NULL)
return false;
hService=OpenService(schSCManager,L"PointService",SERVICE_ALL_ACCESS);
if (hService == NULL)
return false;
if(DeleteService(hService)==0)
return false;
if(CloseServiceHandle(hService)==0)
return false;
return true;
}
bool isExeRunning(WCHAR *zExeName, bool *pbRunning)
{
if (! pbRunning) return FALSE;
PROCESSENTRY32 pe32;
BOOL bSuccess = TRUE;
*pbRunning = FALSE;
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if (hSnapshot!=INVALID_HANDLE_VALUE)
{
pe32.dwSize = sizeof( PROCESSENTRY32 );
BOOL bRes = Process32First(hSnapshot, &pe32);
while (bRes==TRUE)
{
wprintf(L"%s\n",pe32.szExeFile);
if (0==wcscmp(zExeName, pe32.szExeFile))
{
*pbRunning = TRUE;
break;
}
bRes = Process32Next(hSnapshot, &pe32);
}
if (bRes!=TRUE && GetLastError()!=ERROR_NO_MORE_FILES)
{
bSuccess = FALSE;
}
CloseHandle(hSnapshot);
}
else
{
bSuccess = FALSE;
}
return bSuccess;
}
modified on Wednesday, May 14, 2008 8:53 AM
|
|
|
|
|
ERROR_SERVICE_REQUEST_TIMEOUT: The process for the service was started, but it did not call StartServiceCtrlDispatcher, or the thread that called StartServiceCtrlDispatcher may be blocked in a control handler function.
Soumyadipta wrote: ServiceMain(NULL,NULL);
I suspect this one, servicemain is called by SCM.
you are calling Service main in the service program main, this shows you have little knowledge about it or may be me.
[How to debug Windows services^]
|
|
|
|
|
That was a silly mistake. I have corrected the code but still i am getting the same problem.
Also i have downloaded the FirstService.zip from code project which is also giving me the same error message.
|
|
|
|
|
It would help you to get an answer if you read the "how to get help" message at the front of the forum, and use the pre tag to enclose your code, not the code tag. pre preserves the spacing and indentation to make it easier for people to read your code.
If we have to to struggle through a wall of text, we'll give up, and you won;t get assistance...
Iain.
Plz sir... CPallini CPallini abuz drugz, plz plz help urgent.
|
|
|
|
|
The problem is now solved.I have separated the installer code block from the existing code and have created a separate exe to install the service.I don't know the reason why the installer code block was creating the probel of ERROR 1053.
Below is the installer code:
<br />
<br />
<br />
<br />
<br />
<br />
#include <stdafx.h><br />
#include <windows.h><br />
#include <winsvc.h><br />
<pre><br />
void ShowErr();<br />
<br />
int main(int argc, char* argv[])<br />
{<br />
SC_HANDLE NishService,scm;<br />
scm=OpenSCManager(0,0,SC_MANAGER_CREATE_SERVICE);<br />
if(!scm)<br />
{<br />
ShowErr();<br />
return 1;<br />
}<br />
NishService=CreateService(scm,"PointHDListener",<br />
"PointHDListener Service",<br />
SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS,SERVICE_DEMAND_START,<br />
SERVICE_ERROR_NORMAL,<br />
"D:\\Service1.exe",<br />
0,0,0,0,0);<br />
if(!NishService)<br />
{<br />
CloseServiceHandle(scm);<br />
ShowErr();<br />
return 1;<br />
}<br />
CloseServiceHandle(NishService);<br />
CloseServiceHandle(scm);<br />
return 0;<br />
}<br />
<br />
void ShowErr()<br />
{<br />
}</pre><br />
</winsvc.h></windows.h></stdafx.h>
|
|
|
|
|
thanks worked installer should be seperated from service
manoj kulkarni
Net protector antivirus
|
|
|
|
|
How can i display a window message from my service?
I am able to create and install a windows service. I am beeping a sound from my service successfully.
Now i want to display a message when some event occurs.Basically in my code i am looking for a exe and checking whether it is running or not.
I want to display a message "Exe not running or started/ Crashed due to some error" from my service when i found the exe is not running means when status=false.
|
|
|
|
|
I've an MFC application which uses SQL connection using Namedpipes. I'm getting crash in the application log as follows.
Fault address: 7331293E 01:0000193E C:\bin\DBNMPNTW.DLL
Call stack:
Address Frame
7331293E 013D68DC ConnectionTransact+1AE
I'm not getting any clue of why the crash is happening at this point. After opening for a long time, it just crashes at this point !!!!!
Appreciate if some body can shed a light on the reason, what all could be the reason.
Arun K Ramachandran
|
|
|
|
|
Do mean the Connect takes a long time before it crashes? if yes, the problem may be with authentication or with the sever not able to connect to your applications and the exception is not handled.
|
|
|
|
|
Hi,
I have an MDI application. In view, I have created a property sheet. In one of the pages of this property sheet, I have to create ~50 different kinds of modeless dialogs, owned by property page. All these dialogs are needed in memory as long as the document is open in the session. I have created them at application start up.
However, when I create two to three documents, my application gets very slow (~50 * 3 documents = ~150 dialogs in memory). The API CDialog::Create is taking time.
Could you please suggest a solution for this ?
Any help would be highly appreciated.
Regards,
Paresh.
|
|
|
|
|
Can each document share the dialogs, so you only have to create 50?
Why not create each dialog dynamically when it's needed, or are all 50 visible all the time. Sounds like a pretty intense app if that's the case. Could combine some of the dialogs?
- S
50 cups of coffee and you know it's on!
|
|
|
|
|
Hi Steve,
Thanks for your reply.
Steve Echols wrote: Can each document share the dialogs, so you only have to create 50?
A particlaur dialog has its own data. A data in a dialog in one document is different from another dialog from another document. Could you please let me know, How could I share the dialogs across two documents ?
Steve Echols wrote: Why not create each dialog dynamically when it's needed, or are all 50 visible all the time.
Then also application gets slow.
Regards,
Paresh.
|
|
|
|
|
I had the same problem when creating the parameter-dialogs for each element, when I had 20+ elements and tryed to open them the app was freezing. I got it improved by removing the CDialogs and using CFormViews, duplicating the views as I needed them. It gives more performance, more speed and more functionality (i.e. UpdateAllViews ()).
Paresh Chitte wrote: How could I share the dialogs across two documents ?
At the same time you are not going to be able of that. If you open the window for a document you should close it and reopen for another document. Or delete the contents of all elements and then fill them with the datas of the second element.
I made it adding a CMyDoc* pointer to the "parent" document as member variable in the CFormView, when I double-clicked on an element to be parametrized, then I got the document pointer in the CMyView and sent it to the CFormView of that element at the end of the opening process. Then used the OnInitialUpdate () to fill all the elements with the datas of the document.
You can check
this[^] and this[^] posts to have a look of what I made.
Hope it helps
Greetings.
--------
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
“The First Rule of Program Optimization: Don't do it. The Second Rule of Program Optimization (for experts only!): Don't do it yet.” - Michael A. Jackson
|
|
|
|
|
Hi Nelek,
Thanks for your reply. I will look into it.
Regards,
Paresh.
|
|
|
|
|
Hi All,
Please Help me reg Following problem
I wrote a simple DOS Program to access my ISA Card using far pointer
My ISA Card have resources like 2 I/O s and 1 Memory
My Card is configured to access the location from 0xD000
My program is working(accessing the device memory) in Pentium 1 and not working in Pentium 4
code for accessing ISA device memory:
unsigned int far* BaseAddr;<br />
BaseAddr = (unsigned int far *)MK_FP(0xD000,0x0000);
in P1 processor (Win98)
IO 1 - OK
IO 2 - OK
Memory - OK
in P4 processor (Win98)
IO 1 - OK
IO 2 - OK
Memory - Not mapping to device
Thanks in Advance
|
|
|
|
|
|
projectip wrote: How could i select a region of interest for constant tracking?
You have some choices:
1/ Buy a pair of binoculars and a folding chair, travel to that region, sit down, and watch for interesting things to happen.
2/ Buy a pay as you go mobile, a plastic bag, and a stick. Go to the region, put the phone in a plastic bag, hang that on a stick, and put a sign next to it saying "please phone me if you do something interesting".
3/ Make your question more explicit. Region? An area of the screen? Registry? Filesystem? (I assume it's computer related at least...)
Iain.
Plz sir... CPallini CPallini abuz drugz, plz plz help urgent.
|
|
|
|
|
What about a geostationary satellite?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
it will be a frame obtained from an ip camera.Have to track it for changes.
|
|
|
|
|
OK. You may use an algorithm, good luck!
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
modified on Wednesday, May 14, 2008 7:44 AM
|
|
|
|
|
You may want to wish him good luck as well.
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
Fixed.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
By typing in "webcam" to the search box, I found the following article that could be of interest. Looks like clever stuff to me!
http://www.codeproject.com/KB/audio-video/face_detection.aspx[^]
If you give some information about what you want to do, we can give helpful answers. If not, you get daft answers.
Iain.
Plz sir... CPallini CPallini abuz drugz, plz plz help urgent.
|
|
|
|
|
I have to do a project which keeps track of objects in a scene.This scene has to be captured from an ip camera.I have to also keep track f a selected object in the frame and check for its missing.Please do help me with the details.
|
|
|
|
|
projectip wrote: Please do help me with the details.
I already have as much as I can - I pointed you at an article by someone cleverer than me, that takes pictures with a webcam, and then processes them to extract information from them.
He is looking for faces - you could look for something different. But the ideas will be similar.
I wish you every success, as this is not an easy project.
Iain.
Plz sir... CPallini CPallini abuz drugz, plz plz help urgent.
|
|
|
|
|