dark_rain
|
|
« : 14-10-2011 13:31 » |
|
Итак, ситуация следующая есть программа, которая в данный момент пишется мной, при установке ее на W7 под User требует поставить от Admin (вываливается окошко, в котором нужно ввести пароль администратора). Ставлю от Admin, в папке C:\Users\Admin\AppData\Roaming создается папка с config.xml, без которого прога не стартует. После установки прога стартует сама, корректно, и чудесно отрабатывает, я ее закрываю и запускаю заново. После перезапуска она стартует некорректно т.к. при установке config.xml записался в appdata к Admin, и даже если я руками скопирую его в appdata к user прога его не видит, ну а у admin ей, естественно, прав не хватает прочитать. Подскажите пожалуйста как красиво выйти из этой ситации и сделать мое приложение рабочим?
|
|
« Последнее редактирование: 17-10-2011 10:27 от Джон »
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #1 : 14-10-2011 16:21 » |
|
1. Все действия по установке, которые требуют прав админа выделить в отдельную прогу. 2. Установочная прога устанавливая программу под юзером, для действий требующих админских полномочий, через RunUs (ShellExecuteEx( ..."runas"...)) вызывает прогу из п. 1 3. Установочная прога дожидается окончания работы вспомогательной проги и продолжает или завершает процесс установки.
Правда в этом есть недостаток. Недавно столкнулся с проблемой: Установочная программа создает файл вспомогательной программы во временной папке и оттуда его запускает. На что срабатывает проактивная защита Каспера 2012 - ему видите ли данные действия похожи на действия какого то вируса. Что, имхо, параноидально, потому как добрая половина программ, вполне добропорядочных, выполняет подобные действия.
|
|
|
Записан
|
|
|
|
dark_rain
|
|
« Ответ #2 : 17-10-2011 08:34 » |
|
zubr, спасибо буду разбираться. А как ручками запустить прогу от имени определенного User'a? Среди модулей программы есть апдейтер, в принцмпе он отрабатывает корректно, но опять таки по умолчанию стартует от админа, как мне его ручками запустить от Usera?
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #3 : 17-10-2011 09:14 » |
|
Вар. 1. Войти в систему из под данного юзера и запустить Вар. 2. Запускать из команды контекстного меню проводника (или другого ф. менеджера) Run As.
|
|
|
Записан
|
|
|
|
dark_rain
|
|
« Ответ #4 : 17-10-2011 09:47 » |
|
Спасибо, пробовал по вар. 1, из под User, странно, но в диспетчере задач процес отображался как запущенный от Admin. Нашел потом фичу на win7 - нажимаешь Shift и Right Button выскакивает менюшка, в пунктах есть Run AS Different User, я так полагаю это GUIшный вариант описанного тобой вар.2.
|
|
|
Записан
|
|
|
|
RuNTiME
|
|
« Ответ #5 : 17-10-2011 10:07 » |
|
dark_rain, Твоя программа настолько большая и сложная, с кучей файлов, которые ей требуется записывать в системные каталоги? Думаю нет. И вот зачем нужна установка этой программы да еще и от админских прав? Если программе требуется config.xml и она его не находит, следует создать его с параметрами по умолчанию в папке пользователя под которым запускается программа, а не выходить из программы, оставляя пользователя думать, почему же эта программа не запускается. К тому же программы, которые не требуют установки гораздо удобнее в использовании: запустил и работает. Ну, а если уж ооочень хочется сделать установку для программы, то полно готовых и бесплатных решений, например NullSoft Install http://nsis.sourceforge.net/Main_Page и ему подобных.
|
|
|
Записан
|
Любимая игрушка - debugger ...
|
|
|
dark_rain
|
|
« Ответ #6 : 17-10-2011 11:23 » |
|
RuNTiME, пользуюсь другим средством создания инсталляций, а насчет того что программа создает какие-либо файлы в папке, где установленна, это одна из самых распространенных ошибок, по которым Microsoft в последствии заворачивает сертификацию, тем более, если ты будешь под User'ом на Win7 попробуй что нибудь записать в каталог с установленной программой, предположим "...\Program Files\Programma\Cofig"? Ничего не выйдет. Тут вся заморочка с UAC я пологаю.
|
|
|
Записан
|
|
|
|
RuNTiME
|
|
« Ответ #7 : 17-10-2011 11:31 » |
|
dark_rain, Я и не говорю писать в ту папку, где установлена программа. Создавай config.xml в C:\Users\<имя пользователя, от которого запущена программа>\AppData\Roaming при запуске программы. Думаю для этого можно использовать функцию: http://msdn.microsoft.com/en-us/library/ms891226.aspx
|
|
« Последнее редактирование: 17-10-2011 11:40 от RuNTiME »
|
Записан
|
Любимая игрушка - debugger ...
|
|
|
zubr
Гость
|
|
« Ответ #8 : 17-10-2011 11:41 » |
|
RuNTiME, так в том и проблема, что если прога устанавливается из под админа, то и путь к C:\Documents and Settings\UserName\... будет админский.
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #9 : 17-10-2011 11:45 » |
|
Имхо, для определения юзерных каталогов, удобнее использовать SHGetSpecialFolderPath
|
|
|
Записан
|
|
|
|
RuNTiME
|
|
« Ответ #10 : 17-10-2011 11:49 » |
|
zubr, Ну так я и пишу, что можно отказаться от установки... темболее от админа. А конфиг записывать при запуске программы (при необходимости) из под обычного юзера, тогда и путь будет к каталогу обычного юзера. Имхо, для определения юзерных каталогов, удобнее использовать SHGetSpecialFolderPath Работаю последние несколько лет под linux'ом, так что могу и ошибаться насчет виндовых апи функций
|
|
|
Записан
|
Любимая игрушка - debugger ...
|
|
|
|