我正在開發一個可以在winlogon桌面上啓動程序的項目。該程序在調試時可以正常工作,但是當我在ide之外啓動它時,它會因臭名昭着的c0000005錯誤而失敗。最奇怪的是,它似乎並沒有發生在任何特定的線上。下面是代碼:C++奇怪的c0000005錯誤
#include "stdafx.h"
#include <windows.h>
#include "BinRes.h"
#include <string>
#include <iostream>
int main(int argc, char* argv[])
{
if(argc != 2)
{
return 0;
}
std::string a;
a.append(BinRes::getAppLocation());
a.append("\\wls.exe");
BinRes::ExtractBinResource("EXE",102,"wls.exe");
Sleep(500);
SC_HANDLE schsm;
schsm = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
SC_HANDLE schs;
schs = CreateService(schsm,"WLS","WLS",SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS,SERVICE_DEMAND_START,NULL,a.c_str(),0,0,0,0,0);
char* cd = argv[1];
LPCSTR* arg = (LPCSTR*)&cd;
StartService(schs,1,arg);
HANDLE endevent;
endevent = OpenEvent(EVENT_ALL_ACCESS,TRUE,"ENDWLS");
WaitForSingleObject(endevent,INFINITE);
SERVICE_STATUS ss;
QueryServiceStatus(schs,&ss);
if(ss.dwCurrentState != SERVICE_STOPPED)
{
LPSERVICE_STATUS xyz = (LPSERVICE_STATUS)malloc(sizeof(LPSERVICE_STATUS));
ControlService(schs,SERVICE_CONTROL_STOP,xyz);
}
DeleteService(schs);
//error occurs right here
DeleteFile(a.c_str());
return 0;
}
錯誤總是DeleteService函數之後和下一行之前發生,但我敢肯定它是不是DeleteService函數,因爲該服務將被刪除。我試着註釋掉DeleteService和DeleteFile,但它仍然崩潰。我確信我犯了一些骷髏頭錯誤,只是失明而已。先謝謝您的幫助!
對於什麼是值得的,是0000005訪問衝突。也許你應該插入一些返回值檢查並調用GetLastError()以查看在旅行期間是否發生了意外事件 – Fredrik 2009-08-10 18:59:08
我同意Fredrik在調用API時始終檢查返回代碼 – LanceSc 2009-08-10 19:06:06