ProgramFiles, UAC, права Администратора...

Модератор: Модераторы

Re: ProgramFiles, UAC, права Администратора...

Сообщение vitaly_l » 10.03.2012 21:07:11

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

Код: Выделить всё
function TSetupForm.RunAsAdmin(hWnd : HWND; aFile : String; aParameters : String):bool;
Var
Sei : TShellExecuteInfoA;
begin
//  Fillchar(sei,SizeOf(sei),0);  - это я забанил, а то она работала но ругалась (по правилам должно быть без)
  sei.cbSize := SizeOf(sei);
  sei.Wnd    := hWnd;
  sei.fMask  := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
  sei.lpfile := PChar(aFile);
  sei.lpVerb := 'runas';
  sei.lpParameters := PChar(aParameters);
  sei.nShow := SW_SHOW;
  Result :=  ShellExecuteExA(@sei);
end;


выше приведено как запускается инсталяция
а потом, рабочую программу (из инсталятора) перезапускаю вот так:

Код: Выделить всё
  if CheckBox3.Checked then
      begin
        ShellExecute(0, 'Open', PChar(FFileNew), nil, nil, sw_hide);
        Close;
      end;


Но она опять перезапускается с правами Админа...
Вопрос: Как перезапустить программу - без прав Администратора???


.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: ProgramFiles, UAC, права Администратора...

Сообщение Mr.Smart » 10.03.2012 21:19:41

vitaly_l я не очень понял вашего алгоритма....
vitaly_l писал(а):Вопрос: Как перезапустить программу - без прав Администратора???

А почему именно непосредственно программа сама должна запрашивать права админа? Права админа, я думаю, в вашем случае достаточно инсталятору.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: ProgramFiles, UAC, права Администратора...

Сообщение vitaly_l » 10.03.2012 21:39:25

.

Так мне наоборот нужно...
Инсталятор получил права и установил программу, а после инсталяции сам её запускает...
Но запускает тоже с правами администратора... а нужно без них...

Вопрос: Как в такой ситуации запустить программу - без прав Администратора???


.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: ProgramFiles, UAC, права Администратора...

Сообщение v-t-l » 11.03.2012 09:18:24

WindowsXP - runas.exe
v-t-l
энтузиаст
 
Сообщения: 727
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: ProgramFiles, UAC, права Администратора...

Сообщение vitaly_l » 11.03.2012 10:09:36

Спасибо добрый v-t-l
Однако у runas следующие параметры:
runas [{/profile|/noprofile}] [/env] [/netonly] [/smartcard] [/showtrustlevels] [/trustlevel] /user:учетная_запись_пользователя program
И чего я должен ему (runas.exe) сказать, чтобы запустить программу: БЕЗ прав администратора?

Как из программы, у которой есть права администратора, запустить другую(новую) программу так...
чтобы (новая) права администратора потеряла?! <- Вот в чём вопрос.

Это нужно, если пользователь выбрал "Запустить после установки".

Желательно с помощью ShellExecute итп.

Заменить lpVerb := 'runas' на lpVerb := 'open' - желаемого результата не даёт.
Спасите/помогите...
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: ProgramFiles, UAC, права Администратора...

Сообщение NTFS » 11.03.2012 11:10:33

В консоли выполни runas /? и будет тебе счастье.
NTFS
постоялец
 
Сообщения: 388
Зарегистрирован: 05.11.2007 14:57:50
Откуда: Краснодар

Re: ProgramFiles, UAC, права Администратора...

Сообщение vitaly_l » 11.03.2012 12:54:03

Нет мне счастья...

