Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2011.11.20;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2011.11.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
2-1311843120
Александр160591
2011-07-28 12:52
2011.11.20
запарка с компонентами и их свойствами


15-1311594517
oxffff
2011-07-25 15:48
2011.11.20
Progressive sessions или кефирные встречи


9-1190053787
Mr.Vlad
2007-09-17 22:29
2011.11.20
Targa&Viewer


2-1312259634
Grimm
2011-08-02 08:33
2011.11.20
Как правильно написать условие if для StringList.IndexOf ?


3-1266481358
RandomWalker
2010-02-18 11:22
2011.11.20
Выделение записей в зависимых таблицах.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский