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

Вниз

Миграция на WIndows 7 + права администратора.   Найти похожие ветки 

 
Дмитрий Тимохов   (2010-08-12 22:13) [0]

Добрый день.

СУТЬ

Я осуществляю миграцию своей программы на Windows 7.
Перспектива - получение значка "Compatible with Windows 7".

В меру своего понимания проблемы изучил документацию http://www.microsoft.com/rus/isv/win7_logo.aspx

ПРОБЛЕМА

Стоит задача модернизировать кусок программы, обладающий следующим функционалом:
1. В программе есть диалог системных настроек.
2. По логике программы настройки распространяются на всех пользователей. Т.е. записываются в ветку реестра HKEY_LOCAL_MACHINE.
3. При входе в диалог я проверяю права - если НЕ администратор, то выводится примерно такое сообщение "... для настройки обратитесь к администратору ...". Если администратор, то даю править настройки и сохранять их в реестре.

Теперь в Windows 7 программа, если у нее в манифесте нет требования запуска с правами администратора, запускается как обычный пользователь ДАЖЕ, если программу запускает пользователь с правами администратора. Об таком поведении явно написано в документации по миграции к Windows 7.

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

Насколько я понял по результатам чтения документации, программу надо переписать так, чтобы она сама поднимала себе привилегии, если это нужно.

ВОПРОСЫ

1. Правильно ли я понимаю, что на Windows 7 при необходимости писать в LOCAL_MACHINE надо анализировать есть ли возможность поднять права до администраторских и если есть, то поднимать, а после записи возвращать обратно до исходных?.

2. Если ответ на 1. "да", то:
а) чем проверить есть ли возможность поднять права до администраторских;
б) чем поднять права до администраторских;
в) чем опустить права после записи в LOCAL_MACHINE до исходных.
г) чем (программно) удостовериться, что запись произошла действительно в LOCAL_MACHINE, а не виртуализованную ветку реестра в CURRENT_USER.
?

3. Если ответ на 1. "нет", то прошу поточнее тыкнуть меня носом туда, где понять, как теперь должен работать функционал редактирования системных настроек.

Благодарю.


 
Дмитрий С ©   (2010-08-12 22:24) [1]

Редактор (сохранятель) настроек отдельным приложением с манифестом ?


 
Rouse_ ©   (2010-08-12 23:12) [2]


> Насколько я понял по результатам чтения документации, программу
> надо переписать так, чтобы она сама поднимала себе привилегии,
>  если это нужно.

Нет, HKLM для обычного приложения - только чтение.
Для записи в данную ветвь придуман инсталятор.


 
Игорь Шевченко ©   (2010-08-13 00:03) [3]


> 3. При входе в диалог я проверяю права - если НЕ администратор,
>  то выводится примерно такое сообщение "... для настройки
> обратитесь к администратору ...". Если администратор, то
> даю править настройки и сохранять их в реестре.


А зачем в реестр, а не в All users ?


 
Игорь ©   (2010-08-13 00:16) [4]

Не нужен никакой манифест под Vista и выше можно сделать примерно так

uses ShellAPI

var
 SEI: TShellExecuteInfo;
 lpExitCode: DWORD;
begin
 Hide;
 // прячемся и запускаем самого себя с параметрами при этом требуем права админа
 // читаем GetCommandLine например до FormCreate
 // если нашел в параметрах "бла бла" пишим что то в реестр
 // если записал успешно ExitProcess(7)
 // не записал ExitProcess(99)

 ZeroMemory(@SEI, SizeOf(SEI));
 SEI.cbSize := SizeOf(TShellExecuteInfo);
 SEI.Wnd := Handle;
 SEI.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
 SEI.lpVerb := PChar("runas");
 SEI.lpFile := PChar(Application.ExeName);
 SEI.nShow := SW_SHOWNORMAL;
 SEI.lpParameters:= "бла бла";
 if ShellExecuteEx(@SEI) then
 begin
   //ждем завершения работы SEI.hProcess примеров полно в сети
   GetExitCodeProcess(SEI.hProcess, lpExitCode);
   if lpExitCode = 6 then
     // записал
   else
     // не записал
 end;

 Show;


 