CreateProcess(nil,PChar('c:\win_dir\system32\runas.exe'),nil,nil,False,0,nil,nil,si,pi) - runas запускается.
CreateProcess(nil,PChar(c:\win_dir\notepad.exe'),nil,nil,False,0,nil,nil,si,pi) - notepad запускается.
CreateProcess(nil,PChar('c:\win_dir\system32\runas.exe /noprofile c:\win_dir\notepad.exe'),nil,nil,False,0,nil,nil,si,pi) - notepad не запускается
вывод: я что-то не так делаю... Что я не так делаю???
А без runas можно запустить пограмму БЕЗ предоставления ей(запускаемой программе) прав админа ???


.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: ProgramFiles, UAC, права Администратора...

Сообщение alexey38 » 11.03.2012 16:18:56

1. Права на создаваемые файлы назначаются так, как установлено для папки. Если папка пользовательская, и файл создали под админом, то у пользователя будут права.
2. Запускать можно от любого пользователя, просо нужно знать имя пользователя. Администратор - это частный случай пользователя.
3. Имя текущего пользователя видно по команде set. Наверное есть функция, которая возвращает это же имя.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: ProgramFiles, UAC, права Администратора...

Сообщение stikriz » 11.03.2012 17:15:27

vitaly_l писал(а): что же, обойти этот ГЕНОЦИД по отношению к написанию свободных программ - никак нельзя???

Создать свой каталог, например: "C:\Моя прога без геноцида\" и инсталировать туда, писать все туда, потом грохать там же. Лазарус так и делает, кстати. И пусть Бил Гейтс плачет от количества папок в корнях дисков по всей земле! :-)
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: ProgramFiles, UAC, права Администратора...

Сообщение vitaly_l » 11.03.2012 17:49:36

Так как говорит МУЛЬТИУВАЖАЕМЫЙ stikriz - всё работает!
С правами админа - тоже всё работает.
Без прав админа - тоже всё работает.
Но!!!
Одна маленькая мелочь...
Сразу после инсталляции, программа предлагает себя запустить...
Инсталляция происходит с правами Админа... (иначе невозможно записать в директорию ProgramFiles)
И когда она себя запускает: Права инсталлятора(админа) "по наследству" - передаются и запускаемой программе...
Соответственно ini и все записи ПЕРВОГО запуска программы - тоже записываются с правами админа...
и потом без прав админа их изменить НЕВОЗМОЖНО!

runas - не работает... как дальше жить...
Как запустить runas??? в смысле: почему runas - не запускает даже блокнот???...

ПОЖАЛУЙСТА!!!: ПРИБЕЙТЕ БЛИН-ГЕЙТСА или: Как отлючить права Админа для запускаемой программы?????
Неужели никто не сталкивался???

Спасите - помогите....

.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: ProgramFiles, UAC, права Администратора...

Сообщение WAYFARER » 11.03.2012 22:33:17

vitaly_l, по поводу runas - не хватает параметров - вы запускаете программу, но не указываете от чьего имени ей запускаться. (первая ссылка из гугла разъяснит ситуацию - http://www.windowsfaq.ru/content/view/85/57/)
Но вам не runas нужен.

Если вы запускаете программу с повышением привилегий и программа создает файл в каталоге доступно на запись пользователю, то файл будет доступен на запись и с правами обычного пользователя (если конечно вы вручную не сменили владельца файла или не поставили ему ro).
Если у вас происходит иное - значит дело в неправильной работе системы, либо же, вы создаете файл не там где нужно)), например в корне диска с:)) (это вам не Windows XP, это всё таки уже можно назвать ОС))))
Для хранения пользовательских данных используйте каталоги предназначенные для этого (Users/username/AppData) или Documents, или просто в корневой папке пользователя, а саму программу кладите в Program files.

Для получения путей воспользуйтесь функцией GetEnvironmentVariable.
Список переменных Windows тут - http://ru.wikipedia.org/wiki/%D0%9F%D0% ... 8B_Windows

vitaly_l писал(а):Вот код запуска с правами админа

Уберите это. У вас есть UAC, вот с помощью него и повышайте привилегии. (Правой кнопкой - Запуск от имени Администратора, или в свойствах галочка "запускать от имени администратора")

ЗЫ. Существуют правила и стандарты, которые нужно неукоснительно соблюдать если не хотите создавать проблемы себе, пользователям и админам)).
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 517
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Re: ProgramFiles, UAC, права Администратора...

Сообщение vitaly_l » 11.03.2012 23:03:47

Громадное спасибо WAYFARER !
runas - это совсем про другое.
GetEnvironmentVariable и список переменных - это супер, спасибо(рекомендую всем, там всё кратко и понятно).

Но дилема немного в другом...
Для меня не составляет труда раскидать по нужным директориям - это просто.
Суть в том что, ИНСТАЛЯТОР - должен запускаться с правами Админа (из-за установки ProgramFiles).
Я это сделал, он запускает устанавливает всё как надо и в конце, ВНИМАНИЕ: запускает установленную программу...

И вот тут происходит СТРАШНОЕ И КОВАРНОЕ!!!, а именно:
ИНСТАЛЯТОР ПЕРЕДАЁТ ПРАВА АДМИНА - ЗАПУСКАЕМОЙ ПРОГРАММЕ...
И.... О УЖАС!!! ПРОГРАММА СОЗДАЁТ ini итд любые file с правами админа...
и потом, при перезапуске уже с обычными правами ничего изменить не может...

