服务程序中调用WNetAddConnection2有错?恳求解答

ipangth ipangth 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
两台主机都是win2000系统。具体程序附在后面。
我用CreateService一个注册服务程序,
然后再svervciMain中用线程创建WNetAddConnection2链接某台主机。
本机和目的主机都是管理员帐号和密码。
但是由服务程序调用WNetAddConnection2调用就是不成功,错误码是
1312 ERROR_NO_SUCH_LOGON_SESSION
如果不是在服务调用,而是在程序一开始就调用线程,WNetAddConnection2程序就会成功。

这是什么问题?
应该修改什么权限?
既然平常的程序都可以连接成功,为什么在svervciMain中调用就不行?
难道是创建的服务程序设置有问题,不能访问网络?
哪位大侠帮我看看这段程序吧!

#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "Mpr.lib")

SERVICE_STATUS stss;
SERVICE_STATUS_HANDLE hss;
char sername[100]="aaaserver002";
char displayname[100]="aaadisplay002";
char RemoteName[100]="\\\\210.45.70.187";//远程主机
char user[100]="abcd"; //远程主机的用户名和密码
char pass[100]="abcd";

HANDLE threadHandle;
DWORD id;

DWORD WINAPI ConnectRemote( LPVOID lpParam ) //连接远程主机的线程函数
{

NETRESOURCE ntr;
ntr.lpLocalName=NULL;
ntr.lpRemoteName=RemoteName;
ntr.lpProvider=0;
ntr.dwType=0;
int ret= WNetAddConnection2(&ntr,pass,user,1);
char ss[10];
wsprintf(ss,"%d",ret);
MessageBox(NULL,ss,"addconnection",MB_OK); //打印出错误
int b=GetLastError();//
return b;
}

VOID Handler (DWORD controlCode)
{
if (controlCode==SERVICE_CONTROL_STOP)
{
stss.dwCurrentState=SERVICE_STOPPED;
SetServiceStatus(hss,&stss);
}
else if ( controlCode==SERVICE_CONTROL_INTERROGATE)
{
//stss.dwCurrentState=SERVICE_STOPPED;
SetServiceStatus(hss,&stss);
}

}

//服务主函数
int ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv)
{
RegisterServiceCtrlHandler((LPCTSTR)sername,LPHANDLER_FUNCTION(&Handler));
stss.dwServiceType=SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS;
stss.dwCurrentState = SERVICE_START_PENDING;
stss.dwControlsAccepted = SERVICE_ACCEPT_STOP;
stss.dwWin32ExitCode = 0;
SetServiceStatus(hss,&stss);

stss.dwCurrentState =SERVICE_RUNNING;
SetServiceStatus(hss,&stss);
while (1)
{
MessageBeep(0);
//创建连接的线程
threadHandle = CreateThread( 0,0,
(LPTHREAD_START_ROUTINE )ConnectRemote,
0, 0,&id);
Sleep(8000);
}
return 1;
}

void myWinMain() //服务程序的入口点
{
SERVICE_TABLE_ENTRY DispatchTable[2] ;
DispatchTable[0].lpServiceName=sername;
DispatchTable[0].lpServiceProc=(LPSERVICE_MAIN_FUNCTION)&ServiceMain;
DispatchTable[1].lpServiceName=NULL;
DispatchTable[1].lpServiceProc=NULL;
if (!StartServiceCtrlDispatcher( DispatchTable))
{
MessageBox(NULL,"StartServiceCtrlDispatcher faile","error",MB_OK);

}

}



void main()
{
//threadHandle = CreateThread( 0,0,(LPTHREAD_START_ROUTINE )ConnectRemote,
// 0, 0,&id);
//ConnectRemote();
char buffer1[255];
char buffer2[255];
char lpszBinaryPathName[255]="c:\\winnt\\system32\\aaa.exe";
SC_HANDLE schSCManager,schService;

schSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); // full access rights

