線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1371
推到 Plurk!
推到 Facebook!

請問一個service 的問題

答題得分者是:RaynorPao
minlee00188
一般會員


發表:9
回覆:14
積分:4
註冊:2002-10-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-11-25 16:36:40 IP:203.149.xxx.xxx 未訂閱
各位高手,我是第一次寫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(); } //--------------------------------------------------------------------
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-11-25 23:54:24 IP:61.221.xxx.xxx 未訂閱
引言: 各位高手,我是第一次寫service 程式 大部分是從sdk 上抄來的,但是就是不能 startservice,請問各位,我哪錯了?
minlee00188你好: 請參考以下連結
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
系統時間:2024-04-20 23:51:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!