Tujuan : Saya mencoba mengirim beberapa file dari klien saya ke server. Saya menggunakan "rsync" untuk mentransfer data. Saya menggunakan CreateProcess APi dan melewati jalur rsync beserta parameternya.
Kasus Positif: Ketika saya mengirim data dari drive lokal seperti "C:" di mana windows saya diinstal, metode di atas berfungsi dengan baik dan mentransfer data.
Masalah : Saat saya mencoba mengirim data dari drive yang dipetakan (drive jaringan bersama). CreateProcess selesai tetapi kesalahan yang saya dapatkan adalah rsync tidak dapat menemukan file. Perintah rsync yang sama, ketika saya menjalankan command prompt semua file berhasil ditransfer tanpa kesalahan apa pun tetapi gagal dalam mentransfer file dengan CreateProcess.
Kode :
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 Cmd : "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" [email protected]:~/6a90c592-2b3b-4088-8942- 2106776c863a/
Apakah ini terjadi karena masalah terkait keamanan atau masalah hak dengan CreateProcess atau hal lain? Tolong bantu karena saya terjebak dalam hal ini.
Terima kasih
EDIT: : Ini berfungsi dengan baik sebagai proses normal tetapi ketika saya menjalankannya di suatu layanan gagal. Jadi pada dasarnya masalahnya sekarang adalah layanan tidak mengakses jaringan berbagi. Adakah solusi untuk itu?
CREATE_NO_WINDOW
. Mungkin hanya mencoba menulis ke STDERR atau semacamnya. - person Ben   schedule 13.02.2014