Дмитрий Тимохов   (2010-08-13 01:10) [5]


> Игорь Шевченко ©   (13.08.10 00:03) [3]
>
>
> > 3. При входе в диалог я проверяю права - если НЕ администратор,
>
> >  то выводится примерно такое сообщение "... для настройки
> > обратитесь к администратору ...". Если администратор,
> то
> > даю править настройки и сохранять их в реестре.
>
>
> А зачем в реестр, а не в All users ?


Игорь, ты про каталог C:\Documents and Settings\All Users\Application Data?
Я так понимаю, что на нее права у всех есть.
Мне бы хотелось, чтобы настроенная администратором программа не могла быть перенастроена.
К тому же, вроде реестр - весьма стандартное место для хранения настройки - имени сервера.

Я не понимаю Розыча - почему настройкой программы должен заниматься инсталлятор?
У меня настройка - это адрес сервера. Настройщик - администратор сети. Пользователи - студенты. Причем программу иногда надо перенастраивать - сервер сломался, например, надо ввести другой адрес сервера.

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

Неужели в Windows 7 так и задумано, что программа не может легально (!!!) сама себя настроить, даже если запущена админом, но при этом ограничить в правах обычного пользователя?

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

----

2Игорь ©   (13.08.10 00:16) [4], благодарю. Идея понятно. Я тоже думал, что примерно также можно, но не проверял пока.


 
Германн ©   (2010-08-13 01:19) [6]


> Я не понимаю Розыча - почему настройкой программы должен
> заниматься инсталлятор?
> У меня настройка - это адрес сервера. Настройщик - администратор
> сети. Пользователи - студенты. Причем программу иногда надо
> перенастраивать - сервер сломался, например, надо ввести
> другой адрес сервера.

+1

Передо мной тоже возникал подобный вопрос. Некие "особые" настройки должны быть одинаковы для всех простых пользователей. Но должна быть возможность у администратора (и только у администратора) их менять при необходимости.


 
Дмитрий Тимохов   (2010-08-13 01:27) [7]

