创建服务时,发现创建失败:
SC_HANDLE schService = CreateService(
schSCManager, // SCManager database
"SystemSaver_Srv", // name of service
lpszDisplayName, // service name to display
SERVICE_ALL_ACCESS, // desired access
SERVICE_WIN32_OWN_PROCESS, // service type
SERVICE_SYSTEM_START,//SERVICE_AUTO_START, // start type
SERVICE_ERROR_NORMAL, // error control type
lpszBinaryPathName, // service's binary
NULL, // no load ordering group
NULL, // no tag identifier
NULL, // no dependencies
NULL, // LocalSystem account
NULL); // no password
若将SERVICE_SYSTEM_START 改为 SERVICE_AUTO_START 则可以成功,但是我想在winxp登录前就让它运行。
SC_HANDLE schService = CreateService(
schSCManager, // SCManager database
"SystemSaver_Srv", // name of service
lpszDisplayName, // service name to display
SERVICE_ALL_ACCESS, // desired access
SERVICE_WIN32_OWN_PROCESS, // service type
SERVICE_SYSTEM_START,//SERVICE_AUTO_START, // start type
SERVICE_ERROR_NORMAL, // error control type
lpszBinaryPathName, // service's binary
NULL, // no load ordering group
NULL, // no tag identifier
NULL, // no dependencies
NULL, // LocalSystem account
NULL); // no password
若将SERVICE_SYSTEM_START 改为 SERVICE_AUTO_START 则可以成功,但是我想在winxp登录前就让它运行。
解决方案 »
- MFC,ListBox如何做出按键的效果
- 我的对话框属性里面怎么没有child?
- 怎样将窗体嵌入到父窗体?
- 用CxImage的时候出现"无法解析的外部命令"
- CButtonST是否可以动态加载图片(如.bmp,.jpg等)?
- 根据鼠标在对话框上的位置来显示图片的问题,在不同的分辨率会得到不同的值和位置?
- 莫名其妙给人开了 开心 终于该和DELPHI说BYEBYE了
- 怎样判断CString str("****"),是不是16进制数啊?
- 在vc++中,如何编程才能实现类似公式编辑器的东西?
- 请问如何才能不重启就能使被修改的注册表生效?
- 谁能给我一些好的颜色编号
- 请问:哪里可以查到这样的Windows 消息的定义?
.......
NULL, // LocalSystem account
NULL); // no password
SERVICE_SYSTEM_START是指的由服务管理器来管理的,并不是指的自动启动服务。
只注册成服务是没有用的,你的程序必须是服务程序才能被服务管理器管理。
在CSDN搜索“服务程序”,会找到相关的文章。
否则可以在注册表中做,比如:放在键RUN
或BootExecute下
注册表,Run不可以,它是在登陆后运行的
BootExecute是什么?能写出全路径么?
只能在登录后才能显示我将CreateService最后两个参数设置了,让他以管理员登录运行,
可是界面不见了HDESK hdeskCurrent;
HDESK hdesk;
HWINSTA hwinstaCurrent;
HWINSTA hwinsta; hwinstaCurrent = GetProcessWindowStation();
if (hwinstaCurrent == NULL)
{
pf=fopen("c:\\liutaol.txt","a+");
fputs("GetProcessWindowStation Failed:",pf);
fclose(pf);
return FALSE;
} hdeskCurrent = GetThreadDesktop(GetCurrentThreadId());
if (hdeskCurrent == NULL){
pf=fopen("c:\\liutaol.txt","a+");
fputs("GetThreadDesktop Failed:",pf);
fclose(pf);
return FALSE;
}//打开winsta0
hwinsta = OpenWindowStation("winsta0", FALSE,
WINSTA_ACCESSCLIPBOARD |
WINSTA_ACCESSGLOBALATOMS |
WINSTA_CREATEDESKTOP |
WINSTA_ENUMDESKTOPS |
WINSTA_ENUMERATE |
WINSTA_EXITWINDOWS |
WINSTA_READATTRIBUTES |
WINSTA_READSCREEN |
WINSTA_WRITEATTRIBUTES);
if (hwinsta == NULL){
pf=fopen("c:\\liutaol.txt","a+");
fputs("OpenWindowStation Failed:",pf);
fclose(pf);
return FALSE;
} if (!SetProcessWindowStation(hwinsta)){
pf=fopen("c:\\liutaol.txt","a+");
fputs("SetProcessWindowStation Failed:",pf);
fclose(pf);
return FALSE;
}//打开desktop
hdesk = OpenDesktop("default", 0, FALSE,
DESKTOP_CREATEMENU |
DESKTOP_CREATEWINDOW |
DESKTOP_ENUMERATE |
DESKTOP_HOOKCONTROL |
DESKTOP_JOURNALPLAYBACK |
DESKTOP_JOURNALRECORD |
DESKTOP_READOBJECTS |
DESKTOP_SWITCHDESKTOP |
DESKTOP_WRITEOBJECTS);
if (hdesk == NULL){
pf=fopen("c:\\liutaol.txt","a+");
fputs("OpenDesktop Failed:",pf);
fclose(pf);
return FALSE;
} SetThreadDesktop(hdesk); // 界面
DialogBox(hInst, MAKEINTRESOURCE(IDD_MAINFORM),NULL,NULL);
if (!SetProcessWindowStation(hwinstaCurrent))
return FALSE; if (!SetThreadDesktop(hdeskCurrent))
return FALSE; if (!CloseWindowStation(hwinsta))
return FALSE; if (!CloseDesktop(hdesk))
return FALSE;