当VC服务程序调用远程资源时,经常返回路径不存在等问题
这是因为Windows中,服务程序以System用户登录,而不是桌面用户登录
这样就导致,虽然桌面程序已经映射网络资源,但System用户仍无法访问的问题
为了可以访问远程资源,可以调用API:WNetAddConnection2
BOOL AcessNetworkDrtive(CString szDevice,CString szDeviceName,CString szUsername,CString szPassword)
{
DWORD dwRetVal;
NETRESOURCE nr;
memset(&nr, 0, sizeof (NETRESOURCE));
nr.dwType = RESOURCETYPE_ANY;
nr.lpLocalName = strDevice.GetBuffer(szDevice.GetLength());
nr.lpRemoteName = szDeviceName.GetBuffer(szDeviceName.GetLength());
nr.lpProvider = NULL;
dwRetVal = WNetAddConnection2(&nr, szUsername, szUsername, CONNECT_UPDATE_PROFILE);
if (dwRetVal != NO_ERROR)
{
CString cError;
cError.Format(TEXT("[ERROR]WNetAddConnection2 Failed: %u\n"), dwRetVal);
LogEvent(cError,TEXT("With remote name "),nr.lpRemoteName);
return dwRetVal;
}
return dwRetVal;
}