Как удалить ProgID из других учетных записей при удалении из Windows? - PullRequest
1 голос
/ 17 мая 2010

Я изучал «как современному приложению Windows c ++ регистрировать свои типы файлов» в Windows (см. C ++: как правильно регистрировать и отменять регистрацию ассоциаций типов файлов для нашего приложения (программно) ) .

И, прочесав различные статьи MSDN по этому вопросу, резюме выглядит следующим образом: :

  1. Установщик (с повышенными правами) должен зарегистрировать глобальный ProgID HKLM \ Software \ Classes \ my-app.my-doc [.version] (например, HKLM \ Software \ Classes \ TextPad.text)
  2. Программа установки также настраивает ассоциации по умолчанию для своих типов документов (например, .myext) и указывает это на вышеупомянутый глобальный ProgID в HKLM.
    ПРИМЕЧАНИЕ: здесь должен быть предусмотрен пользовательский интерфейс, позволяющий пользователю либо принимать все сопоставления по умолчанию, либо настраивать, какие сопоставления следует устанавливать.
  3. В приложении, работающем в стандартном (невыполненном) режиме, должен быть предусмотрен пользовательский интерфейс, позволяющий текущему пользователю устанавливать свои личные ассоциации, как это доступно в установщике, за исключением того, что эти ассоциации хранятся в HKCU \ Software \ Classes (для каждого пользователя, не за машину).
  4. Затем установщик ООН отвечает за удаление всех зарегистрированных ProgID (но должен оставить в покое фактические ассоциации файлов, поскольку Windows достаточно умна, чтобы обрабатывать ассоциации, указывающие на отсутствующие ProgID, и это является требуемым поведением MSDN).

Так что эта схема звучит для меня разумно, за исключением случая, когда я рассматриваю # 4: Как деинсталлятор, работающий с повышенными правами для данной учетной записи пользователя, удаляет любые ProgID для каждого пользователя, созданные на шаге 3 для других пользователей?

Как я понимаю, даже в режиме повышенных прав деинсталлятор не может войти в улей реестра другого пользователя и удалить элементы? Или это может? Должен ли он сначала загружать каждый пользовательский улей? Какие здесь правила?

Спасибо за любые идеи, которые вы можете предложить!

РЕДАКТИРОВАТЬ: см. Ниже для решения (мой вопрос был в замешательстве)

Ответы [ 2 ]

1 голос
/ 19 мая 2010

Я только что понял: что MS хочет, чтобы мы сделали для каждого пользователя переопределение самого отображения файла - то есть .foo -> что? НЕ создавайте никаких progID, которые должны быть созданы только установщиком, которые удаляются их деинсталлятором, поэтому никаких «висячих ProgID» - только «висячих файловых сопоставлений», которые отображаются на отсутствующий ProgID, который MS явно заявляет, - ОК.

Перед установкой: HKCR \ .txt -> HKCR \ txtfile (глобальный)

После установки: HKCR \ .txt -> HKCR \ MyEditor.text.1 (глобальный)

Пользователь решает, что он хочет сопоставить файлы .txt с TextPad: HKCU \ Software \ Classes \ .txt -> HKCR \ TextPad.txt (только этот пользователь, все еще в глобальном масштабе .txt-> MyEditor.text.1)

После удаления: HKCR \ .txt x-> HKCR \ MyEditor.text.1 (глобальный, но ключ HKCR \ MyEditor.txt.1 был удален)

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

Я надеюсь, что это помогает другим ...

1 голос
/ 17 мая 2010

Насколько я знаю, настройки в других учетных записях пользователей обычно просто остаются там. Это не ограничено ассоциациями типов файлов.

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

...