Вверх ↑
Этот топик читают: Гость
Ответов: 4621
Рейтинг: 746
#46: 2022-01-20 22:38:20 ЛС | профиль | цитата
sansey73 писал(а):
На подобии Mode в компоненте WinExec.
В коде компонента после строчки si.cb:=sizeof(si); добавить строки
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := SW_HIDE; // И другие значения из свойства WinExec.Mode
Подобного результата можно добиться с помощью WinExec.doShellExec при WinExec.Action=RunAsUser. Только будет выдавать системный диалог для входа пользователя.

Вероятно, для полноты картины принцип этого кода можно добавить в WinExec. Например, создать метод doRunAsUser и добавить точки-свойства для логина-пароля.

Редактировалось 2 раз(а), последний 2022-01-20 23:03:54
карма: 26

0
Ответов: 28
Рейтинг: 0
#47: 2022-01-21 05:15:39 ЛС | профиль | цитата
Netspirit, спасибо, добрый человек, работает!
принцип этого кода можно добавить в WinExec

Всеми руками за! Если не сильно затруднит, прошу добавить фичу в компонент и выложить в репозиторий.
карма: 0

0
Разработчик
Ответов: 26066
Рейтинг: 2120
#48: 2022-01-21 05:20:51 ЛС | профиль | цитата
sansey73 писал(а):
выложить в репозиторий

Netspirit не имеет доступа к SVN, к сожалению. Пусть выкладывает правки, я добавлю.
карма: 22

0
Ответов: 4621
Рейтинг: 746
#49: 2022-01-24 23:10:16 ЛС | профиль | цитата
WinExec с добавленным методом doRunAsUser и свойствами/точками UserName/Password.
Не знаю стоит ли делать аналог и doConsoleExec. Можно сделать, когда понадобится.

Есть пример. Проверьте выдаёт ли код ошибки при неправильных входящих данных. На Windows XP в этом месте странное поведение - GetLastError() в процедуре THIWinExec._work_doRunAsUser при ошибке выдаёт код 0, тогда как _debug(GetLastError) внутри THIWinExec.RunProcessAsUser сразу после CreateProcessWithLogonW() покажет нормальный код.
карма: 26

0
Разработчик
Ответов: 26066
Рейтинг: 2120
#50: 2022-01-25 00:17:23 ЛС | профиль | цитата
Netspirit писал(а):
Проверьте выдаёт ли код ошибки при неправильных входящих данных

Таак, мне проверить вряд ли удастся. У меня UAC начисто выключен. Так что, тестируйте, после добавлю.
карма: 22

0
Ответов: 28
Рейтинг: 0
#51: 2022-01-25 07:56:21 ЛС | профиль | цитата
На Windows 10 не удалось запустить блокнот ни при каком раскладе. Всегда код ошибки 0.
Пробовал от имени локального и доменного пользователей:
locuser
localhost\locuser
domuser
domen\domuser
На Семёрке работает лишь в случае указания полного пути к исполняемому файлу (или, если путь имеется в переменной PATH) и только с именем пользователя, без указания домена.
Например от имени User блокнот запускается, а от имени localhost\User - ошибка 0.
Far без проблем запустился с указанием такого пути: c:\Program Files\Far Manager\Far.exe
без кавычек, не смотря на пробелы в пути.

Редактировалось 1 раз(а), последний 2022-01-25 08:02:45
карма: 0

0
Ответов: 4621
Рейтинг: 746
#52: 2022-01-25 15:24:26 ЛС | профиль | цитата
Домен указывать не нужно. У пользователя должен быть задан пароль.
sansey73 писал(а):
указания полного пути к исполняемому файлу (или если путь имеется в переменной PATH)
Это всегда так. Файл ищется либо в текущем каталоге (указать WorkingDir, либо смотреть какой подставляется новому процессу по умолчанию), либо в PATH (причем того пользователя, от имени которого запускается).

nesco писал(а):
У меня UAC начисто выключен.
Не должно влиять.

Редактировалось 1 раз(а), последний 2022-01-25 15:25:13
карма: 26

0
Разработчик
Ответов: 26066
Рейтинг: 2120
#53: 2022-01-25 17:11:28 ЛС | профиль | цитата
Netspirit писал(а):
У пользователя должен быть задан пароль

Вот именно, у меня нет пароля. Я вхожу в систему без экрана входа. Как я смогу проверить компонент не имея пароля? И как-нибудь тут без меня потестируйте, я сейчас над другим пока работаю, не хочу отвлекаться.
карма: 22

0
Ответов: 4621
Рейтинг: 746
#54: 2022-01-25 19:18:47 ЛС | профиль | цитата
nesco писал(а):
Как я смогу проверить компонент не имея пароля?
Пароль должен быть у пользователя, от которого запускаем. То есть, создать в системе пользователя с паролем, желательно зайти под ним и выйти, а затем под собой запустить от его имени (схема примера приложена). Если тебе неудобно - пусть другие протестируют.
карма: 26

0
Ответов: 4621
Рейтинг: 746
#55: 2022-01-26 10:01:01 ЛС | профиль | цитата
Поправлена выдача кода ошибки.

Last error сбрасывался при выходе из процедуры, когда автоматически освобождались созданные WideString с помощью API-функции.

Редактировалось 2 раз(а), последний 2022-01-26 10:01:42
карма: 26

0
Ответов: 28
Рейтинг: 0
#56: 2022-01-27 05:18:33 ЛС | профиль | цитата
Спасибо, работает, и на десятке тоже.
Правда только от имени локальных учёток.
карма: 0

0
Ответов: 4621
Рейтинг: 746
#57: 2022-01-27 14:08:05 ЛС | профиль | цитата
Так и предполагалось. А какие ещё бывают и как это протестировать? Нужно наличие свойства Domain или возможность указывать домен в имени пользователя?
карма: 26

0
Ответов: 28
Рейтинг: 0
#58: 2022-01-28 08:31:26 ЛС | профиль | цитата
Да, есть еще доменные учётки (не локальные) типа я зарегистрирован в ActivDirectory как sansey73 и комп принадлежит домену mycorp.
Тогда в комп можно зайти под именем mycorp\sansey73
Нужно наличие свойства Domain или возможность указывать домен в имени пользователя?

Именно так.
карма: 0

0
Ответов: 4621
Рейтинг: 746
#59: 2022-01-29 15:24:24 ЛС | профиль | цитата
sansey73, попробуй этот вариант. Имя пользователя домена указывать в формате пользователь@домен . Для локальных пользователей - просто логин.
карма: 26

0
Ответов: 28
Рейтинг: 0
#60: 2022-02-01 07:10:18 ЛС | профиль | цитата
Доменный пользователь тоже работает!
карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)