Страница 2 из 4

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

СообщениеДобавлено: 10.03.2012 21:07:11
vitaly_l
Вот код запуска с правами админа

Код: Выделить всё
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;


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


.

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

СообщениеДобавлено: 10.03.2012 21:19:41
Mr.Smart
vitaly_l я не очень понял вашего алгоритма....
vitaly_l писал(а):Вопрос: Как перезапустить программу - без прав Администратора???

А почему именно непосредственно программа сама должна запрашивать права админа? Права админа, я думаю, в вашем случае достаточно инсталятору.

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

СообщениеДобавлено: 10.03.2012 21:39:25
vitaly_l
.

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

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


.

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

СообщениеДобавлено: 11.03.2012 09:18:24
v-t-l
WindowsXP - runas.exe

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

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

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

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

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

Заменить lpVerb := 'runas' на lpVerb := 'open' - желаемого результата не даёт.
Спасите/помогите...

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

СообщениеДобавлено: 11.03.2012 11:10:33
NTFS
В консоли выполни runas /? и будет тебе счастье.

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

СообщениеДобавлено: 11.03.2012 12:54:03
vitaly_l
Нет мне счастья...

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 можно запустить пограмму БЕЗ предоставления ей(запускаемой программе) прав админа ???


.

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

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

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

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

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

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

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

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

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

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

.

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

СообщениеДобавлено: 11.03.2012 22:33:17
WAYFARER
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, вот с помощью него и повышайте привилегии. (Правой кнопкой - Запуск от имени Администратора, или в свойствах галочка "запускать от имени администратора")

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

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

СообщениеДобавлено: 11.03.2012 23:03:47
vitaly_l
Громадное спасибо WAYFARER !
runas - это совсем про другое.
GetEnvironmentVariable и список переменных - это супер, спасибо(рекомендую всем, там всё кратко и понятно).

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

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

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

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


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

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

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


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


.

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

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

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


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

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

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


.
.

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

СообщениеДобавлено: 11.03.2012 23:50:07
VirusFree
Если не желаете хранить ini в папках пользователей, то,
нужной группе пользователей (всем пользователям) дайте права на запись (вручную или программно) на ваши файлы ini

p.s. другие варианты не правильны

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

СообщениеДобавлено: 11.03.2012 23:54:40
Mr.Smart

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

СообщениеДобавлено: 11.03.2012 23:59:44
vitaly_l
VirusFree писал(а):Если не желаете хранить ini в папках пользователей, то,


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

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

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

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

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

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