Фон
Я написал небольшое приложение на C # /. NET 4.0, которое синхронизирует различные настройки из игры, установленной в программных файлах, и из других копий одной и той же игры в разныхмашины (думаю Chrome синхронизировать закладки, но для этой игры).Сама синхронизация является относительно простым делом, имея дело с файлами, хранящимися в папке Program Files игры.
На моей машине это работает нормально, без необходимости повышения уровня приложения через UAC.Windows 7 заставляет игру использовать виртуализацию Program Files, и мое приложение прекрасно с ней работает.
Однако на многих машинах тестировщика я получаю сообщения о том, что приложение не может работать с файлами иПриходят случаи, даже не вижу папку с игрой!Правый щелчок пользователя и «Запуск от имени администратора» решает проблему в каждом случае.
Итак, мы просто устанавливаем манифест приложения, требующий прав администратора, верно?Это хорошо (хотя и не идеально), когда пользователь вручную вызывает приложение или процесс синхронизации, потому что он будет взаимодействовать с приложением и готов принять запрос UAC.
Однако одна из функций моегоПриложение - это опция «Синхронизировать автоматически», которая позволяет пользователю «установить и забыть» приложение.С этим набором приложение помещает себя в реестр по адресу HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Run для запуска при запуске и сидит в системном трее, синхронизируя настройки в фоновом режиме по мере необходимости.
Очевидно,Мне нужно быть умнее здесь.Представление приглашения UAC, как только пользователь входит в свою учетную запись или через случайные промежутки времени, не является способом продвижения вперед.
Итак, мой вопрос!
Как лучше всего подходить к ситуации, когда мне нужно запускать приложение при запуске, которое требует прав администратора?Есть ли способ заставить пользователя авторизовать установку, при которой система автоматически запускает приложение с правильными привилегиями без запроса при запуске / входе в систему?
Обновление Просто, чтобы было ясно,это должно быть достижимо в коде.