Запуск программы с пониженными привелегиями. Как?
От: Аноним  
Дата: 21.06.13 10:07
Оценка:
Привет.

Есть моё WinForms приложение, назовём Program. Оно запускается как обычно и работает с правами залогиненного в систему юзера.
Как-то уж так повелось, что установку хотфиксов для программы мы реализовали самостоятельно, а именно:
при старте Program лезет в БД, смотрит есть ли хотфикс, кот. нужно установить и если хотфикс есть — запускает другую программу Updater, а Program завершает работу.
Updater запускается с правами админа (это нужно для установки хотфикса), ставит хотфикс, потом запускает Program и Updater завершает работу.
Проблема в том, что Updater (запущенный с правами админа) запускает мою программу тоже с правами админа. Мне это совсем не подходит.

Уважаемые знатоки! Внимание, вопрос!
Как мне запустить из программы, запущенной с правами админа, программу с правами текущего юзера?
Логин/пароль текущего юзера я не знаю — runAs не подходит.

За любые идеи спасибо.

ps. Я придумал как сделать через запуск ещё одной программы, но это мне кажется уже слишком... Может можно проще.... В гугле не нарыл
Re: Запуск программы с пониженными привелегиями. Как?
От: Sinatr Германия  
Дата: 21.06.13 10:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А>За любые идеи спасибо.


Сделай Updater из двух частей, чтобы как-то так:


Бонус: Updater может обновить AdminUpdater.
---
ПроГLамеры объединяйтесь..
Re[2]: Запуск программы с пониженными привелегиями. Как?
От: Аноним  
Дата: 21.06.13 10:28
Оценка:
Здравствуйте, Sinatr, Вы писали:

S>Здравствуйте, Аноним, Вы писали:


А>>За любые идеи спасибо.


S>Сделай Updater из двух частей, чтобы как-то так:


S>

S>Бонус: Updater может обновить AdminUpdater.



Та я такое и придумал. Просто думал, может есть возможность обойтись без ещё одной программы.
Re[3]: Запуск программы с пониженными привелегиями. Как?
От: Аноним  
Дата: 21.06.13 11:02
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Sinatr, Вы писали:


S>>Здравствуйте, Аноним, Вы писали:


А>>>За любые идеи спасибо.


S>>Сделай Updater из двух частей, чтобы как-то так:


S>>

S>>Бонус: Updater может обновить AdminUpdater.


А>

А>Та я такое и придумал. Просто думал, может есть возможность обойтись без ещё одной программы.


PS. У меня Updater и так умеет обновлять сам себя — это 1 файл EXE (без dll). — Для обновления самого себя — переименовываю Updater.exe в Updater.bak, забираю новый Updater.exe, а Updater.bak удаляю при сдел. запуске Updater.exe
Работает
Re: Запуск программы с пониженными привелегиями. Как?
От: MAMOHT  
Дата: 21.06.13 11:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А>при старте Program лезет в БД, смотрит есть ли хотфикс, кот. нужно установить и если хотфикс есть — запускает другую программу Updater, а Program завершает работу.

А>Updater запускается с правами админа (это нужно для установки хотфикса), ставит хотфикс, потом запускает Program и Updater завершает работу.
А>Проблема в том, что Updater (запущенный с правами админа) запускает мою программу тоже с правами админа. Мне это совсем не подходит.

Как так получается, что программа может апдейтер под админом запустить, а апдейтер программу под пользователем — нет?
Может ты не там проблему ищешь?
Re[2]: Запуск программы с пониженными привелегиями. Как?
От: grosborn  
Дата: 21.06.13 11:12
Оценка:
MAM>Как так получается, что программа может апдейтер под админом запустить, а апдейтер программу под пользователем — нет?
MAM>Может ты не там проблему ищешь?

Для апдейта выбросится окно повышения привилегий. Пользователь разрешит. А потом нужно во избежание опять снизить уровень привилегий, после того как апдейт завершен.
Забанен на рсдн за применение слова "Маргинал"
Re[3]: Запуск программы с пониженными привелегиями. Как?
От: Аноним  
Дата: 21.06.13 11:18
Оценка:
Здравствуйте, grosborn, Вы писали:

MAM>>Как так получается, что программа может апдейтер под админом запустить, а апдейтер программу под пользователем — нет?

MAM>>Может ты не там проблему ищешь?

G>Для апдейта выбросится окно повышения привилегий. Пользователь разрешит. А потом нужно во избежание опять снизить уровень привилегий, после того как апдейт завершен.



Именно так.
Re[4]: Запуск программы с пониженными привелегиями. Как?
От: Ilinichev  
Дата: 21.06.13 11:51
Оценка:
Здравствуйте, Аноним, Вы писали:

