Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.11.20;
Скачать: CL | DM;

Вниз

Windows XP: вызвать диалог "Установка программы от другого имени"   Найти похожие ветки 

 
TIF ©   (2009-09-03 19:01) [0]

В рамках обратной совместимости с XP нужно запускать свою программу (установки) с правами администратора

Для этой цели хочу вызывать стандартный диалог. Один из двух, о которых сейчас и пойдёт речь.

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

По аналогии с вистой додумался переименовать свой в "Setup.exe" или "Install.exe" и добился появления этого диалога. Только вот если будет не "Setup", а "MySetup", трюк не сработает, поэтому этот способ меня не устраивает :(

Не знаю в какой dll-ке прячется этот диалог и какой функцией его вызвать. В MSDN глухо...

2) "Запуск от имени другого пользователя" - "Run as"
Такой диалог, как на этом изображении
http://pinpic.ru/img/1604/869131253954ec33c2359afae74ab6ca.jpg.html
вызвать легко:
ShellExecute(h, PChar("runas"), PChar("c:\1\0.exe"), nil, nil, SW_SHOWNORMAL);
// h - Дискриптор (handle) окна-владельца диалога
// Например, Application.Handle
// Устанавливается в 0 для вызова диалога без привязки к какому-либо окну


Однако, мне опять-таки хочется большего :) Мне хочется сразу фокусировки на полях ввода имени пользователя и пароля:
http://pinpic.ru/img/1605/9906c3d97318cd541390f2c4514f9d0d.jpg.html

Установщик Filezilla, к примеру, как-то это делает... Как?

PS: как жаль, что ещё требуется поддержка Windows XP :(
С появлением Vista всё стало проще - добавил правильный манифест и радуйся
PPS:
"Чтобы правильно задать вопрос, нужно знать большую часть ответа." © Роберт Шекли. Верный вопрос
Надеюсь, хоть 51% того, что я уже знаю по сабжу мне удалось высказать :)
А ссылочку на сайте на этот рассказ неплохо бы поправить или убрать...


 
TIF ©   (2009-09-03 22:12) [1]

Хм.
http://xpdll.nirsoft.net/shell32_dll.html

ID  Dialog Caption
1007  Run As
1053  Install Program As Other User


ID диалога известен. Только непонятно, что с ним делать...


 
brother ©   (2009-09-04 04:48) [2]

> http://pinpic.ru/img/1605/9906c3d97318cd541390f2c4514f9d0d.jpg.html

ИМХО, ищем в том окне через апи нужные нам контролы, а потом мышей (виртуально) - клик- клик))))))))))


 
TIF ©   (2009-09-04 15:25) [3]

> клик- клик

Жесть :)
Я лучше уж тогда это в окне установщика напишу "а сейчас берём мышку и щёлкаем вот на эту штуку" :D


 
Leonid Troyanovsky ©   (2009-09-04 17:12) [4]


> TIF ©   (03.09.09 22:12) [1]

> ID диалога известен. Только непонятно, что с ним делать.

Если установщик foreground, then try AttachThreadInput & Windows.SetFocus

--
Regards, LVT.


 
TIF ©   (2009-09-04 20:20) [5]

Без хака не выкрутиться. Печально

> Установщик Filezilla, к примеру, как-то это делает... Как?

Лучше бы я не знал, как :) Меньше знаешь, крепче спишь...

Вышел на установщик NSIS, который используется в FileZilla, потом на UAC-плагин для NSIS:
http://nsis.sourceforge.net/UAC_plug-in

В котором в версии
v0.0.10 - 20080812 (AndersK)
+Added ugly hook hack to the shells run-as dialog on xp, defaults to other user

Это и правда ужасный хак %-\
Основной части мне для шока хватило, а ещё есть и вспомогательная...
FORCEINLINE LRESULT MySndDlgItemMsg(HWND hDlg,int id,UINT Msg,WPARAM wp=0,LPARAM lp=0) {return SendMessage(GetDlgItem(hDlg,id),Msg,wp,lp);}

LRESULT CALLBACK MSRunAsDlgMod_ShellProc(int nCode,WPARAM wp,LPARAM lp)
{
CWPRETSTRUCT*pCWPS;
if (nCode >= 0 && (pCWPS=(CWPRETSTRUCT*)lp) && WM_INITDIALOG==pCWPS->message)
{
 TCHAR buf[30];
 GetClassName(pCWPS->hwnd,buf,COUNTOF(buf));
 if (!lstrcmpi(buf,_T("#32770")))
 {
  const UINT IDC_USRSAFER=0x106,IDC_OTHERUSER=0x104,IDC_SYSCRED=0x105;
  GetClassName(GetDlgItem(pCWPS->hwnd,IDC_SYSCRED),buf,COUNTOF(buf));
  if (!lstrcmpi(buf,_T("SysCredential"))) //make sure this is the run as dialog
  {
   MySndDlgItemMsg(pCWPS->hwnd,IDC_USRSAFER,BM_SETCHECK,BST_UNCHECKED);
   MySndDlgItemMsg(pCWPS->hwnd,IDC_OTHERUSER,BM_CLICK);
   
  }
 }
}
return CallNextHookEx(g_MSRunAsHook,nCode,wp,lp);
}


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



Страницы: 1 вся ветка

Текущий архив: 2011.11.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.008 c
15-1311884998
Юрий
2011-07-29 00:29
2011.11.20
С днем рождения ! 29 июля 2011 пятница


15-1311830801
George
2011-07-28 09:26
2011.11.20
Сравнение текстов


1-1274191918
Fantasy
2010-05-18 18:11
2011.11.20
Регулярные выражения


15-1311249647
Scott Storch
2011-07-21 16:00
2011.11.20
запрос на удаление


3-1266498498
Den
2010-02-18 16:08
2011.11.20
Буквы Е и Ё. Контекстный поиск