各位高手,我是第一次寫service 程式
大部分是從sdk 上抄來的,但是就是不能
startservice,請問各位,我哪錯了? 以下為我的程式: #include
#pragma hdrstop #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
//SERVICE_STATUS MyServiceStatus;
//SERVICE_STATUS_HANDLE MyServiceStatusHandle;
SC_HANDLE TestSCM; TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender)
{
LPCTSTR lpszBinaryPathName = "F:\\minlee\\test\\service_show\\Project2.exe";
TestSCM = OpenSCManager(NULL,
NULL,
SC_MANAGER_ALL_ACCESS);
SC_HANDLE TestService = CreateService(
TestSCM,
"Sample_Srv",
"Test_Name",
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL,
lpszBinaryPathName,
NULL,
NULL,
NULL,
NULL,
NULL);
if(TestService == NULL)
ShowMessage("Show Service Error!!");
else
ShowMessage("Show Service SUCCESS!!"); CloseServiceHandle(TestService); } //---------------------------------------------------------------------------
VOID DeleteSampleService()
{
SC_HANDLE schService = OpenService(
TestSCM, // SCManager database
"Sample_Srv", // name of service
DELETE); // only need DELETE access if (schService == NULL)
ShowMessage("Open Error"); if (! DeleteService(schService) )
ShowMessage("Error DeleteService");
else
ShowMessage("DeleteService SUCCESS"); CloseServiceHandle(schService);
} void __fastcall TForm1::Button2Click(TObject *Sender)
{
DeleteSampleService();
}
//--------------------------------------------------------------------------- DWORD StartSampleService()
{
SERVICE_STATUS ssStatus;
DWORD dwOldCheckPoint;
DWORD dwStartTickCount;
DWORD dwWaitTime;
DWORD dwStatus; SC_HANDLE schStart = OpenService(
TestSCM, // SCManager database
"Sample_Srv", // name of service
SERVICE_ALL_ACCESS);
if (schStart == NULL)
{
ShowMessage("Error OpenService");
} if (!StartService(
schStart, // handle to service
0, // number of arguments
NULL) ) // no arguments
{
ShowMessage("Error StartService");
}
else
{
ShowMessage("Service start pending.");
}
// Check the status until the service is no longer start pending.
if (!QueryServiceStatus(
schStart, // handle to service
&ssStatus) ) // address of status information structure
{
ShowMessage("Error QueryServiceStatus");
} // Save the tick count and initial checkpoint. dwStartTickCount = GetTickCount();
ShowMessage((AnsiString)dwStartTickCount);
dwOldCheckPoint = ssStatus.dwCheckPoint; while (ssStatus.dwCurrentState == SERVICE_START_PENDING)
{
// Do not wait longer than the wait hint. A good interval is
// one tenth the wait hint, but no less than 1 second and no
// more than 10 seconds. dwWaitTime = ssStatus.dwWaitHint / 10; if( dwWaitTime < 1000 )
dwWaitTime = 1000;
else if ( dwWaitTime > 10000 )
dwWaitTime = 10000; Sleep( dwWaitTime ); // Check the status again.
if (!QueryServiceStatus(
schStart, // handle to service
&ssStatus) ) // address of structure
break;
if ( ssStatus.dwCheckPoint > dwOldCheckPoint )
{
// The service is making progress. dwStartTickCount = GetTickCount();
dwOldCheckPoint = ssStatus.dwCheckPoint;
}
else
{
if(GetTickCount()-dwStartTickCount > ssStatus.dwWaitHint)
{
// No progress made within the wait hint
break;
}
}
} if (ssStatus.dwCurrentState == SERVICE_RUNNING)
{
ShowMessage("StartService SUCCESS");
dwStatus = NO_ERROR;
}
else
{
ShowMessage("Service not started. ");
ShowMessage(" Current State: " (AnsiString)ssStatus.dwCurrentState);
ShowMessage(" Exit Code: " (AnsiString)ssStatus.dwWin32ExitCode);
ShowMessage(" Service Specific Exit Code:" (AnsiString)ssStatus.dwServiceSpecificExitCode);
ShowMessage(" Check Point: " (AnsiString)ssStatus.dwCheckPoint);
ShowMessage(" Wait Hint: " (AnsiString) ssStatus.dwWaitHint);
dwStatus = GetLastError();
} CloseServiceHandle(schStart);
return dwStatus;
} void __fastcall TForm1::Button3Click(TObject *Sender)
{
StartSampleService();
}
//--------------------------------------------------------------------