当前位置:我的异常网» C语言 » 都来看看这个异常在哪里呢? 这个是小弟我找的代码
都来看看这个异常在哪里呢? 这个是小弟我找的代码 看了看觉得没错.
www.myexceptions.net 网友分享于:2013-03-20 浏览:44次
都来看看这个错误在哪里呢?? 这个是我找的代码 看了看觉得没错...
//这个是一个服务程序的代码,我用的编译器是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);
文章评论