有注册表大神吗,我找了RunServicesOnce没起作用

qq14923349 2010-07-06 01:11:59
我写了个网络程序,但是由于一些问题电脑会关机重启,重启后我要求必须在登录系统前我的程序就可以后台运行而且带网络,有这个注册表项或者INI吗?




附录:

RunServices注册键

RunServices注册键指定的程序紧接RunServicesOnce指定的程序之后运行,但两者都在用户登录之前。RunServices的位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices。
...全文
789 点赞 收藏 5
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hqliu41 2011-11-17
我把自己编写的应用程序通过添加进注册表,变成了服务,然后自己新写了一个注册文件,RunServicesOnce.reg,通过这个希望能够使得该服务,即我的程序能够在系统启动之前启动,但后来发现,一点效果都没有。不知道具体步骤是怎样,怎样实现应用程序于用户登录前自启动呢?
不明白为什么,请大牛指点。
回复
qq14923349 2010-07-06
登录系统前

这个能达到要求吗
回复
谱靠一哥 2010-07-06
以服务的形式启动。
想新建一个服务,不一定需要写楼上那么多代码。
你到VC向导里面找到创建Service的模板,人家会自动生成。
在代码注释里面会告诉你怎么安装。

然后找到你项目里的WinService.h,修改如下:


/// <summary>
/// 设置具体的操作,以便服务可以执行它的工作。
/// </summary>
virtual void OnStart(array<String^>^ args) override{
PROCESS_INFORMATION piProcInfo;
STARTUPINFO siStartInfo;

siStartInfo.cb = sizeof(STARTUPINFO);
siStartInfo.lpReserved = NULL;
siStartInfo.lpReserved2 = NULL;
siStartInfo.cbReserved2 = 0;
siStartInfo.lpDesktop = NULL;
siStartInfo.dwFlags = 0;

CreateProcess(NULL,"C:\\some_place\\you_program.exe",NULL,NULL, 0, 0, NULL, NULL, &siStartInfo, &piProcInfo);
}

/// <summary>
/// 停止此服务。
/// </summary>
virtual void OnStop() override{
PROCESS_INFORMATION piProcInfo;
STARTUPINFO siStartInfo;

siStartInfo.cb = sizeof(STARTUPINFO);
siStartInfo.lpReserved = NULL;
siStartInfo.lpReserved2 = NULL;
siStartInfo.cbReserved2 = 0;
siStartInfo.lpDesktop = NULL;
siStartInfo.dwFlags = 0;

CreateProcess(NULL,"taskkill /F /IM you_program.exe",NULL,NULL, 0, 0, NULL, NULL, &siStartInfo, &piProcInfo);
}


问题应该可以完美解决!
回复
踏实每一步 2010-07-06
创建一个service
#include <windows.h>
#include <stdio.h>

#define SVCNAME TEXT("SvcName")

//
// Purpose:
// Installs a service in the SCM database
//
// Parameters:
// None
//
// Return value:
// None
//
VOID SvcInstall()
{
SC_HANDLE schSCManager;
SC_HANDLE schService;
TCHAR szPath[MAX_PATH];

if( !GetModuleFileName( NULL, szPath, MAX_PATH ) )
{
printf("Cannot install service (%d)\n", GetLastError());
return;
}

// Get a handle to the SCM database.

schSCManager = OpenSCManager(
NULL, // local computer
NULL, // ServicesActive database
SC_MANAGER_ALL_ACCESS); // full access rights

if (NULL == schSCManager)
{
printf("OpenSCManager failed (%d)\n", GetLastError());
return;
}

// Create the service.

schService = CreateService(
schSCManager, // SCM database
SVCNAME, // name of service
SVCNAME, // service name to display
SERVICE_ALL_ACCESS, // desired access
SERVICE_WIN32_OWN_PROCESS, // service type
SERVICE_DEMAND_START, // start type
SERVICE_ERROR_NORMAL, // error control type
szPath, // path to service's binary
NULL, // no load ordering group
NULL, // no tag identifier
NULL, // no dependencies
NULL, // LocalSystem account
NULL); // no password

if (schService == NULL)
{
printf("CreateService failed (%d)\n", GetLastError());
CloseServiceHandle(schSCManager);
return;
}
else printf("Service installed successfully\n");

CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
}
回复
Jimmy_Xia 2010-07-06
把你的程序做成service,在服务器上添加上你的服务程序,以自动方式启动。
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告