MAM>>>Как так получается, что программа может апдейтер под админом запустить, а апдейтер программу под пользователем — нет?

MAM>>>Может ты не там проблему ищешь?
G>>Для апдейта выбросится окно повышения привилегий. Пользователь разрешит. А потом нужно во избежание опять снизить уровень привилегий, после того как апдейт завершен.
А>Именно так.

Автор темы, уточни, что именно ты делаешь для запуска апдейтера: повышаешь привилегии текущего пользователя (Integrity Level), либо запускаешь апдейтер вообще под другой учетной записью, у которой админские права?
Re[5]: Запуск программы с пониженными привелегиями. Как?
От: Аноним  
Дата: 21.06.13 12:07
Оценка:
Здравствуйте, Ilinichev, Вы писали:

I>Автор темы, уточни, что именно ты делаешь для запуска апдейтера: повышаешь привилегии текущего пользователя (Integrity Level), либо запускаешь апдейтер вообще под другой учетной записью, у которой админские права?


Повышаю привелегии текщего юзера.
Манифестом в апдейтере: <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

А теперь хотелось бы из апдейтера запустить Program обратно с уровнем asInvoker.
Re[6]: Запуск программы с пониженными привелегиями. Как?
От: Ilinichev  
Дата: 21.06.13 12:45
Оценка:
Здравствуйте, Аноним, Вы писали:

I>>Автор темы, уточни, что именно ты делаешь для запуска апдейтера: повышаешь привилегии текущего пользователя (Integrity Level), либо запускаешь апдейтер вообще под другой учетной записью, у которой админские права?

А>Повышаю привелегии текщего юзера.
А>Манифестом в апдейтере: <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
А>А теперь хотелось бы из апдейтера запустить Program обратно с уровнем asInvoker.

здесь

Starting a non-elevated process from an elevated one

Going in the opposite direction (from an elevated process to a non-elevated one) turns out to be much more difficult. If the parent process is elevated, then any process it starts directly becomes elevated too, no matter which value of the requestedExecutionLevel attribute is specified in the application's manifest. For some reason, Microsoft has not provided an API to lower the execution level directly, so we had to come up with an indirect way of achieving the goal.

The trick is to use the built-in Task Scheduler of Windows Vista to set up a task to be executed at the low execution level, and request that the task should start as soon as it is registered with Task Scheduler. The net result is about the same as if the process was started directly.

The source code of this article contains the function RunAsStdUser() that does exactly that. It is based on the MSDN sample "Registration Trigger Example", and it involves calls to more than a dozen COM interfaces to communicate with the Task Scheduler and set up a task to run at the standard (non-elevated) level. I am not including the source code of the function here as it's rather boring; you can find it in the file VistaTools.cxx


Там С++, так что кстати, наверное, будет что-то типа вот такого.
Re[7]: Запуск программы с пониженными привелегиями. Как?
От: Аноним  
Дата: 21.06.13 13:24
Оценка: +1
Здравствуйте, Ilinichev, Вы писали:

I>Здравствуйте, Аноним, Вы писали:


I>>>Автор темы, уточни, что именно ты делаешь для запуска апдейтера: повышаешь привилегии текущего пользователя (Integrity Level), либо запускаешь апдейтер вообще под другой учетной записью, у которой админские права?

А>>Повышаю привелегии текщего юзера.
А>>Манифестом в апдейтере: <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
А>>А теперь хотелось бы из апдейтера запустить Program обратно с уровнем asInvoker.

I>здесь

I>

I>Starting a non-elevated process from an elevated one

I>Going in the opposite direction (from an elevated process to a non-elevated one) turns out to be much more difficult. If the parent process is elevated, then any process it starts directly becomes elevated too, no matter which value of the requestedExecutionLevel attribute is specified in the application's manifest. For some reason, Microsoft has not provided an API to lower the execution level directly, so we had to come up with an indirect way of achieving the goal.

I>The trick is to use the built-in Task Scheduler of Windows Vista to set up a task to be executed at the low execution level, and request that the task should start as soon as it is registered with Task Scheduler. The net result is about the same as if the process was started directly.

I>The source code of this article contains the function RunAsStdUser() that does exactly that. It is based on the MSDN sample "Registration Trigger Example", and it involves calls to more than a dozen COM interfaces to communicate with the Task Scheduler and set up a task to run at the standard (non-elevated) level. I am not including the source code of the function here as it's rather boring; you can find it in the file VistaTools.cxx


I>Там С++, так что кстати, наверное, будет что-то типа вот такого.



Спасибо.
Наверно просто сделаю маленький стартер для запуска. Что-то неохота завязываться на taskscheduler.
За идею спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.