首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

都来看看这个异常在哪里呢? 这个是小弟我找的代码 看了看觉得没错.

2012-03-19 
都来看看这个错误在哪里呢?? 这个是我找的代码 看了看觉得没错...//这个是一个服务程序的代码,我用的编译

都来看看这个错误在哪里呢?? 这个是我找的代码 看了看觉得没错...
//这个是一个服务程序的代码,我用的编译器是VC++6.0


#include "stdio.h"
#include "windows.h"


/*typedef int BOOL;
#ifndef TURE 
#define TURE 1 
#endif
#ifndef FALSE
#define FALSE 0 
#endif*/

SERVICE_STATUSm_servicestatus;
SERVICE_STATUS_HANDLE m_servicestatushandle;
BOOL brunning = TRUE;

void WINAPI ServiceMain(DWORD argc,LPTSTR *argv);//服务主函数
void WINAPI ServiceCtrlHandler(DWORD opcode);//服务控制函数
void WINAPI CmdStart(void);//要启动的程序函数
BOOL InstallService();//安装服务的函数
BOOL DeletService();//卸载服务

int main(int argc,char *argv[])
{
printf("\twindows 基本服务演示!\n");

if(argc != 3){
printf("参数错误!\n");
return 0;
}

if(strcmp(argv[1],"-install") == 0){
if(InstallService()){
printf("\n\n服务安装成功!\n");
}
else{
printf("\n\n安装服务的过程中出现错误!\n");
return 0;
}
}
else if(strcmp(argv[1],"-remove") == 0){
if(DeletService()){
printf("\n\n服务卸载成功!\n");
}
else{
printf("\n\n服务卸载出错!\n");
return 0;
}
}
else{
printf("\n%s服务的安装或者卸载出错!\n");
return 0;
}

SERVICE_TABLE_ENTRY dispatchtable[] = {{"WindowsNT自启动",ServiceMain},{NULL,NULL}};
StartServiceCtrlDispatcher(dispatchtable);//注册服务主函数
return 0;
}

//服务主函数
void WINAPI ServiceMain(DWORD argc,LPTSTR *argc)
{
//注册服务
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("WindowsNT自启动",ServiceCtrlHandler);//注册服务控制函数
if(m_servicestatushandle == (SERVICE_STATUS_HANDLE)0){
return ;
}

m_servicestatus.dwCurrentState = SERVICE_RUNNING;
m_servicestatus.dwCheckPoint = 0;
m_servicestatus.dwWaitHint = 0;
SetServiceStatus(m_servicestatushandle,&m_servicestatus);
brunning = TRUE;

//启动服务
CmdStart();
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()
{
char strdir[1024];
SC_HANDLE scmanager,scservice;
GetCurrentDirectory(1024,strdir);
GetModuleFileName(NULL,strdir,sizeof(strdir));
char chsyspath[1024];
GetSystemDirectory(chsyspath,sizeof(chsyspath));
strcat(chsyspath,"\\windowsNT自启动.exe");

if(CopyFile(strdir,chsyspath,FALSE)){
printf("复制成功!\n");
}

strcpy(strdir,chsyspath);

scmanager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);

if(scmanager == NULL){
printf("打开控制管理器失败!\n");
return FALSE;
}

LPCTSTR lpszpath = strdir;

scservice = CreateService(scmanager,"windowsNT自启动","Windows Manger Control",
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START,
SERVICE_ERROR_NORMAL,
lpszpath,
NULL,NULL,NULL,NULL,NULL);
if(scservice == NULL){
printf("添加服务失败!\n");
return FALSE;
}

CloseServiceHandle(scservice);
return TRUE;
}


//卸载服务

BOOL DeletService()
{
SC_HANDLE scmanger;
SC_HANDLE hservice;
  scmanger = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);

char syspath[1024];
GetSystemDirectory(syspath,sizeof(syspath));
strcat(syspath,"\\windowsNT自启动.exe");

if(scmanger == NULL){
printf("打开服务管理器失败!\n");
return FALSE;
}
   
hservice = OpenService(scmanger,"WindowsNT自启动",SERVICE_ALL_ACCESS);

