powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Запуск себя (программы) из-под другого пользователя
22 сообщений из 22, страница 1 из 1
Запуск себя (программы) из-под другого пользователя
    #39738694
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую!

Подскажите, в правильном ли направлении веду поиски?

Итак, есть необходимость, чтобы программа после запуска сама себя бы логинила из-под другого юзера (вводя его логин/пароль и т.д.).

Есть возможность, конечно, запустить свой Exe'шник с помощью функции CreateProcessWithLogonW , но мне захотелось странного, а именно способности программы произвести это в своем процессе . Это реально вообще? Хотя бы у потока (TThread), если по-другому никак.
...
Рейтинг: 0 / 0
Запуск себя (программы) из-под другого пользователя
    #39738698
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде нашлось что-то:

https://stackoverflow.com/questions/23479047/elevated-privileges-with-specific-user-password-on-delphi

1) use LogonUser() to login to the desired user account,
2) then ImpersonateLoggedOnUser() to have the calling thread impersonate that user before performing the desired tasks,
3) and then RevertToSelf() when finished to stop impersonating.
...
Рейтинг: 0 / 0
Запуск себя (программы) из-под другого пользователя
    #39738699
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если бы мне хотелось так поизвращаться, я бы начал копать в направлении LogonUser() +
ImpersonateLoggedOnUser().
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запуск себя (программы) из-под другого пользователя
    #39738702
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён,

вроде оно, сервера так делают вроде бы
...
Рейтинг: 0 / 0
Запуск себя (программы) из-под другого пользователя
    #39738713
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
окей спасибо
...
Рейтинг: 0 / 0
Запуск себя (программы) из-под другого пользователя
    #39738725
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён,

Вариант со службой не рассматриваете?
...
Рейтинг: 0 / 0
Запуск себя (программы) из-под другого пользователя
    #39738731
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

думал об этом, но тогда простая программа превратится в этакого монстра с клиентом и серверной частью в виде службы. Но обещаю, я еще раз подумаю :)
...
Рейтинг: 0 / 0
Запуск себя (программы) из-под другого пользователя
    #39738743
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда я не знал о функцииКроик СемёнRevertToSelf()то делал так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
type
  PLogonUserThreadInfo = ^TLogonUserThreadInfo;
  TLogonUserThreadInfo = record
    Token: THandle;
    Handle: THandle;
  end;

function LogonUserThread(const AUserName, ADomain, APassword: string;
  ALogonType: Cardinal; AThreadHandle: THandle): Pointer;
var
  LLogonInfo: PLogonUserThreadInfo absolute Result;
  LLogonToken: THandle;
  LImpersonateToken: THandle;
begin
  GetMem(LLogonInfo, SizeOf(LLogonInfo^));
  try
    LLogonInfo^.Token := 0;
    if not OpenThreadToken(AThreadHandle, TOKEN_IMPERSONATE, True, LLogonInfo^.Token) and
       (GetLastError <> ERROR_NO_TOKEN)
    then
      RaiseLastOSError;
    try
      Win32Check(LogonUser(PChar(AUserName), PChar(ADomain), PChar(APassword),
        ALogonType, LOGON32_PROVIDER_DEFAULT, LLogonToken));
      try
        Win32Check(DuplicateToken(LLogonToken, SecurityImpersonation, @LImpersonateToken));
        try
          Win32Check(SetThreadToken(@AThreadHandle, LImpersonateToken));
        finally
          CloseHandle(LImpersonateToken);
        end;
      finally
        CloseHandle(LLogonToken);
      end;
    except
      CloseHandle(LLogonInfo^.Token);
      raise;
    end;
    LLogonInfo^.Handle := AThreadHandle;
  except
    if LLogonInfo^.Token <> 0 then
      CloseHandle(LLogonInfo^.Token);
    FreeMem(LLogonInfo);
    raise;
  end;
end;

procedure LogoffUserThread(AData: Pointer);
var
  LLogonInfo: PLogonUserThreadInfo absolute AData;
