客观的:我正在尝试将一些文件从客户端发送到服务器。我正在使用“rsync”来传输数据。我正在使用 CreateProcess APi 并传递 rsync 路径以及参数。
正面案例:当我从本地驱动器(如“C:”)发送数据时,我的 Windows 安装位置上述方法可以正常工作并传输数据。
Problem:当我尝试发送映射驱动器(共享网络驱动器)的数据时。 CreateProcess 完成,但我得到的错误是 rsync 找不到文件。
同样的 rsync 命令,当我在命令提示符下运行时,所有文件都成功传输,没有任何错误,但使用 CreateProcess 传输文件失败。
Code :
int CreateRsyncProcess(const wchar_t * ptrCommand)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
SECURITY_ATTRIBUTES sap,sat,sao;
HANDLE out;
DWORD pwExit;
//init the STARTUPINFO struct
memset(&si,0,sizeof(si));
si.cb=sizeof(si);
wstring cmd = L"";
cmd.append(ptrCommand);
//proc sec attributes
sap.nLength=sizeof(SECURITY_ATTRIBUTES);
sap.lpSecurityDescriptor= NULL;
sap.bInheritHandle=1;
//thread sec attributes
sat.nLength=sizeof(SECURITY_ATTRIBUTES);
sat.lpSecurityDescriptor= NULL;
sat.bInheritHandle=1;
//create the proc
if(!CreateProcess(NULL,(LPWSTR)cmd.c_str(),&sap,&sat,1,CREATE_NO_WINDOW,NULL,NULL,&si,&pi))
{
DWORD err = GetLastError();
if(out != INVALID_HANDLE_VALUE)
CloseHandle(out);
return 1;
}
//wait till the proc ends
WaitForSingleObject(pi.hProcess,INFINITE);
GetExitCodeProcess(pi.hProcess,&pwExit);
//close all
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
if(out != INVALID_HANDLE_VALUE)
CloseHandle(out);
TerminateProcess(pi.hProcess,0);
return pwExit;
}
Rsync命令:
“C:\ Program Files \ cwRsync \ bin \ rsync.exe”-cvriHPDkREL --no-implied-dirs --stats -e'“C:\ Program Files \ cwRsync \ bin \ ssh”-o StrictHostKeyChecking = no -i “C:\ Program Files \ cwRsync \ bin \ rsync-key”'“/ cygdrive / Z / 64Bit”[电子邮件受保护] /cdn-cgi/l/email-protection:~/6a90c592-2b3b-4088-8942-2106776c863a/
发生这种情况是因为 CreateProcess 的某些安全相关问题或权限问题还是其他原因?
请帮助,因为我被困在这个问题上。
Thanks
EDIT::这作为正常过程工作正常,但是当我在服务中运行它时它会失败。所以现在的问题基本上是服务无法访问网络共享。有什么解决方法吗?