С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
-5 / 0 / 1
Регистрация: 13.03.2014
Сообщений: 139

Права администратора при запуске

17.11.2017, 16:00. Показов 2947. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

Условия:
На компьютере два пользователя. Один - с права "Администратор". Другой - с правами "Пользователь".
Программа запускаясь под пользователем, должна запускаться с правами администратора.
Пользователь НЕ ЗНАЕТ пароля администратора. И никто вводить его не будет.
После запуска, программа проверяет себя на ПРАВА. Если АДминистраторские, то закачивает обновления, Если нет - старается запустить сама себя с админскими правами.
Программа установленна в Программ Файлес под администратором.

Задача:
Сделать возможность Запускать программу с АДМИНИСТРАТОРскими правами(чтобы она могла скачивать обновления). БЕЗ ВВОДА пароля.

Причина:
Закачивать обновления под пользователем можно только с администраторскими правами.
------------
После того как прошерстил интернет нашел вариант,
...Но я так понял данные пользователя вводятся в SEI.lpParameters . И То, пароль под runes не вводится. КАК БЫТЬ?

Delphi
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
function TUpdateOffice.GetAdmin(Var adam:string):boolean;
var
SEI: TShellExecuteInfo;
lpExitCode: DWORD;
 
begin
if IsUserAnAdmin then
  begin
result:=true;
Showmessage('With right');
 
exit
  end
      else begin
 
 
Showmessage('OUT right');
ZeroMemory(@SEI, SizeOf(SEI));
SEI.cbSize := SizeOf(TShellExecuteInfo);
SEI.Wnd := Handle;
SEI.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
SEI.lpVerb := PChar('runas');
SEI.lpParameters:= '';
//SEI.lpParameters :=PChar('Admin pass');
SEI.lpFile := PChar(Application.ExeName);
SEI.nShow := SW_SHOWNORMAL;
 
ShellExecuteEx(@SEI);
//Application.Terminate;
GetExitCodeProcess(SEI.hProcess, lpExitCode);
 
result:=false;
    end;
end;
Добавлено через 1 час 46 минут
Проблема была решена через

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TUpdateOffice.ZapuskPro(Var adam:string);
  var
startupinfo: _STARTUPINFOA;
processinformation: _PROCESS_INFORMATION;
  begin
         ZeroMemory(@startupinfo, SizeOf(_STARTUPINFOA));
  startupinfo.cb:=SizeOf(_STARTUPINFOA);
  startupinfo.dwFlags:=STARTF_USESHOWWINDOW;
  startupinfo.wShowWindow:=SW_SHOW;
  if CreateProcessWithLogonW(pchar(alo), nil, pchar(apa), 0, nil, Pchar(adam), 0, nil, nil, startupinfo, processinformation) then
  begin
    CloseHandle(processinformation.hThread);
    CloseHandle(processinformation.hProcess);
  end
  else RaiseLastOSError;
Остался другой вопрос.
Почему когда программа запускается под пользователем - она имеет доступ к реестру
HKEY_CURRENT_USER\Software\MyProgram
А когда запускается у пользователя под администраторскими правами , то нет.
(Данные идентичные в ветке и под админом и под пользователем)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.11.2017, 16:00
Ответы с готовыми решениями:

Права администратора в программе написанной на delphi xe3
Здравствуйте, программисты! Столкнулся с такой проблемой. Добавление собственного манифеста в программу. Раньше, когда добавлял...

Права администратора при запуске
Добрый вечер, подскажите пожалуйста как можно НОРМАЛЬНО запустить программу с правами администратора сразу при запуске. Права...

При запуске запрашивать права администратора, как?
Вот, простой способ: самому поставить галочку чтоб запускалось всегда от админа !, А как сделать чтоб программно это можно б было...

