在非服务进程里读写注册表没有问题,把读写注册表的代码放到系统服务进程里就读写出错,是不是服务进程里没法操作注册表呢?我是这么创建服务的:
SC_HANDLE hService = ::CreateService(
hSCM, szServiceName, szServiceName,
SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS,
SERVICE_AUTO_START, SERVICE_ERROR_NORMAL,
szFilePath, NULL, NULL, _T(""), NULL, NULL);哪位大牛帮解答一下,谢谢啦!!!!
SC_HANDLE hService = ::CreateService(
hSCM, szServiceName, szServiceName,
SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS,
SERVICE_AUTO_START, SERVICE_ERROR_NORMAL,
szFilePath, NULL, NULL, _T(""), NULL, NULL);哪位大牛帮解答一下,谢谢啦!!!!
解决方案 »
- 无窗口(windowless)的Atl编写ActiveX怎么响应TAB或方向键激活
- 请问都有什么东西是句柄啊?
- 懂得指导一下,不懂得友情帮顶一下,非常感谢!
- 请问哪里有ADO多现成操作数据库的代码?
- ★★★调用recvfrom获取的IP地址与实际的发送方地址不同,请高手帮忙看看代码!!★★★
- 出现错误error C2146: syntax error : missing ';' before identifier 'SQLHWND'怎么处理?加分!!
- 谁有比较详细的boundschecker使用说明?
- 有关ODBC的问题,请高手帮忙
- 请问如何在MFC中打开文件夹
- 成功并不象你想象的那么难
- 完成端口问题
- 关于 像素对齐 行间距pitch 的问题
HKEY keyRet;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,(unsigned short*)"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\Folder\\ClassicViewState"
,0,KEY_READ|KEY_WRITE,&keyRet)==ERROR_SUCCESS)
{
unsigned char value[256]={0};
DWORD type=REG_SZ;
DWORD size; if(RegQueryValueEx(keyRet,(unsigned short*)"{1C85E114}",NULL,&type,value,&size)==ERROR_SUCCESS)
{
string status = string((char*)value);
if(status == "T")//注册了
is_trial = false;
else
is_trial = true;
}
else
LogEvent(_T("访问注册表项{1C85E114}出错!"));
unsigned char times[256]={0};
if(RegQueryValueEx(keyRet,(unsigned short*)"{2902A9F8}",NULL,&type,times,&size)==ERROR_SUCCESS)
{
string utime = string((char*)times);
used_time = (atoi(utime.c_str())+100)/2;
}
else
LogEvent(_T("访问注册表项{2902A9F8}出错!")); RegCloseKey(keyRet);
}
else
LogEvent(_T("打开注册表出错!"));
同样的代码在非服务进程里就能读写注册表,在服务进程里就报“打开注册表出错!"
好奇怪
HKEY keyRet;
long ret;
ret=RegOpenKeyEx(HKEY_LOCAL_MACHINE,(unsigned short*)"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\Folder\\ClassicViewState"
,0,KEY_READ|KEY_WRITE,&keyRet);
if(ret==ERROR_SUCCESS)
{
。。
}
else
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0,
NULL
); LogEvent(_T("%s"),(char*)lpMsgBuf);//此处为“操作成功完成”
}
如果ret==0的话才会操作成功完成
service是使用System用户运行的,而不是像应用程序一样,使用执行应用程序的user执行的。 其实,在vista和win7上使用服务的时候,还涉及到一个session穿透问题,不过,楼主这里应该还没遇到,所以也就不多说了。