Повышение уровня .NET 2.0 для установки приложения - PullRequest
0 голосов
/ 01 апреля 2010

У нас есть приложение, написанное на C ++ и .NET, которое устанавливается для всех пользователей в папке Program Files. Это приложение загружает новые версии себя (как установщики MSI) и порождает новый процесс установки, чтобы заменить себя.

Процесс установки, существующий сегодня:

  1. Скопируйте приложение менеджера установки (C #, .NET 2.0) во временный каталог. Позвоните этому «менеджеру»
  2. Менеджер выполняется с повышенными привилегиями за эту статью .
  3. Исходное приложение выходит.
  4. Менеджер порождает установщик MSI (с повышенными привилегиями, поскольку копия повышена)
  5. Менеджер порождает новую версию приложения.

Ошибка:

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

В идеале запуск недавно установленного приложения должен выполняться с разрешениями исходного пользователя.

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

Неэкранированный хак:

(да, да, весь этот процесс все равно не элегантен)

  1. Скопируйте менеджер установки во временный каталог
  2. Запустите менеджер установки со стандартными привилегиями пользователя. Давайте назовем этот экземпляр «LowlyManager».
  3. Исходное приложение выходит.
  4. LowlyManager снова запускает приложение , на этот раз с повышенными привилегиями. Давайте назовем этот экземпляр «UpperManagement»
  5. UpperManagement запускает установщик
  6. UpperManagement завершает работу корректно, возвращая код завершения программы установки.
  7. LowlyManager интерпретирует код ошибки из UpperManagement и порождает только что установленное приложение. На этот раз как первоначальный призыватель.

Есть ли лучший способ сделать это?

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

Другие требования:

  • Мы не можем установить приложение для пользователя
  • Пользователю не должно быть представлено диалоговое окно аутентификации, если бы UAC просто спросил: «Вы уверены, что хотите это разрешить?». Я думаю, что это может убить решение с помощью WindowsImpersonationContext, но я не уверен.
  • Система должна работать на XP, Vista и Windows 7 (даже если для XP существует отдельный процесс).

1 Ответ

1 голос
/ 01 апреля 2010

В одну сторону: http://www.codeproject.com/KB/vista-security/VistaElevator.aspx

Другой способ (упоминается в последнем комментарии в предыдущей статье): http://brandonlive.com/2008/04/27/getting-the-shell-to-run-an-application-for-you-part-2-how/

...