如何在服务程序中读取映射磁盘文件?

softrain 2008-03-18 12:48:11
在非服务程序中读取是正常的,写成服务模式就无法读取了。
急!
...全文
373 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
knowledge_Is_Life 2008-05-01
  • 打赏
  • 举报
回复
我也想知道,正在找這方面的資料~~~~~
softrain 2008-04-24
  • 打赏
  • 举报
回复
谁能给个可用的服务例子?
softrain 2008-03-26
  • 打赏
  • 举报
回复
自己顶
cnzdgs 2008-03-18
  • 打赏
  • 举报
回复
映射文件与程序是服务还是一般应用没有直接关系,把你遇到的问题讲具体一些。
野男孩 2008-03-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 softrain 的回复:]
那我用administrator帐号做的映射,是不是system帐号就无法访问了?如何解决?
请加我msn:programmer1978#msn.com.#-> @

[/Quote]

administrator账号做的映射,SYSTEM就是无法访问。

解决方法我知道的几个:
1.要访问的机器跟服务所在机器在同一个域里面,由域控制器分配权限,可以让system用户访问到远程的目录。
2.使用NULL Session来访问远程目录,微软不建议使用,安全性上打了折扣。

这两种方法都可以google到~
softrain 2008-03-18
  • 打赏
  • 举报
回复
char disk[256];
strcpy(disk,strfolder.c_str());
NETRESOURCE nr;
nr.dwScope = RESOURCE_GLOBALNET;
nr.dwType = RESOURCETYPE_DISK;
nr.dwUsage = RESOURCEUSAGE_CONNECTABLE;
nr.dwDisplayType = RESOURCEDISPLAYTYPE_GENERIC;
nr.lpComment = NULL;
nr.lpLocalName = NULL;
nr.lpProvider = NULL;
nr.lpRemoteName = disk;
DWORD dwResult = WNetAddConnection2(&nr,"","",CONNECT_UPDATE_PROFILE);
if(dwResult != NO_ERROR)
{
int err = GetLastError();
FILE* pf = fopen("d:\\result.txt","a+t");
fprintf(pf,"%s %s %d\n","WNetAddConnection2",strfolder.c_str(),err);
fclose(pf);
}


输出:WNetAddConnection2 \\TASK_CICI\Release\新建文件夹\ 1203

MSDN:
ERROR_NO_NET_OR_BAD_PATH The operation cannot be performed because a network component is not started or because a specified name cannot be used.

cofanz 2008-03-18
  • 打赏
  • 举报
回复

typedef struct tagRmoteDisk {
TCHAR *lpRmote;
TCHAR *lpUser;
TCHAR *lpPassword;
}RMOTE_DISK;

typedef CArray<RMOTE_DISK>CRmoteDiskArray;
BOOL ReadRmoteMapConfig(CRmoteDiskArray& array)
{
TCHAR szPath[512];
if ( GetModuleFileName( NULL, szPath, 512 ) == 0 )
return FALSE;
PathRemoveFileSpec(szPath);
PathAppend(szPath,"ftcs.ini");
TCHAR szBuffer[1024*200],*p;

GetPrivateProfileSection("Rmote Disk Map",szBuffer,1024*200,szPath);
CString strLine;
RMOTE_DISK disk;
p = szBuffer;
while(*p)
{
int curPos = 0;
strLine = p;
ZeroMemory(&disk,sizeof(RMOTE_DISK));
disk.lpRmote = StrDup(strLine.Tokenize(" ",curPos));
if (curPos==-1)
break;
disk.lpUser = StrDup(strLine.Tokenize(" ",curPos));
if (curPos==-1)
break;
disk.lpPassword = StrDup(strLine.Tokenize(" ",curPos));
if (curPos==-1)
break;
p += strLine.GetLength() + 1;
array.Add(disk);
}
DWORD dwResult;
NETRESOURCE nr;
nr.dwScope = RESOURCE_GLOBALNET;
nr.dwType = RESOURCETYPE_DISK;
nr.dwUsage = RESOURCEUSAGE_CONNECTABLE;
nr.dwDisplayType = RESOURCEDISPLAYTYPE_GENERIC;
nr.lpComment = NULL;
nr.lpLocalName = NULL;
nr.lpProvider = NULL;
for (int i=0;i<array.GetCount();i++)
{
RMOTE_DISK & disk1 = array.GetAt(i);
if (disk1.lpPassword == NULL && disk1.lpUser == NULL
&& !PathIsNetworkPath(disk1.lpRmote))
continue;
nr.lpRemoteName = disk1.lpRmote;
dwResult = WNetAddConnection2(&nr,disk1.lpPassword,disk1.lpUser,CONNECT_UPDATE_PROFILE);
if (dwResult != ERROR_ALREADY_ASSIGNED && dwResult != ERROR_DEVICE_ALREADY_REMEMBERED &&
dwResult != NO_ERROR)
{
slog(0,"FTCS Could not map remote disk '%s',%x",nr.lpRemoteName,dwResult);
return FALSE;
}
}

return TRUE;
}
softrain 2008-03-18
  • 打赏
  • 举报
回复
那我用administrator帐号做的映射,是不是system帐号就无法访问了?如何解决?
请加我msn:programmer1978#msn.com.#->@
cnzdgs 2008-03-18
  • 打赏
  • 举报
回复
我没有QQ。
Z:\Release是不是设置了访问权限?服务程序的用户帐号是system。
softrain 2008-03-18
  • 打赏
  • 举报
回复
参数值是“Z:\Release\*” 在非服务模式都正常的。
楼上请加我QQ:23228027
cnzdgs 2008-03-18
  • 打赏
  • 举报
回复
参数值都是什么?是不是使用了相对路径?
softrain 2008-03-18
  • 打赏
  • 举报
回复
我查明失败在什么地方,是FindFirstFile这个函数,在非服务模式下可以成功,在服务模式下就返回失败。错误码为3:系统找不到指定的路径。
jwybobo2007 2008-03-18
  • 打赏
  • 举报
回复
估计代码的问题,检查

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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