Удалить пользовательское действие, не удаляя ключ реестра

В моей программе я создаю раздел реестра под текущим пользователем. Эта программа запускается планировщиком заданий с самыми высокими разрешениями (S-1-5-32-545).

В моем удалении пользовательского действия у меня есть код для удаления этого ключа.

Код для удаления ключа работает, когда я запускаю от имени администратора.

Код не работает при запуске из пользовательского действия удаления.

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

Как я могу удалить этот раздел реестра при запуске из пользовательского действия удаления? Как указать пользовательское действие удаления для правильного текущего пользователя?

1 ответ

Я в значительной степени не знаком с использованием планировщика задач в Windows 10. Я много раз использовал его в тот день в Windows 2000, и тогда это было очень примитивно - крайне не хватало необходимых мне функций.

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


Добавление / удаление запланированных задач

Мне интересно, как вы создаете запланированное задание? Вы взламываете реестр напрямую? Вам, вероятно, следует использовать schtasks.exe, чтобы создать и удалить его из командной строки с вашим пакетом WiX. Вот один вопрос / ответ, где они имеют дело с одной и той же проблемой: WIX Create Scheduled Task.

Вы уже знаете это, но это и для других:

  1. Создайте запланированное задание вручную, используя консоль запланированного задания.
    • Удерживая клавишу Windows, нажмите R
    • Введите: taskschd.msc и нажмите Enter
  2. Теперь создайте свою задачу вручную в графическом интерфейсе запланированной задачи и протестируйте ее.
  3. Создайте / удалите запланированную задачу с помощью schtasks.exe с помощью настраиваемого действия для тихого выполнения в своем пакете WiX.

Хранение запланированных задач

Кажется, что запланированные задачи хранятся не в пользовательском разделе реестра (HKCU), а на диске и в разделе реестра для компьютеров (HKLM): где Windows хранит параметры консоли "Запланированные задачи"? Это должно означать, что они могут быть удалены для всех пользователей на машине, просто удаляя их при удалении. Как ваш ключ реестра HKCU входит в изображение? Вот страница MSDN на Schtasks.exe.


Альтернативы запланированным задачам

Для справки: есть несколько вариантов запуска приложения в виде запланированной задачи, которая может быть лучше или проще запланированной:

  1. Вы можете запустить свое приложение как службу Windows.
    • Это сложное "решение" для разработчиков, требующее изменения кода, но, вероятно, наиболее надежное, особенно для критически важных для бизнеса задач.
    • См. Это резюме: Когда я должен использовать запланированное задание вместо службы Windows?
      • Службы Windows более надежны для круглосуточной работы.
      • Запланированные задачи для вещей, которые происходят "время от времени" (даже один раз при входе в систему).
      • " Таким образом, запланированное задание часто лучше для периодических работ по техническому обслуживанию, которые не требуют сложного контроля ".
    • Службы обычно должны запускаться как LocalService, LocalSystem, Network Service - без графического интерфейса пользователя, но также могут запускаться с учетными данными пользователя.
    • Часто задаваемые вопросы о службах Windows (FAQ). Просто для справки и "сохранности" ссылки.
    • См. Некоторую информацию о различных учетных записях служб, которые вы можете использовать здесь: Разница между учетной записью "Local System" и учетной записью "Network Service"?
    • Представляет ли ваше приложение реальный графический интерфейс для пользователя? Кажется, это больше невозможно (начиная с Vista): интерактивные услуги , Я спросил, является ли это точным или нет, или "история изменилась снова". Фил Уилсон (эксперт MSI), вероятно, может сказать нам - я читал статью о его услугах в тот день.
  2. Вы можете использовать папку автозагрузки для всех пользователей, как предложено здесь.
    • Здесь есть несколько вариантов. Пожалуйста, проверьте ссылку. В связанной статье есть дополнительные ссылки, которые стоит прочитать.
  3. Зарегистрируйтесь в реестре для запуска при загрузке / авторизации.

    • Хороший инструмент: autoruns64.exe. Если вы действительно хотите найти множество способов запустить что-то при загрузке (зарегистрировав это в реестре), вы можете использовать инструмент Sysinternals autoruns64.exe (это прямая ссылка для скачивания из общего ресурса инструмента sysinternals, вот страница Microsoft).
    • Этот инструмент действительно показывает, сколько способов можно запланировать для запуска при запуске системы, зарегистрировавшись " где-то в реестре ". Drivers, services, scheduled tasks, IE, WinLogon, и многое другое. Возможно, снимите флажок "Hide" entries в Options menu быть действительно озадаченным количеством соответствующих ключей (куч вредоносных векторов).
    • Предупреждение: этот инструмент не для обычных пользователей. В нем есть все веревки, которые вам нужны, чтобы выстрелить себе в ногу, если вы не знаете, что отключаете. Разработчик / sys-admin только, пожалуйста. Как ни странно, это не похоже на то, что папки запуска в профиле пользователя перечислены в инструменте - я думаю, что это инструмент, связанный только с регистраторами на основе реестра. Скриншот, который я нашел:

Другие вопросы по тегам