Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Проблема с Create process


Автор: Sponger 23.6.2006, 12:32
Как задать процессу запускаемому через Create process права такие как у основной программы.

Проблема в том что запускаемый процесс не имеет прав на запись в сетевую папку, хотя если этот же процесс запускать через командную строку  с теми же параметрами то все проходит нормально. 

Автор: _hunter 23.6.2006, 12:55
права в окнах задаются не на уровне программ а на уровне пользователей.
поэтому программа, запущенная программой (если не имеет место CreateProcessAsUser), имеет те же права что и запустившая ее программа 

Автор: Sponger 23.6.2006, 13:57
Я это понимаю, но у меня как раз такой случай.

 

Автор: Snowy 23.6.2006, 14:11
А ты секьюрить аттрибуты указываешь, или просто nil вместо них даёшь? 

Автор: Sponger 23.6.2006, 15:58
nil

Я не знаю что туда писать. 

Автор: _hunter 23.6.2006, 16:10
покажи код.
+ посмотри выполняются ли какие-то действия с хендлом процесса (если код в наследство остался) 

Автор: Snowy 23.6.2006, 16:17
Цитата(Sponger @  23.6.2006,  15:58 Найти цитируемый пост)
Я не знаю что туда писать. 
Пиши туда размер структуры, nil и false; 

Автор: Sunvas 23.6.2006, 19:03
Попробуй Shellexecute и winexec вместо createprocess использовать. 

Автор: Sponger 24.6.2006, 05:02
Код

function imageReSize(sourceName, targetName, sPathName : string; DOTPicture : integer; GrayColor : boolean) : boolean; // GrayColor = TRUE - grayscale
var fileNameExecute, sParameters : string;
    pi : TProcessInformation;
    si : TStartupInfo;
begin
  fileNameExecute := fmain.sPathName[0] + '\nconvert.exe';

  if GrayColor then sParameters := '-out jpeg -grey 256 -q 80 -ratio -resize 1024 0 -o "' + sPathName + '\' + targetName + '" "' + sourceName + '"'
    else sParameters := '-out jpeg -q 70 -ratio -resize 1024 0 -o "' + sPathName + '\' + targetName + '" "' + sourceName + '"';

  ZeroMemory(@si, sizeof(si));
  si.cb := SizeOf(si);
  si.dwFlags := STARTF_USESHOWWINDOW;
  si.wShowWindow := SW_HIDE;
  if CreateProcess(nil, PChar(fileNameExecute + ' ' + sParameters), nil, nil, false, 0, nil, nil, si, pi) then begin
    WaitForSingleObject(pi.hProcess, INFINITE);
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
    result := TRUE;
  end  else result := FALSE; 
end;


ShellExecute тоже не работает.

Т.е. все это работает, но только у определенных пользователей.
У остальных пользователей, права на доступ идентичные, но не работает. Мистика.

В принципе нашел причину, но не пойму почему не работает.

sourceName - этот параметр это существующий файл.
В процедуре которая вызывает эту функцию берутся все файлы соответствующие маске *.jpg и по одному передаются в sourceName.
т.к. вот. Список файлов которые мне нужны находятся в TJvFileListBox. Вот этот компонент и блокирует файл. Причем блокирует работу и по сети и локально тоже.
Если использую FindFirst,  FindNext все работает нормально. 

Я вот и не понимаю почему у пользователей у которых абсолютно идентичные права, так получается.

А я, блин, с нашим сисадмином весь сервак перелопатил, думали где-то права доступа не правильно указаны.   

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)