Читаю интернет. Похоже, что мое исходное предположение о том, то надо поднимать права - действительно ерунда (((

Советуют программу другую запускать с администраторским манифестом (как Дмитрий С сказал выше). Вопрос только, что в http://podgoretsky.com/ftp/Docs/Microsoft/V7DEV.pdf (или http://download.microsoft.com/documents/rus/windows/V7DEV.pdf - оригинал) сказано, что (25 страница):


Работа в привилегированном режиме
Одна из новинок в Windows Vista, наиболее часто приводящая к несовмесZ
тимости с существующими приложениями, — это повышенные требования
к безопасности, благодаря которым пользователи работают под учетной
записью standard user с пониженным набором разрешений (permissions)
и привилегий. По умолчанию в Windows Vista каждый пользователь рабоZ
тает под учетной записью standard user, даже если он зарегистрировалZ
ся как член группы администраторов. Соответственно, когда пользователь
пытается запустить приложение, которое требует привилегий администZ
ратора, операционная система запрашивает подтверждение. Только приZ
ложения, выполняемые с привилегиями администратора, могут вносить
изменения в глобальные настройки операционной системы. Этот мехаZ
низм, впервые реализованный в Windows Vista, называется User Account
Control (UAC).


Поэтому по идее при попытке запуска другого приложения с админским манифестом появится вопрос!


 
Дмитрий С ©   (2010-08-13 01:39) [8]


>
> Поэтому по идее при попытке запуска другого приложения с
> админским манифестом появится вопрос!

Появится, и это логично и уже, в принципе, привычно.

Точно не уверен, но если студент нажмет кнопку настройки, то сама windows спросит пароль администратора перед запуском.


 
Дмитрий С ©   (2010-08-13 01:41) [9]

Хотя в Win7 некоторые приложения повышаются без запроса uac, например, диспетчер задач.


 
Игорь ©   (2010-08-13 01:52) [10]


> Дмитрий С ©   (13.08.10 01:41) [9]


Ну конечно без запроса uac, когда ты жмешь Ctrl + Alt + Del у тебя сразу запускаеться диспетчер задач


 
Дмитрий С ©   (2010-08-13 01:58) [11]


> Игорь ©   (13.08.10 01:52) [10]

Ты о чем?


 
Rouse_ ©   (2010-08-13 10:20) [12]


> Я не понимаю Розыча - почему настройкой программы должен
> заниматься инсталлятор?

А для чего еще нужен инсталятор как не для установки программы и настройки ее параметров? Если для тебя так уж критично менять глобальную для всех настройку, то кроме реестра ты можешь абсолютно спокойно хранить конфигурационный XML в CSIDL_COMMON_APPDATA. Об этом кстати тоже в требованиях по мигрированию было написано в разделе рекомендации.


 
Rouse_ ©   (2010-08-13 10:23) [13]


> Неужели в Windows 7 так и задумано, что программа не может
> легально (!!!) сама себя настроить, даже если запущена админом

Кстит если программа запущена именно из под админа, то тогда у нее будут права на запись. Правой клавишей на программе и Run as administrator - будет тебе счастие


 
Дмитрий Тимохов   (2010-08-13 10:32) [14]


> Если для тебя так уж критично менять глобальную для всех
> настройку, то кроме реестра ты можешь абсолютно спокойно
> хранить конфигурационный XML в CSIDL_COMMON_APPDATA. Об
> этом кстати тоже в требованиях по мигрированию было написано
> в разделе рекомендации.


Только каждый может поправить это дело, если ему надо. Разве не так?


 
Дмитрий Тимохов   (2010-08-13 10:42) [15]


> Кстит если программа запущена именно из под админа, то тогда
> у нее будут права на запись. Правой клавишей на программе
> и Run as administrator - будет тебе счастие

Саш, я что на тупого похож?


 
Дмитрий Тимохов   (2010-08-13 13:54) [16]

Конкретно этот вопрос решился.

Я так понял, что таможня дает добро на то, чтобы при необходимости изменять системные настройки (которые не сможет менять никто, кроме админа)  явно требовать от пользователя, чтобы он перезапустил программу с помощью Run as administrator.


 
Кто б сомневался ©   (2010-08-13 15:22) [17]


> Я осуществляю миграцию своей программы на Windows 7.
> Перспектива - получение значка "Compatible with Windows
> 7".


Ага, надеешься что больше покупать будут? :) Не  будут.


 
Дмитрий Тимохов   (2010-08-13 15:38) [18]


> Кто б сомневался ©   (13.08.10 15:22) [17]
>
> > Я осуществляю миграцию своей программы на Windows 7.
> > Перспектива - получение значка "Compatible with Windows
> > 7".
>
> Ага, надеешься что больше покупать будут? :) Не  будут.


Это для понту )


 
Дмитрий С ©   (2010-08-13 18:54) [19]


> Кто б сомневался ©   (13.08.10 15:22) [17]

Будут, не надо всех по себе равнять


 
Кто б сомневался ©   (2010-08-13 21:36) [20]


> Дмитрий С ©   (13.08.10 18:54) [19]


Да никто не равняет. Эта тема в шароварных форумах не раз поднималась.


 
asail ©   (2010-08-13 22:26) [21]


> Кто б сомневался ©   (13.08.10 21:36) [20]

Дык, в шароварах, может оно и не надо, а в серьезных коммерческих продуктах - очень даже может пригодиться. А иногда и просто необходимо...


 
Rouse_ ©   (2010-08-13 22:44) [22]


> asail ©   (13.08.10 22:26) [21]
>
> > Кто б сомневался ©   (13.08.10 21:36) [20]
>
> Дык, в шароварах, может оно и не надо, а в серьезных коммерческих
> продуктах - очень даже может пригодитьс

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


 
asail ©   (2010-08-13 23:01) [23]


> Rouse_ ©   (13.08.10 22:44) [22]

И да, и нет... Тендеры и коммерческие организации устраивают. Понятно, что сертификат условие не достаточное, но зачастую необходимое. Вплоть до того, что приглашают хлопцев из МС в коде поковыряться с умным видом...


 
Rouse_ ©   (2010-08-13 23:08) [24]

В коде поковыряться? Уж извини - не верю, с "другой организации" людей пригласить, это еще возможно, но...


 
asail ©   (2010-08-13 23:24) [25]


> Rouse_ ©   (13.08.10 23:08) [24]

Спорить не буду. У нас собирались в одном из отделов тестить систему таким макаром. Требование от заказчика было, вроде... Но чем дело кончилось - не знаю. Может, и ничем...
Насколько знаю, МС должны были код прошерстить на наличие вызовов всякой некошерности, записи чего не положенно куда не положенно и т.д. Подозреваю, что процесс полностью автоматизирован.
Речь вроде шла о переходе на 2008-й сервер... Но подробностей уже не припомню - давно было и лично не участвовал. Даже не помню в каком отделе и от кого я сие слышал. Но я это не сам придумал - факт!


 
Eraser ©   (2010-08-13 23:50) [26]

> [25] asail ©   (13.08.10 23:24)


> Насколько знаю, МС должны были код прошерстить на наличие
> вызовов всякой некошерности, записи чего не положенно куда
> не положенно и т.д. Подозреваю, что процесс полностью автоматизирован.

полностью автоматизирован и формален.

да кому они нужны эти сертификаты MS.

другой вопрос - сертификат ФСТЭК. но те, кому он нужен сами об этом все знают думаю )


 
Eraser ©   (2010-08-13 23:51) [27]

> да кому они нужны эти сертификаты MS.

хотя от него все таки есть польза - антивири более благосклонны.


 
Дмитрий Тимохов   (2010-08-16 23:33) [28]

Я пока цифровой подписью ограничюсь. Времени нет полностью удовлетворять требованиям. Главное для меня - MSI.
В остальное выполнено.


 
Дмитрий Тимохов   (2010-08-23 15:26) [29]

Позволю себе реанимировать данную тему.

ОТЧЕТ.
Я оформил цифровую подписку и подписал все свои файлы. Добавил манифест. Теперь вроде все как положено работает - если приложение требует прав админа (есть в манифесте или программа определяется как инсталлятор, вот, кстати, про автоопределение программы как инсталлятора http://ischevchenko.blogspot.com/), то выводится дружелюбный диалог синего цвета с текстом: "а позволить ли запуститься этой программе и изменить систему" (до цифровой подписи диалог был страшный и оранжевый). Т.о. все явно: если EXE подписан и есть манифест => обычные приложения запускаются без вопросов, а требующие админские права приложения запускаются с дружелюбным диалогом. Т.е. я добился требуемого поведения под Windows 7.

Теперь ВОПРОС:
Inno Setup, которым я пользуюсь, создает в каталоге программы файл unins000.exe. Именно этот файл прописан в ключе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MyProg_is 1\UninstallString.
При этом:
1. Если запустить из проводника файл unins000.exe, то, т.к. он не подписан, то появляется оранжевое (т.е. НЕ дружелюбное) сообщение, требующее подтверждения дальнейшего выполнения.
2. Если запустить деинсталляцию через Control panel, то будет синее (т.е. дружелюбное) предупреждение.

ПОЧЕМУ такая разница в поведении при запуске из проводника и из контрольной панели?

ЗЫ Вопрос теоретический (может, кто знает). Как подписывать деинсталляторы в InnoSetup я понял. Просто интересны причины разницы такого поведения.


 
Anatoly Podgoretsky ©   (2010-08-23 15:32) [30]

> Дмитрий Тимохов  (23.08.2010 15:26:29)  [29]

Тоже оранжевых не любишь?

Непонятно точно, что это значит "деинсталляцию через Control panel", видимо
имеешь ввиду запуск апплета "Программы", ну так в этом случае запуск
деинсталятора косвенный и права другие.


 
Дмитрий Тимохов   (2010-08-23 15:54) [31]


> Непонятно точно, что это значит "деинсталляцию через Control
> panel", видимо
> имеешь ввиду запуск апплета "Программы"


Да, именно так.


> ну так в этом случае запуск
> деинсталятора косвенный и права другие.


Т.е. Control Panel запускает программу как-то иначе?

А вообще - кто проверяет эту подпись?
Если одно приложение (подписанное) будет запускать другое неподписанное посредством CreateProcess, то будет диалог предупреждения?


 
Anatoly Podgoretsky ©   (2010-08-23 16:07) [32]

Это же надо или знать или проводить специальное испытание.


 
TIF ©   (2010-08-23 17:55) [33]

> 2. Если запустить деинсталляцию через Control panel, то будет синее (т.е. дружелюбное) предупреждение.
> ПОЧЕМУ такая разница в поведении при запуске из проводника и из контрольной панели?

При удалении в Wndows 7 программы через панель управления в появившемся диалоге UAC в качестве издателя отображается Microsoft Windows, а если развернуть подробности, то можно увидеть строчку
Код CLSID: {FCC74B77-EC3E-4DD8-A80B-008A702075A9}

Это явно говорит о том, что инициируется некий промежуточный системный процесс-посредник (вроде тут задействован COM). CLSID это подтверждает (appwiz.cpl)

Появление этого диалога вообще связано с тем, что выставлен самый жёсткий режим UAC. А вот если выставить его пониже, этого промежуточного диалога не будет, сразу появится окошко/сообщение деинсталлятора. Windows 7  научили "Не уведомлять при изменении параметров Windows пользователем". Похоже этот диалог - проявление работы системного связующего звена, которое как раз и сигнализирует о том, что действие инициировано пользователем (щёлкнувшим кнопку в панели управления), потому диалог и не проявляет себя в "мягких" режимах

Интересно, а как это выглядит в висте: там-то режим UAC всего один. Если диалог такой же, с издателем и подписью MS в сведениях, то это и правда связующее звено, но тогда моя догадка про "семёрочную сигнализацию" неправильная...


 
Дмитрий Тимохов   (2010-08-24 00:09) [34]

В общем подписал я и unistall от Inno setup. Мудреный там синтаксис однако.
В общем не ругается ни через проводник, ни через Control Panel.
Смущает, однако, ценность этих подписей - я с легкость в такой файл могу засунуть любой злонамеренный код...

ВОПРОС однако (на другую тему).
Вот в W7 в проводнике (и не только, правда) некоторые кнопочки имеют щит. Как сказано в доке - это значит, что выполнение операции требует повышения прав. Я, вот, возвращаюсь к исходному своему вопросу про повышение прав. Вот не пойму я, объясните, кто разбирался, что значит повышение прав?
а. Запуск нового процесса с повышенными правами?
б. Повышение (временное) прав у текущего процесса?


 
TIF ©   (2010-08-24 00:21) [35]

> б. Повышение (временное) прав у текущего процесса?

Если я ничего не путаю, возможен только пункт а.
То есть процесс себе права приподнять не может, только запустить(ся) с новым уровнем прав (или подгрузить модуль с новыми правами). Тот же диспетчер задач при нажатии кнопки "отображать процессы всех пользователей" (со значком щита) перезапускается. Уж наверное в Microsoft обошлись бы без этого, кабы был способ


 
Дмитрий Тимохов   (2010-08-24 00:24) [36]

Да, вот, я тоже так думаю.

Но хочется уверенности в понимании проблематики. Может я не там читаю? Признаться, я не штудировал интернет (смотрел, конечно, но не весь). Но я не видел хороших примеров, поясняющих что к чему. Штатные доки по сертификации на Compatible with Windows7 не отвечают на мои вопросы.


 
Anatoly Podgoretsky ©   (2010-08-24 10:17) [37]

> Дмитрий Тимохов  (24.08.2010 00:09:34)  [34]

а


 
имя   (2010-11-01 16:11) [38]

Удалено модератором


 
имя   (2010-11-01 16:12) [39]

Удалено модератором


 
имя   (2010-11-01 16:12) [40]

Удалено модератором



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

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

Наверх




Память: 0.58 MB
Время: 0.005 c
2-1285314207
Aleks
2010-09-24 11:43
2011.02.13
Как узнать о завершении работы Windows XP?


15-1288300763
Kerk
2010-10-29 01:19
2011.02.13
Позиционирование в космосе


2-1290523037
альбинка
2010-11-23 17:37
2011.02.13
cрочно надо сдать((((помогите)))


2-1290500657
adigozelov
2010-11-23 11:24
2011.02.13
Lisenziya


15-1288773954
12
2010-11-03 11:45
2011.02.13
Песня по радио на не русском мотив Цоя





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский