| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Запуск от имени администратора Win 7 |
| Автор: lollollollol 7.5.2013, 18:57 |
| Добрый вечер. Не могу запустить на Win 7 не могу запустить программу от имени администратора. Когда правой кнопкой нажимаете, есть Запуск от имени админа. Вот как запустить с админ правами программно? пока получилось лишь вызвать окно свойства, и эмуляцией нажатия клавишь, но это как-то криво. Перешарил все коды инета, у меня вообще ругается на runas, говорит что незнает такой команды. |
| Автор: lollollollol 8.5.2013, 07:08 |
| Оно всегда пишет что неверный логн или пароль, я пытался так уже. |
| Автор: lollollollol 8.5.2013, 12:30 |
| shExecInfo^.lpVerb := 'runas'; Почему не раотает? runas не знакомая команда, а если заменить на open то открывает. но без прав |
| Автор: lollollollol 8.5.2013, 15:42 |
| 1326: resultstring:='wrong username or password'; непонимаю какое имя нужно этой функции! Уже всё перепробывал. |
| Автор: Poseidon 8.5.2013, 21:16 | ||
| Ты издеваешься? Я же тебе дал направление где искать. Скачивай http://engineer.d-vt.ru/files/unitIsAdmin.pas и добавляей его к проекту. Потом рисуй код:
|
| Автор: lollollollol 9.5.2013, 11:00 |
| lpVerb := 'runas'; я же сказал что комп ругается, не знает он такой команды. Если тут прописат open, запустит но без прав. А иначе на нессответствие ругается |
| Автор: Akella 9.5.2013, 13:57 |
| runas это не команда |
| Автор: lollollollol 9.5.2013, 17:06 |
| Впринципе я уже с помощью манифеста сделал, но всё таки не пойму почему с runas не работает |
| Автор: Poseidon 9.5.2013, 18:37 |
| Скинь скрин этой "ругни" |
| Автор: Dik0n 9.5.2013, 19:41 | ||
100% - рабочий код, в своем приложении использую.
|
| Автор: Poseidon 10.5.2013, 00:10 |
| Dik0n, чем он принципиально отличается от того, что привел я? И хотелось бы увидеть использование этой функции, а конкретно обработку ситуации, когда пользователь сам выбирает в контекстном меню "Запуск от имени администратора". |
| Автор: northener 10.5.2013, 01:41 |
А какая разница чем он отличаеися Пусть сначала "ололо" ответит какую ошибку выдаёт его проект без манифеста. |
| Автор: lollollollol 10.5.2013, 05:47 |
| Уважаемый northener, ололо здесть если и есть, то вы. Не стоит коверкать ники. Poseidon, небыло возможности заскринить сразу так как на компе с которого писал нет делфи. Вот скрин. http://www.radikal.ru А если прописать open вместо runas, то нет этого сообщения, но и запуск без прав Dik0n, а твой код ошибки не выдаёт, но и не запускает. |
| Автор: Poseidon 10.5.2013, 11:40 |
| lollollollol, пройдись отладчиком и покажи строчку, которая вызывает это сообщение. |
| Автор: Dik0n 10.5.2013, 16:38 | ||
Что то мне кажется что расширение у файла не .ехе, в этом и проблема. |
| Автор: lollollollol 10.5.2013, 22:06 |
| Да я сам себя запустить с правами пытаюсь, ParamStr(0) , расширение точно .exe. Отладчиком пройтись не могу, у компа с делфи только в ПН буду, тогда и сделаю |
| Автор: kami 10.5.2013, 22:34 | ||
Скорее всего, в пути к файлу есть пробел. Обернуть ParamStr(0) в кавычки. ("). |
| Автор: Poseidon 10.5.2013, 22:44 |
| lollollollol, покажи именно свой код. Потому как я искренне не понимаю людей, которым вылаживаешь кусок рабочего кода, они его коверкают и потом отписываются "не работает". Я это о твоем ParamStr(0). У меня в примере его нет. Да, я понимаю что это то же самое, что и мое Application.ExeName, но все же наличие чего-то, что не приводилось в примере, наводит на мысли о еще каких-нибудь "доработках". |
| Автор: lollollollol 11.5.2013, 08:43 | ||||||||
Р.S. Application.ExeName = ParamStr(0) - Полный путь до запущеного файла Добавлено через 9 минут и 52 секунды Добрался до делфи. Для чстоты эксперемента вместо привычного ParamStr(0) использую Application.ExeName Ошибка на строке
Как я и ожидал. КОд не менял вообще за исключением
Если оставить как было, компилятор ругается
В Uses добавил только ShellAPI |
| Автор: Dik0n 11.5.2013, 13:26 | ||
Попробуй манифест добавь если его нет.
|
| Автор: lollollollol 11.5.2013, 17:05 |
| С манифестом, как я уже выше говорил, работает. Я не могу понять почему программно не запускается |
| Автор: Dik0n 11.5.2013, 22:24 | ||
Я привел пример манифеста, без админ прав! После чего, перезапускаете себя уже с правами. |
| Автор: lollollollol 12.5.2013, 07:50 | ||
| Извиняюсь, невнимательность, вечером попробую P.S. Что обозначают эти строки, почему именно эти знаечния задаются?
|
| Автор: lollollollol 12.5.2013, 08:46 |
| С манифестом тоже не работает запуск |
| Автор: Dik0n 12.5.2013, 13:12 | ||||||
Это на Delphi 7 так было выставлено, главное здесь это
С моим примером кода ? |
| Автор: lollollollol 12.5.2013, 18:07 | ||
| угу А вот с таким манифестом
пытается под админом запустить. Но проблема в том что при запуске сразу запрос UAC, и если пользователь нажмёт НЕТ, приложение не запустится. Как можно запустить себя с правами администратора? |
| Автор: Akella 12.5.2013, 18:25 | ||
Ну да, а как по другому? |
| Автор: lollollollol 12.5.2013, 18:49 |
| Я хотел пр запуске, если нет прав администратора показать информационное сообщение, с информацией о том что программе необходимы права. И повторно выполнить запуск с правами. Вариант с манифестом не позволяет это сделать. А запуск через runas не работает. |
| Автор: Dik0n 12.5.2013, 21:11 |
| level="requireAdministrator" заменить на level="asInvoker" Потом запускать через 'runas' но UAC все равно появится при перезапуске, для того он и разработан, иначе бы все трояны втихаря, перезапускали себя под админом. |
| Автор: lollollollol 12.5.2013, 21:13 |
| Я не против UAC, мне главное чтобы runas работал. завтра попробую снова. Хотя я уже пытался это сделать с Вашим манифестом. Там как раз level="asInvoker", но не работает. |
| Автор: Poseidon 12.5.2013, 22:34 | ||
А как по-твоему, в чем вообще заключается функция UAC? Так, от нечего делать ее привязали? Это и есть ее работа. Если пользователь не хочет что бы твоя программа получала админ-права (нажимает "НЕТ", то UAC и не даст их твоей программе. |
| Автор: lollollollol 13.5.2013, 05:58 |
| это само собой, но смысл в том, что я хочу перед этим НЕТ вывести информационное сообщение, где поясню зачем именно нужны амин права приложению. |