Если не запускать, программу инсталятором, то всё работает как надо,
а когда программу инсталлятор запускает, то программе передаются права админа...
Так вот я и пытаюсь выяснить: КАК ПРАВА АДМИНА ПРОГРАММЕ - НЕ ПЕРЕДАВАТЬ???

КАК ЗАПУСТИТЬ ПРОГРАММУ (с помощбю Shell итп) БЕЗ ПРАВ АДМИНА,
ИЗ ПРОГРАММЫ, У КОТОРОЙ ПРАВА АДМИНА ЕСТЬ???


Спасите - помогите: ПОЖАЛУЙСТА.

Или вот ещё можно так решить...

КАК ЗАПИСАТЬ INI ФАЙЛ С ДОСТУПНЫМИ ВСЕМ ПРАВАМИ, ЕСЛИ ЕГО ЗАПИСЫВАЕТ ПРОГРАММА У КОТОРОЙ ПРАВА АДМИНА???


Спасите - помогите: ПОЖАЛУЙСТА.


.

Добавлено спустя 26 минут 56 секунд:
vitaly_l писал(а):Вот код запуска с правами админа

WAYFARER писал(а):Уберите это. У вас есть UAC, вот с помощью него и повышайте привилегии. (Правой кнопкой - Запуск от имени Администратора, или в свойствах галочка "запускать от имени администратора")

ЗЫ. Существуют правила и стандарты, которые нужно неукоснительно соблюдать если не хотите создавать проблемы себе, пользователям и админам)).


ЭТО И ЕСТЬ КОД ПО ПРАВИЛАМ ВЗЯТ ИЗ MSDN.
А правой кнопкой тоже можно, но это как раз "не правильно" по отношению к пользователю...
Код предлагает тоже самое, что и правая кнопка после нажатия "запускать от имени администратора",
а именно запускает UAC, который спрашивает разрешение на запуск (так что все права в целости и сохранности).

АУ, ЛЮДИ... ПОЖАЛУЙСТА, СПАСИТЕ-ПОМОГИТЕ, ЕСЛИ КТО СТАЛКИВАЛСЯ:

КАК ЗАПИСАТЬ, ДОСТУПНЫЙ ВСЕМ ПОЛЬЗОВАТЕЛЯМ: INI ФАЙЛ, ИЗ ПРОГРАММЫ У КОТОРОЙ ПРАВА АДМИНА???


.
.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: ProgramFiles, UAC, права Администратора...

Сообщение VirusFree » 11.03.2012 23:50:07

Если не желаете хранить ini в папках пользователей, то,
нужной группе пользователей (всем пользователям) дайте права на запись (вручную или программно) на ваши файлы ini

p.s. другие варианты не правильны
Последний раз редактировалось VirusFree 11.03.2012 23:55:37, всего редактировалось 1 раз.
VirusFree
новенький
 
Сообщения: 11
Зарегистрирован: 22.07.2011 03:11:56

Re: ProgramFiles, UAC, права Администратора...

Сообщение Mr.Smart » 11.03.2012 23:54:40

Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: ProgramFiles, UAC, права Администратора...

Сообщение vitaly_l » 11.03.2012 23:59:44

VirusFree писал(а):Если не желаете хранить ini в папках пользователей, то,


Так они INI и лежат в папках пользователей.
Просто, если при первом запуске, тот пользователь (администратор) что устанавливал программу,
делает изменения, то они ВНИМАНИЕ (только при первом запуске) сохраняются с правами админа,
а потом при остальных запусках программы - всё нормально.
Так получается потому что программа запущена с правами Админа. Поэтому и спрашиваю:

КАК ЗАПИСАТЬ, ДОСТУПНЫЙ ВСЕМ ПОЛЬЗОВАТЕЛЯМ: INI ФАЙЛ, ИЗ ПРОГРАММЫ У КОТОРОЙ ПРАВА АДМИНА???

Добавлено спустя 16 минут 40 секунд:
Mr.Smart писал(а):читаем

Читал я это, все три статьи читал.
Функция, которая приведена выше, делает ТОЖЕ самое, только без регистрации: dll, создания манифестов итд
ВНИМАНИЕ: Проблем с повышением прав - нет..., есть проблема с ПОНИЖЕНИЕМ прав..., ВОПРОС: Как понизить права???

КАК ЗАПИСАТЬ, ДОСТУПНЫЙ ВСЕМ ПОЛЬЗОВАТЕЛЯМ: INI ФАЙЛ, ИЗ ПРОГРАММЫ У КОТОРОЙ ПРАВА АДМИНА???

Спасите помогите...
.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Пред.След.

Вернуться в Файловая система

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru
cron