if(hservice == NULL){
printf("打开服务失败!\n");
return FALSE;
}

if(DeleteFile(syspath) == 0){
printf("删除文件失败!\n");
return FALSE;
}
else{
printf("删除文件成功!\n");
}

if(DeletService(hservice) == 0){
return FALSE;
}

if(CloseServiceHandle(hservice) == 0){
return FALSE;
}
else{
return TRUE;
}
}



//要启动的程序代码

void WINAPI CmdStart(void)
{

}


//错误信息


E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(54) : error C2275: 'SERVICE_TABLE_ENTRY' : illegal use of this type as an expression
  e:\学习软件\vc++6.0\vc++.6.0.with.sp6\vc6cn\vc98\include\winsvc.h(384) : see declaration of 'SERVICE_TABLE_ENTRY'
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(54) : error C2146: syntax error : missing ';' before identifier 'dispatchtable'
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(54) : error C2065: 'dispatchtable' : undeclared identifier
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(54) : error C2059: syntax error : ']'
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(55) : warning C4047: 'function' : 'const struct _SERVICE_TABLE_ENTRYA *' differs in levels of indirection from 'int '
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(55) : warning C4024: 'StartServiceCtrlDispatcherA' : different types for formal and actual parameter 1
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(60) : error C2040: 'argc' : 'char ** ' differs in levels of indirection from 'unsigned long '
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(61) : warning C4029: declared formal parameter list different from definition
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(124) : error C2143: syntax error : missing ';' before 'type'
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(125) : error C2065: 'chsyspath' : undeclared identifier
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(125) : warning C4047: 'function' : 'char *' differs in levels of indirection from 'int '
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(125) : warning C4024: 'GetSystemDirectoryA' : different types for formal and actual parameter 1
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(126) : warning C4047: 'function' : 'char *' differs in levels of indirection from 'int '
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(126) : warning C4024: 'strcat' : different types for formal and actual parameter 1
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(128) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'int '
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(128) : warning C4024: 'CopyFileA' : different types for formal and actual parameter 2
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(132) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'int '
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(132) : warning C4024: 'strcpy' : different types for formal and actual parameter 2
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(141) : error C2275: 'LPCTSTR' : illegal use of this type as an expression
  e:\学习软件\vc++6.0\vc++.6.0.with.sp6\vc6cn\vc98\include\winnt.h(196) : see declaration of 'LPCTSTR'
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(141) : error C2146: syntax error : missing ';' before identifier 'lpszpath'
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(141) : error C2065: 'lpszpath' : undeclared identifier
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(141) : warning C4047: '=' : 'int ' differs in levels of indirection from 'char *'
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(148) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'int '
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(148) : warning C4024: 'CreateServiceA' : different types for formal and actual parameter 8
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(168) : error C2143: syntax error : missing ';' before 'type'
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(169) : error C2065: 'syspath' : undeclared identifier
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(169) : warning C4047: 'function' : 'char *' differs in levels of indirection from 'int '
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(169) : warning C4024: 'GetSystemDirectoryA' : different types for formal and actual parameter 1
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(170) : warning C4047: 'function' : 'char *' differs in levels of indirection from 'int '
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(170) : warning C4024: 'strcat' : different types for formal and actual parameter 1
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(184) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'int '
E:\学习软件\C语言程序\windowsNT自启动服务\windowsNT自启动.c(184) : warning C4024: 'DeleteFileA' : different types for formal and actual parameter 1
执行 cl.exe 时出错.

windowsNT自启动.obj - 1 error(s), 0 warning(s)

[解决办法]

C/C++ code
//服务主函数void WINAPI ServiceMain(DWORD argc,LPTSTR *argv)//这儿参数改为(DWORD argc,LPTSTR *argv){    //注册服务
[解决办法]
C/C++ code
//卸载服务BOOL DeletService()  [color=#FF0000]//该函数在这里定义实现时没有传参数,你调用时怎么可以给他传参数呢[/color]{SC_HANDLE scmanger;SC_HANDLE hservice;  scmanger = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); 

热点排行