GetModuleFileName(NULL,buffer1,255);
CopyFile(buffer1,lpszBinaryPathName,0);//把本程序考到系统目录下

GetSystemDirectory(buffer1,255);
GetCurrentDirectory(255,buffer2);
if((lstrcmpi(buffer1,buffer2))==0) //若是作为服务运行,直接调用myWinmain
{
myWinMain();
return;
}

schService = CreateService(
schSCManager, // SCManager database
sername, // name of service
displayname, // service name to display
SERVICE_ALL_ACCESS, // desired access
SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, // service type
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

if (schService == NULL)
{
//直接打开服务
schService=OpenService(schSCManager,sername,SERVICE_START);
StartService(schService,0,NULL);
int a=GetLastError();
}
else
{
//启动服务
StartService(schService,0,NULL);
printf("CreateService SUCCESS.\n");
}

CloseServiceHandle(schService);
return;
}

...全文

相关推荐

园区管理如何通过数据分析提升招商效率与运营质量?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN

央企如何利用数据分析工具优化科技研发方向与产业布局?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN

基于ADMM应用于水蜜桃采摘配送联合优化问题研究(Matlab代码实现)

内容概要:本文研究了基于交替方向乘子法(ADMM)的水蜜桃采摘与配送联合优化问题,并提供了完整的Matlab代码实现。通过构建整合农业生产中采摘任务分配与物流配送路径规划的数学模型,采用ADMM算法进行分布式求解,显著提升了计算效率与问题扩展性。文中系统阐述了问题建模过程、目标函数与约束条件的设计、ADMM算法的迭代求解机制,并通过仿真实验验证了该方法在降低整体运营成本与提升供应链响应速度方面的有效性,为智慧农业背景下的农产品供应链一体化优化提供了理论支持与实践范例。; 适合人群:具备一定运筹优化、农业工程或物流管理基础知识,熟悉Matlab编程的高校研究生、科研人员及农业科技企业技术人员。; 使用场景及目标:①应用于智慧农业场景下的作物采摘与冷链物流联合调度;②作为学习ADMM算法在分布式优化中应用的教学案例;③为解决类似农产品供应链优化问题提供模型与代码参考; 阅读建议:建议读者结合提供的Matlab代码逐模块阅读,重点关注问题建模与ADMM算法实现部分,可通过修改参数或测试不同规模案例来加深理解,并尝试将其拓展至其他农作物或更复杂的供应链网络中。

三伯

新能源纯电动汽车驾驶员模块、整车控制器、减速器模块、车速模块等建模Simulink仿真模型

内容概要:本文详细介绍了一个基于Simulink的新能源纯电动汽车仿真模型,重点涵盖了驾驶员模块、整车控制器、减速器模块和车速模块等核心部件的建模与仿真。该模型采用模块化设计理念,实现了对电动汽车动力传动系统与整车控制逻辑的高精度模拟,可用于车辆动力学分析、控制策略验证及系统性能评估。模型紧密结合工程实际需求,构建了完整的仿真框架,支持在不同驾驶工况(如加速、减速、爬坡等)下测试车辆动态响应,有效提升了整车控制系统的设计效率与可靠性,具有较强的工程应用价值。; 适合人群:具备一定车辆工程或自动化背景,从事新能源汽车控制、系统仿真或机电一体化研究的研发人员及高校研究生。; 使用场景及目标:①用于新能源汽车整车控制策略的开发与验证;②支持动力系统匹配分析与性能优化;③适用于教学演示、科研项目及工程原型开发中的动态仿真需求。; 阅读建议:建议使用者熟悉Simulink基本操作与车辆动力学基础知识,结合实际控制需求逐步调试各模块参数,并通过典型工况(如加速、减速、爬坡)验证模型的有效性与稳定性。

程序猿鑫

技术转移机构如何精准定位潜在技术需求,拓展服务范围?.docx

技术转移机构如何精准定位潜在技术需求,拓展服务范围?

BIZKEEN
评论 2
收藏 已收藏
分享
返回顶部