10
500 / 346 / 200
Регистрация: 20.10.2016
Сообщений: 1,101
17.11.2017, 20:12
Цитата Сообщение от 2icER Посмотреть сообщение
Данные идентичные в ветке и под админом и под пользователем
Данные идентичные, но ветки эти разные, ибо HKEY_CURRENT_USER это ссылка на ветку реестра конкретного пользователя, от имени которого запущено ПО. Т.е. вы стартанули ПО от обычного юзера, потом что-то делаете от имени админа, возможно меняете реестр в HKCU, потом, возможно (не вижу всего кода поэтому хз) пытаетесь прочесть данные HKCU из той части кода которая работает под обычным юзером. Отсюда и проблемы.
0
-5 / 0 / 1
Регистрация: 13.03.2014
Сообщений: 139
17.11.2017, 20:59  [ТС]
TFullControl,
Реестр не меняется. Программа просто считывает его.

А если бы я данные залил бы не в HKCU, а в HKLM. Какие подводные камни при такой работе?
0
500 / 346 / 200
Регистрация: 20.10.2016
Сообщений: 1,101
17.11.2017, 21:09
Цитата Сообщение от 2icER Посмотреть сообщение
Реестр не меняется. Программа просто считывает его.
Как вы это делаете известно только вам.
Цитата Сообщение от 2icER Посмотреть сообщение
А если бы я данные залил бы не в HKCU, а в HKLM. Какие подводные камни при такой работе?
Да никаких, только админ права нужны.
Разве только у вас доменные тачки на которых через групповые политики админами домена порезано хз сколько прав локального админа.
0
-5 / 0 / 1
Регистрация: 13.03.2014
Сообщений: 139
17.11.2017, 22:00  [ТС]
Цитата Сообщение от TFullControl Посмотреть сообщение
Как вы это делаете известно только вам.
Delphi
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
procedure TUpdateOffice.FormCreate(Sender: TObject);
var
 reg : tregistry;
 a:string;
begin
 
//Sleep(300000);
//Showmessage('Стартуем программу');
 
  reg := tregistry.create;
  //считываем из базы. Если считалось, то хорошо, если нет, то создаем
  try
    reg.RootKey := HKEY_CURRENT_USER;//HKEY_LOCAL_MACHINE;
  // Showmessage('true');
    reg.OpenKey('Software\MyProg',true);
   //Showmessage('S:');
   if reg.ReadString('Sad')<>'' then Sad:=reg.ReadString('Sad') else Sad:='';
   if reg.ReadString('SLo')<>'' then SLo:=reg.ReadString('SLo') else SLo:='';
    if reg.ReadString('SPa')<>'' then SPa:=DeCrypt(reg.ReadString('SPa'))else SPa:='';
 
    if reg.ReadString('BNa')<>'' then BNa:=reg.ReadString('BNa')else BNa:='';
    if reg.ReadString('BLo')<>'' then BLo:=reg.ReadString('BLo')else BLo:='admin';
    if reg.ReadString('BPa')<>'' then BPa:=DeCrypt(reg.ReadString('BPa'))else BPa:='';
 
    if reg.ReadString('ULo')<>'' then ULo:=reg.ReadString('ULo')else ULo:='';
    if reg.ReadString('UPa')<>'' then UPa:=DeCrypt(reg.ReadString('UPa'))else UPa:='';
 
    if reg.ReadString('ProName')<>'' then ProName:=reg.ReadString('ProName')else ProName:='';
    if reg.ReadString('ProAdress')<>'' then ProAdres:=reg.ReadString('ProAdress')else ProAdres:=ExtractFilePath(Application.ExeName);
 
    if reg.ReadString('ALo')<>'' then ALo:=reg.ReadString('ALo')else ALo:='';
    if reg.ReadString('APa')<>'' then APa:=DeCrypt(reg.ReadString('APa'))else APa:='';
 
 
  except
    //showmessage('реестр не считали');
 
  end;
   reg.free;
теперь и Вам известно как я обращаюсь к реестру.


--------------------------------------------------------------