begin
  try
    Win32Check(SetThreadToken(@LLogonInfo^.Handle, LLogonInfo^.Token));
  finally
    if LLogonInfo^.Token <> 0 then
      CloseHandle(LLogonInfo^.Token);
    FreeMem(LLogonInfo);
  end;
end;

...
Рейтинг: 0 / 0
Запуск себя (программы) из-под другого пользователя
    #39738770
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используй shell с runas и не парься.
...
Рейтинг: 0 / 0
Запуск себя (программы) из-под другого пользователя
    #39738791
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГирлионайльдоИспользуй shell с runas и не парься.конеш, на продакшн-сервер самое оно
...
Рейтинг: 0 / 0
Запуск себя (программы) из-под другого пользователя
    #39738793
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик СемёнDarkMaster,

думал об этом, но тогда простая программа превратится в этакого монстра с клиентом и серверной частью в виде службы. Но обещаю, я еще раз подумаю :)
Э... я вот недавно что-то подобное делал, написал крошечный лончер - службу, который запускает приложение и просто следит, не упало ли оно, и презапускает, если надо.
...
Рейтинг: 0 / 0
Запуск себя (программы) из-под другого пользователя
    #39738794
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой, это, пожалуй, не совсем в тему.
...
Рейтинг: 0 / 0
Запуск себя (программы) из-под другого пользователя
    #39738971
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл ЭраЭ... я вот недавно что-то подобное делал, написал крошечный лончер - службу, который запускает приложение и просто следит, не упало ли оно, и презапускает, если надо.
Поделишься исходниками? Тоже думал насчет такой запускалки
...
Рейтинг: 0 / 0
Запуск себя (программы) из-под другого пользователя
    #39738993
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2,

вечером, если получится.
...
Рейтинг: 0 / 0
Запуск себя (программы) из-под другого пользователя
    #39739369
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...не, и вечером тоже не получится: дома этих исходников нет, а на работе не очень скоро появлюсь.
...
Рейтинг: 0 / 0
Запуск себя (программы) из-под другого пользователя
    #39739401
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл Эраслужбу, который запускает приложение и просто следит, не упало ли оно, и презапускает, если надо.От чьего имени запускается приложение? Где храните логин-пароль пользователя?
...
Рейтинг: 0 / 0
Запуск себя (программы) из-под другого пользователя
    #39739408
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Фэйтл Эраслужбу, который запускает приложение и просто следит, не упало ли оно, и презапускает, если надо.От чьего имени запускается приложение? Где храните логин-пароль пользователя?

Нигде пароли не храню. Сервис инсталлирует админ. У него все пароли и явки. А приложение запускается от того же имени.
Не знаю, от чьего имени... Имя пользователя "Система". Ну, GetUserName() возвращает строку "система". Наверное, это так и есть.
...
Рейтинг: 0 / 0
Запуск себя (программы) из-под другого пользователя
    #39739442
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати вот да, хранение паролей. Как, интересно, это сделано для служб....

Фантазия: хранится в особой секции реестра, в которую если уж попало, значит администратор сохранил. Причем сразу в виде хэша.
...
Рейтинг: 0 / 0
Запуск себя (программы) из-под другого пользователя
    #39740000
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл Эраприложение запускается от того же имениПонятно. Тривиальное решение. Зачем тогда это приложение нужно? Сразу бы сервис и делал
...
Рейтинг: 0 / 0
Запуск себя (программы) из-под другого пользователя
    #39740169
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Фэйтл Эраприложение запускается от того же имениПонятно. Тривиальное решение. Зачем тогда это приложение нужно? Сразу бы сервис и делал
Изначально сервис долго не нужен был, сервис в большинстве случаев и сейчас не нужен, и теперь - зачем ломать то, что хорошо работает?
...
Рейтинг: 0 / 0
Запуск себя (программы) из-под другого пользователя
    #39759551
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик СемёнКстати вот да, хранение паролей. Как, интересно, это сделано для служб....


сегодня наткнулся на одну штуку и думаю, а вдруг это ответ: Windows Credential Locker
...
Рейтинг: 0 / 0
Запуск себя (программы) из-под другого пользователя
    #39759554
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Запуск себя (программы) из-под другого пользователя
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]