Проблемы с Win7 UAC при запуске приложения, предназначенного для WinXP - PullRequest
1 голос
/ 22 октября 2010

Приложение2 изначально было разработано приложение для WinXP.Теперь я должен бороться с контролем учетных записей (UAC) на Win7. Приложение 2 отлично работает на Win7, если пользователь вошел в учетную запись администратора и выбрал «Запуск от имени администратора».Тем не менее, я пытаюсь оценить, возможно ли рефрактор Application2 , чтобы он не требовал учетной записи администратора и «Запуск от имени администратора».Я также хотел бы избегать любых диалоговых окон, требующих от пользователей выбора, если это возможно.

Application2 функции, которые в настоящее время требуют "Запуск от имени администратора"

  1. Создать Система Источники данных (ODBC)
  2. Чтение / запись / удаление ключей реестра
  3. Копирование / удаление файлов в C:\Program Files\MyApp
  4. Кодирование / дешифрование файлов вC:\Program Files\MyApp
  5. Запуск процессов .exe, расположенных в общей папке на удаленном компьютере
  6. Запуск процессов VBScript, устанавливающих надстройки Office, и чтение / запись / удаление разделов реестра
  7. Копировать / удалять / изменять файлы в C:\Program Files\MyApp\MyData

Номер 6 можно решить, переместив эту папку в Мои документы (ее местоположение хранится в реестре *), или предоставив пользователю «Полный доступ»."разрешения на C:\Program Files\MyApp\MyData или разрешение Win7 внести необходимые изменения в папку VirtualStore.

С номерами 3 и 4 сложнее работать, потому что Application1 должен читать файлы в C:\Program Files\MyApp. Приложение1 не будет использовать «Запуск от имени администратора», и мне нужно провести дополнительные исследования, чтобы выяснить, как можно использовать папку VirtualStore для преодоления разрыва между Приложение2 и Приложение 1 .

Что касается других пунктов, я пытаюсь выяснить варианты:

  1. Пожалуйста, дайте мне знать, если / как это возможночтобы выполнить эти действия под учетной записью пользователя без прав администратора и без «Запуск от имени администратора».
  2. Пожалуйста, дайте мне знать, если какое-либо из действий невозможно без участия администратора.
  3. Не стесняйтесьуказать на любые технические ошибки, которые я мог допустить в содержании этого вопроса.
  4. Опять же, я стараюсь избегать диалоговых окон во время выполнения приложения.

* Мышлениездесь вслух: мне нужно будет удалить C:\Program Files\MyApp\MyData после копирования в C:\My Documents\MyData, и мне нужно будет изменить ключ реестра, хранящий путь к папке, возможно, эти шаги можно будет сделать во время установки.


Открытия

В Windows 7 даже без «Запуск от имени администратора» можно:

  1. Создание / удаление источников данных пользователя
  2. Создание / изменение / удаление файлов в C:\Users\Public\Documents или C:\Users\currentuser\Documents
  3. Создание / удаление ключей реестра в HKEY_CURRENT_USER

Кроме того, я считаю, что опасно иметь приложение Windows 7 без файла манифеста приложения UAC .Потому что, если у вас его нет, Windows 7 решает за вас, запускать ли приложение в режиме совместимости или нет.Если у вас есть, , вы можете указать, как должно работать ваше приложение.

Ответы [ 2 ]

2 голосов
/ 22 октября 2010

Нет, вы не можете делать эти вещи без повышения.Цель UAC - , а не , чтобы помешать вам сделать это, чтобы пользователь знал , что вы собираетесь это сделать.Очевидным и ценным свойством UAC является то, что он не предоставляет бэкдора для выполнения этих действий в любом случае без ведома пользователя.Это не проблема, это особенность.

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

1 голос
/ 22 октября 2010

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

Например, пункт 1 «Чтение и запись разделов реестра» является слишком общим.Приложения без повышенных прав могут без проблем читать и записывать ключи реестра.Ограничение заключается в том, что вы не можете записывать ключи реестра в HKLM .Таким образом, вы можете избежать проблем с UAC, если измените свой код на использование ключа в HKCU или если вы реорганизуете часть своего кода в приложение admin / config / setup, которое запускается с повышенными правами и записывает ключи в HKLM, и обычное приложение, которое читает этиключи, но никогда не записывает их.

Точки 2 и 3 оба «не могут записывать что-либо в Program Files».Измените код, чтобы файлы, которые необходимо скопировать / удалить / зашифровать / расшифровать, не находились в разделе Program Files.AppData является популярным (для каждого пользователя) местоположением для этого.

Держитесь подальше от всего, что связано с виртуализацией, и сознательно пытайтесь использовать виртуальное хранилище.Это сильно смущает пользователей.Вместо этого получите четкое представление о поведении, которое не могут выполнять приложения без повышенных прав, и настройте свой код для выполнения (очень похожих) заменяющих действий, таких как использование HKCU вместо HKLM или AppData вместо Program Files.

...