Цитата Сообщение от TFullControl Посмотреть сообщение
Да никаких, только админ права нужны.
т.е. по факту считывать сможет только если от админа запущено.
Инереесная делема..или только Пользователь читает в HKCU или только с админ.правами в HKLM

как можно разыграть еще вариант?
0
500 / 346 / 200
Регистрация: 20.10.2016
Сообщений: 1,101
17.11.2017, 22:09
Лучший ответ Сообщение было отмечено 2icER как решение

Решение

Цитата Сообщение от 2icER Посмотреть сообщение
как можно разыграть еще вариант?
Реестр это не единственно место куда можно писать всякую ересь, конфиг файлы тут ничем не хуже и спец папки для этого есть, как общий вариант для всех юзеров C:\ProgramData\Папка ПО

Какие ошибки ловим при попытке достучаться до реестра?
0
-5 / 0 / 1
Регистрация: 13.03.2014
Сообщений: 139
17.11.2017, 22:23  [ТС]
Цитата Сообщение от TFullControl Посмотреть сообщение
конфиг файлы тут ничем не хуже
Надо минимизировать количество файловю

Цитата Сообщение от TFullControl Посмотреть сообщение
спец папки для этого есть
ProgramData например?
Т.е. фактически мы туда можем залить программу, и тогда:
Под правами пользователя сможем копировать файлы? и запускать от туда же.
Или есть опять какие то НО?
0
500 / 346 / 200
Регистрация: 20.10.2016
Сообщений: 1,101
17.11.2017, 22:27
Цитата Сообщение от 2icER Посмотреть сообщение
ProgramData например?
Эта папка специально предназначена для записи в нее и изменения файлов ПО, админ права именно для манипуляций с этой папкой не нужны, в обычные же програмфайлсы без админ прав ничего не запишешь.
1
-5 / 0 / 1
Регистрация: 13.03.2014
Сообщений: 139
17.11.2017, 22:32  [ТС]
Цитата Сообщение от TFullControl Посмотреть сообщение
обычные же програмфайлсы без админ прав ничего не запишешь.
Именно из-за этого и началась вся эта заваруха. с правами для программы.
Но эта папка появилась только с 7 версии винды и с сервера 2008. верно?
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
18.11.2017, 01:23
Точнее с версии Vista, а не с семёрки.
0
-5 / 0 / 1
Регистрация: 13.03.2014
Сообщений: 139
01.12.2017, 17:12  [ТС]
Возник другой вопрос.
Запустить КОПИРОВАНИЕ С правами администратора Надо.

Отправляю в код из первого примера :

Delphi
1
2
if CreateProcessWithLogonW(pchar(alo), nil, pchar(apa), 0, nil, Pchar(adam), 0, nil, nil, startupinfo, processinformation) then
  begin
Следующие параметры:
Alo: Логин админа компьютера
Apa: Пароль админа компьютера
Adam: строка для CMD: объявляется в другой процедуре:

Delphi
1
2
3
4
5
  begin
adrS:=ProAdress+FilesForUpd[i];
adrL:=Proadres+'\'+FilesForUpd[i];
  a:='cmd /c copy /c /h /q /y '+AdrS+' '+AdrL+'';
  ZapuskPro(a,alo,apa);
В итоге не копирует.
Что упустил. В чем проблема может крыться?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.12.2017, 17:12
Помогаю со студенческими работами здесь

Возможно ли запросить права администратора при нажатии на checkbox?
При нажатии на checkbox запрос прав администратор. Если права администратора предоставлены, то сделать checkbox.checked := true, Если права...

Права Администратора
Вобщем проблема такая- когда запустил программу сдругой учетки (другого пользователя) она отказывается нормально работать- требует прав...

Права администратора
Есть код для запуска программы с правами администратора (на Win 7), при запуске появляется окно запустить прогу или нет, при выборе ДА,...

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

Права Администратора
Поставили задачу написать программу для чистки компьютера от лишних файлов ну типа ССleaner, так вот для удаления например лишних файлов в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru