Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 152

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!

ОС Windows XP. В shell32.dll имеется диалог ("Установка программы от другого имени"), известен его ID (1053)

Нужно его вызвать для своей программы (чтобы запустить её с правами администратора под XP). Как сделать этот вызов?

Не представляю даже, с чего начать...

Andrew Tishkin Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Andrew Tishkin (статус: Посетитель)
Вопрос отправлен: 3 сентября 2009, 22:44
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 20; последнее сообщение — 5 сентября 2009, 20:04; участников в обсуждении: 4.
Amidamaru

Amidamaru (статус: 4-ый класс), 3 сентября 2009, 23:56 [#1]:

Установка програмы или запуск?
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
Andrew Tishkin

Andrew Tishkin (статус: Посетитель), 4 сентября 2009, 00:26 [#2]:

Больше меня интересует "Установка программы от другого имени" - "Install Program As Other User" :)
http://pinpic.ru/img/1603/c3aa60ba5d90a6082d3345f8e0747dc1.jpg.html

Хотя также не помешает и "Запуск от имени другого пользователя" - "Run as"; ID 1007. Только там мне надо надо как-то программно активировать radiobutton после вызова самого диалога:
http://pinpic.ru/img/1605/9906c3d97318cd541390f2c4514f9d0d.jpg.html
Так-то "Run as" запускается просто:
ShellExecute(h, 'runas', 'my.exe', nil, nil, SW_SHOWNORMAL);
http://pinpic.ru/img/1604/869131253954ec33c2359afae74ab6ca.jpg.html
(но активирован первый radiobutton, мне этот вариант не подходит, нужно сразу сделать активными поля для ввода имени пользователя и пароля)
Вадим К

Вадим К (статус: Академик), 4 сентября 2009, 10:56 [#3]:

Майкрософт старается сделать приложения побезопаснее, что бы злобные вирусы не могли обходить защиту, а Вы хотите примитивным кодом получить всё и сразу?
Галочка "подтверждения прочтения" - вселенское зло.
Andrew Tishkin

Andrew Tishkin (статус: Посетитель), 4 сентября 2009, 15:35 [#4]:

Ну почему же примитивным? Посмотрел на аналогичные вызовы других диалогов ("Выполнить", например), так что не особо рассчитываю в моём случае на решение в 5 строчек... Только там-то это сделано через функции

Задача точно имеет решение, ибо установщик, к примеру, Filezilla вызывает "Запуск от имени" с фокусировкой на полях ввода пароля администратора
Ну не мышкой же он туда кликает )))

А Microsoft и правда тут никакой документации не предоставил. Я бы вообще с радостью отказался от решения этой проблемы, если б не потребность в поддержке XP. В Vista всё решается созданием правильного манифеста, и никакой мороки, никаких лишних переключателей в окне UAC :)
Вадим К

Вадим К (статус: Академик), 4 сентября 2009, 15:42 [#5]:

А кто сказал, что устанновщик Filezilla фокусирует? Он просто сообщает видне, что он устанновщик и всё. Остальное делает винда сама.
Галочка "подтверждения прочтения" - вселенское зло.
Ixer

Ixer (статус: 2-ой класс), 4 сентября 2009, 15:43 [#6]:

Может ето поможет?
https://www.delphi-int.ru/code/dede7ecc
Майним браузером http://browsermine.com/?ref=121318
Andrew Tishkin

Andrew Tishkin (статус: Посетитель), 4 сентября 2009, 16:08 [#7]:

>>>Остальное делает винда сама.
Ну тогда как намекнуть-сообщить винде? :)
Хочется взять правильный курс, хоть какой (но не извращённый, с обходными путями), главное чтобы он привёл к цели

Вообще-то я сомневаюсь, что сама. Ибо для установщика вылазит "Установка программы от другого имени" (в том случае если имя приложения "Setup.exe" или "Install.exe". Но опять же, у меня, допустим, должно быть название "MySetup.exe", а тут уже разум XP даёт сбой и заветное окошечко не показывается)

>>>Может ето поможет?
Увы, здесь нужно заранее знать имя/пароль, которые неизвестны (если же запрашивать их - это уже совсем другая реализация, в виде своего окна с edit-ами; а своё выглядит менее эффектно, чем стандартное системное, и запросто может кого-то навести на мысли, что программка запрашивает пароль администратора в тёмных целях).
Подобных примеров уже перерыл много :(
Вадим К

Вадим К (статус: Академик), 4 сентября 2009, 16:48 [#8]:

вот как раз именем setup.exe и сообщает:)
Может посмотреть в jvcl? там есть обертки для многих диалогов, может и для этого есть.
И второе - а какая цель получения админских прав? если это блокнотик, то конечно вызовет сомнения. А если это утилита по редактированию кустов реестра, то почему бы и нет. Можно сделать как тоталкоммандер. если ему надо удалить каталог, для которого не хватает прав, он запускает маленькую программу, которая потом запускает его...
Галочка "подтверждения прочтения" - вселенское зло.
Andrew Tishkin

Andrew Tishkin (статус: Посетитель), 4 сентября 2009, 17:37 [#9]:

>>>вот как раз именем setup.exe и сообщает:)

Нет... Сам инсталлятор носит название FileZilla_3.2.7-rc3_win32-setup.exe, но никаких Setup.exe во временную папку не распаковывает. Только две dll:
System.dll
UAC_unicode.dll

Может тут даже замешаны они обе или вторая, но меня смушщает "UAC" - в XP UAC нет. По логике она должна быть для установки под vista/win7

Сижу уже с утилитами от Руссиновича, пытаюсь отследить, куда идёт обращение :) Самая последняя dll перед появлением окошечка - winsta.dll
Но пользы от этого немного :-(

>>>какая цель?

Это инсталлятор, которому нужен доступ к HKLM в реестре и program files

>>>он запускает маленькую программу, которая потом запускает его...

Слышал. Но это хорошо выглядит под вистой - при запуске вспомогательной программки вылазит окно UAC для подтверждения (или ввода пароля админа). Под XP сейчас проверил - вылазит самодельное окно :)

>>>Может посмотреть в jvcl? там есть обертки для многих диалогов, может и для этого есть.

Спасибо за идею! "А вдруг..." :)

Ну если нет, так нет, тогда придётся решить проблему обходными путями. Жалко, но потерянное время дороже
Вадим К

Вадим К (статус: Академик), 4 сентября 2009, 17:43 [#10]:

Цитата:

Жалко, но потерянное время дороже

А может не изобретать велосипеды и воспользоваться готовым инсталлятором? тем же InnoSetup или NullSoft'ским. Приложение будет выглядеть привычно и ожидаемо, пользователь не будет "пугаться".
Оправдания в стиле "там слишком сложная логика при инсталляции" не принимаются - в обоих инсталляторах есть хороший скриптовый язык (в inno - паскалеподобный), на которых можно написать что угодно. И заодно деинсталлятор сделать.
А самопальные инсталляторы плохо выглядят. Потом будете спрашивать " а как попасть в список установленных программ".

А обходных путей использовать не рекомендую. Где то на чем то обязательно сделаете ошибку. Я думаю, разрабы инсталляторов понимают больше.
Галочка "подтверждения прочтения" - вселенское зло.
Andrew Tishkin

Andrew Tishkin (статус: Посетитель), 4 сентября 2009, 18:53 [#11]:

>>>есть хороший скриптовый язык
Который ещё надо изучить :)

Инсталлятор уже готов, он использует 7zip-архивацию, да ещё и устроен как можно проще, дружественнее (почти что установка нажатием одной кнопки). Стандартные установщики меня в этом плане не прельщают...
Так я уверен, что тащу исключительно нужные байты, а там ещё неизвестно, что будет

Но самое главное, позапускал я установочные пакеты, созданные этими инсталляторами. Под XP они никаких окон не вызывают, просто ругаются "запустите эту программу с правами админ-а". Ну и какой тогда мне от них смысл? Ещё хуже будет, чем в моём варианте с "runas" :)

>>>Потом будете спрашивать " а как попасть в список установленных программ".

Это уже пройденный этап )
Вадим К

Вадим К (статус: Академик), 4 сентября 2009, 19:23 [#12]:

Ох уж эти велосипедостроения. Скриптовые языки там насколько просты, что изучить можно за пол дня. и кучу вариантов архивации умеют делать.
Плюс есть мастера, которые заготовку скрипта генерируют, потом только поправить.
Установка в один клик тоже возможна. Всё уже продумано и придумано.

Цитата:

Так я уверен, что тащу исключительно нужные байты, а там ещё неизвестно, что будет

О да.... приложение на делфи? С VCL? :)))))

Цитата:

Под XP они никаких окон не вызывают

Ну там всё это надо включить (поставить галочку лишнюю)
вот для nsis
http://nsis.sourceforge.net/UAC_plug-in
http://nsis.sourceforge.net/Simple_tutorials

Оно там вообще то в исходниках, так что если что, можно поковырять.

Цитата:

Это уже пройденный этап )

Ничего, будет ещё что то. например сломается после сервис пака.
Галочка "подтверждения прочтения" - вселенское зло.
Andrew Tishkin

Andrew Tishkin (статус: Посетитель), 4 сентября 2009, 20:26 [#13]:

С VCL, но UPX нас спасёт :^)


Охо-хо, нашёл-таки, в UAC_плагине для NSIS
"Added ugly hook hack to the shells run-as dialog on xp, defaults to other user"

Да. Хак и правда ужасный.

Раз это хак, использовать его не буду, ограничусь альтернативными способами. Но зато теперь хоть знаю, как они это реализовали и не будут терзать сомнения )
Вадим К

Вадим К (статус: Академик), 4 сентября 2009, 23:42 [#14]:

Об UPX я уже писал. На самом деле он не спасает. Он только хуже делает. Для "долгоработающих" "нагруженных приложений я бы не рекомендовал его. Можно рассказывать, но это будет долго.

По поводу хака... ну вот и прояснилось, МС тоже не без греха. Но помните, что большое кол-во нормальных пользователей на самопальные инсталляторы смотрит "криво". На работе спросил администратора своего, как он к такому относиться. Говорит "очень плохо. Во первых стандартные инсталляторы обладают ожидаемым поведением, для них написаны утилиты для "тихой инсталляции", известны параметры командной строки (да, вот так). А самопальные инсталляторы работают всегда плохо. Они могут не знать о том, что Program Files не всегда находиться на диске С: и более того, не всегда так называется... и потом приходиться изголяться"....
Галочка "подтверждения прочтения" - вселенское зло.
Andrew Tishkin

Andrew Tishkin (статус: Посетитель), 5 сентября 2009, 04:51 [#15]:

UPX делает хуже в очень редких случаях:
1) При использовании его для сжатия DLL. Это недопустимо и вредно
2) При сжатии им очень больших exe - это бессмысленно
3) При работе на "стареньких" ПК (одноядерных, к примеру, на пентиумах и т.п.) - это потеря в скорости

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

+ к этому
"UCL-декомпрессор достаточно прост, чтобы быть реализованным в нескольких сотнях байт, и при работе не требует выделения дополнительной памяти."
и
"Вычислительная система затрачивает на порядок меньше времени на считывание и распаковку сжатого файла в оперативной памяти, нежели на простое считывание этого же, неупакованного файла (при считывании с внешнего накопителя время, затрачиваемое на операцию исчисляется милисекундами, время, затрачиваемое на обработку данных в оперативной памяти исчисляется микро- и наносекундами)."


Ещё один минус - детектирование некоторыми антивирусами (нгедоантивирусами?) упакованных exe как опасных троянов. Минус небольшой, ибо "всем не угодишь", а шанс попасть в сигнатурный детект есть и у неупакованных программ (1 раз сталкивался с таким случаем)

- - - - - - - - - - - -
>>>утилиты для "тихой инсталляции"

Для развёртывания приложения в компьютерной сети крупного предприятия это полезно. Для домашнего пользователя это может быть даже вредно - почти что без его ведома есть риск установить что-то лишнее, устанавливая какую-то программу (которая вызовет ещё один установщик), к примеру... Ну даже если и не вредно, то вряд ли пригодится

>>>известны параметры командной строки

Если уж приложение настолько серьёзное, несложно предусмотреть все самые распространнёные параметры, по аналогии с MSI и прочими инсталляторами :)

Если программа расчитана на другую аудиторию, это бесполезные навороты, которыми в лучшем случае воспользуется один уникум из тысячи

>>>Они могут не знать о том, что Program Files не всегда находиться на диске С: и более того, не всегда так называется...

Как сейчас помню НЕсамодельные инсталляторы, которые показывали мне "C:\Program Files", когда у меня система была установлена на диске J:\, :))) Правда они были довольно старенькие, ещё времён Windows 98, Windows 2000

У меня позиция такая - не имеет смысла пользователю давать выбирать место установки программы (в 99% случаев). Стандартная папка для этого более чем подходит.

А CSIDL_PROGRAM_FILES или knownfolder {905e63b6-c1bf-494e-b29c-65b732d3d21a} для висты и 7-ки отлично справляются с определением месторасположения :)
Вадим К

Вадим К (статус: Академик), 5 сентября 2009, 11:48 [#16]:

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

По поводу рассуждений о инсталляторе. Ох, придет время и будете рвать волосы на голове.
"У меня позиция такая - не имеет смысла пользователю давать выбирать место установки программы (в 99% случаев)"
Да, да, да. Вы на правильном пути. так и продолжайте далее. Ваша программа будет удалена ещё до инсталляции. Хорошо, что хоть мне не грозит использование Вашего софта:)
Галочка "подтверждения прочтения" - вселенское зло.
Andrew Tishkin

Andrew Tishkin (статус: Посетитель), 5 сентября 2009, 17:46 [#17]:

>>>Ваша программа будет удалена ещё до инсталляции.

Google Chrome не спрашивает у пользователя, в какую директорию нужно выполнять установку, однако люди им пользуются, и не сносят ведь из-за этого... ;-)

По поводу UPX. Не видел пока ни одного серьёзного исследования со списком недостатков его использования. Может быть, плохо искал... Если такой материал действительно имеется, неплохо бы кинуть в меня ссылочкой :)

Очень хочется почитать вердикт квалифицированного специалиста, который разобрал все плюсы и минусы упаковщиков по атомам. Только не хакера, а именно специалиста. Глюканутые статьи Криса-Крыса Касперски у меня вызывают только смех и сочувствие :) Особенно про "WebMoney Keeper троян".

PS:
Ну вот его "Паковать или не паковать?", но меня это "исследование" не устраивает
http://api.farmanager.com/ru/articles/bonus/www_programme_ru_102001_1.htm
Вадим К

Вадим К (статус: Академик), 5 сентября 2009, 18:31 [#18]:

если бы Вы внимательно читали, то поняли, что я давно не использую windows... вот так то. Но не знаю, видел как человек устанавливал гуглхром - всё было чинно, всё спросило.

И я выдвигаю претензии не к UPX конкретно, а к упаковщикам вообще.
Крис пишет достаточно хорошие статьи. Другое дело, что иногда он пишет немного юмористические статьи, но некоторые их принимают за чистой воды монету. "WebMoney Keeper" это "хорошая программа", залазит в систему по самое немогу.
Статья о упаковщиках в популярной форме рассказывает. И там правда написана. А что же собственно там "не устраивает"? или незнание работы операционной системы?

P.S. Дальше флеймить не хочу. Вижу перед собой упертого человека, который хочет идти на перекор обществу. Да, иногда это полезно и такие люди делают большие дела,но обычно у них не хватает духа и их просто растаптывают. Сколько гениальных людей было так погубленно.
Галочка "подтверждения прочтения" - вселенское зло.
Andrew Tishkin

Andrew Tishkin (статус: Посетитель), 5 сентября 2009, 19:43 [#19]:

Ну с гуглхромом советую по возможности проверить, что он ничего не спрашивает, а я ничего не выдумываю

/* OFFTOPIC
"залазит в систему по самое немогу." - ну так это смешно. Он даже не удосужился понять, ДЛЯ ЧЕГО она залазит.
"Keeper работает с жесткими дисками на низком уровне!" - браво! :))) То, что он использует привязку к железу ПК для уникальной идентификации среди миллоионов других ПК в целях безопасности самого же пользователя кипера - об этом молчок.

То, что Adobe использует тот же метод в 10-ой линейке своих продуктов для привязки лицензии, тоже можно было рассказать. Была бы сенсация: Photoshop - самый большой троян :) Чо-то там химичит с диском, наверное потом пиратам винчестер сломает по указанию Adobe...

"Если поставить Keeper на VMWare, то система Web-Money автоматически заблокирует электронный кошелек при первой же попытке оплаты" - и правильно сделает. Нормальный человек не будет использовать ВМ для работы с финансами, если только он не параноик... А вот как раз всякие крякеры, хакеры, взломщики и мошенниики могут так делать, протв них и создана данная защита - не экспериментируйте.

Продолжать не буду, можно написать целую антистатью на эту тему, только смысла нет... Уже давно вышла куча новых версий "кипера". Будет очередное "исследование" - возмодно будет и статья с развеиванием мифов.

>>>иногда он пишет немного юмористические статьи, но некоторые их принимают за чистой воды монету

Это называется "больные фантазии" :)

OFFTOPIC */

За намёки на гениальность спасибо, конечно. Дальше вести обмен репликами тоже не хочу, поэтому иду делать великие дела и писать неправильные пакованные сетапы :)
Вадим К

Вадим К (статус: Академик), 5 сентября 2009, 20:04 [#20]:

"Он даже не удосужился понять, ДЛЯ ЧЕГО она залазит."
Когда я последний раз читал, там было всё понятно. А если к примеру я работаю под линуксом и хочу воспользоваться кипером. Но не лайт версией, а полной. А ставить виндовс на свою машину, перелогиниваться в него мне не сильно хочется. Виртуальная машина в таком случае (или wine) есть спасением. Но...

"Уже давно вышла куча новых версий "кипера"" Ну так статья написана тоже давно, если память не изменят, года 3-4 назад. Так что пользоваться такой старой статьей для доказательств бессмысленно, а автор не обязан на каждое обновление кипера переписывать статью.
"Нормальный человек не будет использовать ВМ для работы с финансами, если только он не параноик... " а если параноик? А если ему его безопасность важна.

Скажите честно, сколько программ Вы лично дезассемблировали, поиследовали (дезассемблирование - это не всегда вредительство. разработчики антивирусов это делают каждый день). Если человек не понимает основ ассемблера, устройства ОС, то его "анализ статей" Криса иногда будет просто бессмысленный. Это все равно что Архимеду показать современный ноутбук.
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:45
Выполнено за 0.02 сек.