有注册表大神吗,我找了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。
...全文
997 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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,在服务器上添加上你的服务程序,以自动方式启动。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