Wpf, реєстрація типу файлу

Припустимо потрібно зареєструвати в Windows розширення файлу (наприклад .testDoc) і асоціювати його з додатком. Після цього клацання на файлі * .testDoc повинен призводити до негайного запуску додатка.

Один із способів зареєструвати цей тип файлу вручну передбачає використання провідника Windows:

Клацніть правою кнопкою на файлі .testDoc і виберіть в контекстному меню пункт Відкрити за допомогою. -> Вибрати програму.

У діалоговому вікні Вибір програми клацніть на кнопці Огляд, знайдіть ЕХЕ-файл свого застосування і двічі клацніть на ньому.

Якщо не хочете робити додаток оброблювачем за замовчуванням для файлів цього типу, упевніться, що в діалоговому вікні «Вибір програми» прапорець Використовувати обрану програму всіх файлів такого типу не відзначений. В цьому випадку запускати додаток подвійним клацанням на файлі не вийде, але можна відкривати файл клацанням на ньому правою кнопкою миші, вибором в контекстному меню пункту Відкрити за допомогою. і потім потрібного програми зі списку.

Клацніть на кнопці ОК.

Інший спосіб реєстрації типу файлу полягає у виконанні коду, який редагує системний реєстр:

Клас FileRegistrationHelper реєструє розширення файлу .testDoc, використовуючи класи з простору імен Microsoft.Win32.

Процес реєстрації повинен виконуватися тільки один раз. Після того, як реєстрація завершена, будь подвійне клацання на файлі з розширенням .testDoc призводить до запуску SingleInstanceApplication, і цей файл передається у вигляді аргументу командного рядка. Якщо SingleInstanceApplication вже запущений, то викликається метод SingleInstanceApplicationWrapper.OnStartupNextInstance () і існуючу програму завантажує новий документ.

Служба захисту користувачів

Реєстрація файлу - це завдання, яке зазвичай виконується програмою установки. Проблема з включенням її в код програми полягає в тому, що вона вимагає підвищених привілеїв, яких може не мати користувач, що запустив додаток. Зокрема, тут вступає в дію засіб контролю облікових записів користувачів (User Account Control - UAC) в Windows Vista і Windows 7. Фактично за замовчуванням цей код завершиться збоєм з генерацією винятку, пов'язаного з безпекою.

З точки зору UAC всі програми мають один з трьох рівнів виконання:

Додаток успадковує маркер процесу від батьківського процесу (процесу, що запустив його). Додаток не отримає адміністративних привілеїв, якщо тільки користувач спеціально не запитав їх - навіть якщо користувач зареєстрований як адміністратор. Цей рівень приймається за замовчуванням.

Якщо поточний користувач є членом групи Administrators (Адміністратори), з'явиться діалогове вікно підтвердження UAC. Як тільки користувач підтвердить, додаток отримає адміністративні привілеї. Якщо ж користувач не є членом групи Administrators, з'явиться діалогове вікно, де користувач зможе ввести ім'я та пароль облікового запису, що володіє адміністративними привілеями.

Додаток отримує максимальні привілеї згідно членства в групах. Наприклад, якщо поточний користувач - член групи Administrators, то додаток отримує адміністративні привілеї (як тільки прийме підтвердження UAC). Перевага цього рівня виконання в тому, що додаток продовжить виконання, якщо адміністративні привілеї недоступні, на відміну від requireAdministrator.

Зазвичай додаток виконується з рівнем aslnvoker. Щоб запросити адміністративні привілеї, при запуску необхідно натиснути правою кнопкою миші на ЕХЕ-файлі і вибрати в контекстному меню пункт Run As Administrator (Запуск від імені адміністратора). Щоб отримати адміністративні привілеї при тестуванні додатка в середовищі Visual Studio, потрібно натиснути правою кнопкою миші на ярлику Visual Studio і вибрати в контекстному меню пункт Run As Administrator.

Якщо з додатком потрібні адміністративні привілеї, їх можна запросити за допомогою рівня виконання requireAdministrator або highestAvailable. У будь-якому випадку потрібно буде зробити маніфест - файл з блоком XML-розмітки, який буде вбудований в скомпільовану збірку. Щоб додати маніфест, клацніть правою кнопкою миші на проекті в Solution.Explorer і виберіть в контекстному меню пункт Add -> New Item (Додати) -> Новий елемент). Вкажіть шаблон Application Manifest File (Файл маніфесту додатки) і клацніть на кнопці Add (Додати).

Для зміни рівня виконання просто змінюйте атрибут рівня елемента . Допустимими значеннями є aslnvoker, requireAdministrator і highestAvailable:

У деяких випадках адміністративні привілеї повинні запитуватися тільки в певних сценаріях. У прикладі з реєстрацією файлу це може знадобитися при першому запуску програми, коли воно потребує реєстрації. Це дозволить уникнути непотрібних попереджень UAC. Найпростіший спосіб реалізувати цей шаблон полягає в розміщенні коду, який вимагає підвищених привілеїв, в окремому виконуваному модулі, який можна викликати при необхідності.