Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 07.02.2018, 18:05   #11
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,063
Репутация: 2054

icq: 216409213
По умолчанию

Цитата:
3. Служба нужна для обновления софтины. аля Мозилла. Там отдельная служба для обновления, чтобы УАК не пугался. Ведь файлы софтины лежат в program files
Так и думал.

Цитата:
Архитектура такая: служба системная запускает софтину вышеуказанным способом (для обновления, для контроля...) Странно но софтина запущенная таким образом так же не видит appdata текущего юзера.
Тут и проблема в вашей архитектуре.
1. Ничего странного. Ведь ее запускает "системная служба". Почему она должна увидеть пользовательское?
2. Делайте как все нормальные делают (Хром, Драйвера и т.д.). Запускайте обновлятор от пользователя, как обычную прогу, а потом через сервис запрашивайте повышение привилегий/делегируйте сервису действия, требующие права.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 07.02.2018, 21:04   #12
kleric
Пользователь
 
Регистрация: 27.07.2009
Сообщений: 20
Репутация: 10
По умолчанию

Большое спасибо, что откликаетесь на мои вопросы, но вместе мы придём к единому решению!)
А теперь вопрос на миллион биткоинов))
Почему, когда служба вызывает саму себя через код №2 (из функции main службы), appdata текущего юзера (который выполнил логон походу) видится службой процессом который по совместительству и служба (код 1)
зы софтина делает скрины для текущего юзера...
зызы и успешно их кладёт в appdata
зызызы НО, мне не ясно как вернуть эту самую current user app data службе (можно через файлы или порты)

код 1
Код:


      if AnsiUpperCase(ParamStr(1)) = '-SCREEN' then
      begin
        doCreateScreen(GetSpecialFolderPath(CSIDL_APPDATA)+'\Agent\log\2'+RandomString(7)+doGetUnixTimeStr()+'.png', errStr);
        exit;
      end;

код2
Код:

function RunScreenShot(): DWORD;
const
  WINDOW_STATION_NAME = 'Winsta0';
  APPLICATION_DESKTOP_NAME = 'Default';
var
  SI: TStartupInfo;
  PI: TProcessInformation;
  hInteractiveToken: THandle;
begin
  Result := NO_ERROR;
  hInteractiveToken := doGetCurrentToken();

  if hInteractiveToken = INVALID_HANDLE_VALUE then
  begin
    Result := GetLastError;
    Exit;
  end;

  try
    ZeroMemory(@SI, SizeOf(TStartupInfo));
    SI.cb := SizeOf(TStartupInfo);
    SI.lpDesktop := PChar(WINDOW_STATION_NAME + '\' +  APPLICATION_DESKTOP_NAME);
    SI.wShowWindow := SW_HIDE;
    SI.dwFlags := STARTF_USESHOWWINDOW;

    if not CreateProcessAsUser(hInteractiveToken,
      PChar(ParamStr(0)),
      PChar('"' + ParamStr(0) + '" -screen'),
      nil, nil, False,
      NORMAL_PRIORITY_CLASS, nil, nil, SI, PI) then
      Result := GetLastError;
  finally
    CloseHandle(hInteractiveToken);
  end;
end;


Последний раз редактировалось kleric; 07.02.2018 в 21:07.
kleric вне форума   Ответить с цитированием
Старый 07.02.2018, 21:28   #13
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,063
Репутация: 2054

icq: 216409213
По умолчанию

Потому что вы запускаете новый инстанс от ПОЛЬЗОВАТЕЛЯ. Вот вам и видно пользовательское.
А когда вы запускаете как службу, от спец. учетки, то и видится спецю учетка.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать путь к папке Program Files Miller-1981 C++ Builder 3 21.07.2012 11:35
Путь в APPDATA Raikerian Паскаль 12 17.09.2011 17:28
Путь до папки AppData в зависимости от Юзера Polotenchik Microsoft Office Word 5 13.06.2011 02:40
Путь к AppData -=L.Morgan=- Общие вопросы Delphi 2 04.05.2009 21:12
Функция CallWndProc. Получить путь к папке или файлу к которому преднозначено сообщение Irat Помощь студентам 1 17.02.2008 00:36


02:06.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru