Программирование >>  Управление учетными записями 

1 [ 2 ] 3 4 5 6


1718 Часть VII. Приложения

Структура каталогов

Структура каталогов Windows в версии Windows Vista претерпела изменения. Теперь уже нет каталога c:\Documents and Settings\<username>. Он заменен новой папкой c:\Users\<username>. Windows XP определяет подкаталог My Documents (Мои документы) для хранения пользовательских данных. Windows Vista имеет для этого c:\Users\<username>\Documents.

Если вы следуете простому правилу - не использовать жестко закодированные значения путей в программе, то не важно, где хранятся реальные папки. Эти папки все равно отличаются при использовании разных языков в Windows. Для обращения к специальным папкам используйте класс Environment и перечисление SpecialFolders:

string folder = Environment.GetFolderPath(Environment.SpecialFolder.Personal);

Некоторые папки, определенные в перечислении SpecialFolders, описаны в табл. В.1.

Таблица В.1. Некоторые папки, определенные в перечислении SpecialFolders

Содержимое

Перечисление

SpecialFolder

Каталог Windows Vista по умолчанию

Специфичные для пользователя документы

Personal

c:\Users\<User>\

Documents

Специфичные для блуждающих пользователей данные

ApplicationData

c:\Users\<User>\

AppData\Roaming

Специфичные для пользователя данные, локальные по отношению к системе

LocalApplicationData

c:\Users\<User>\ AppData\Local

Программные файлы

ProgramFiles

c:\Program Files

Программные файлы, разделяемые разными программами

CommonProgramFiles

c:\Program Files\ Common Files

Прикладные данные, общие для всех пользователей

CommonApplicationData

c:\ProgramData

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

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

Поскольку многие приложения пишут содержимое в каталог программных файлов, они не могут выполняться в среде Windows Vista без административных привилегий. Windows Vista предусматривает решение для работы с такими программами - перенаправление папки в виртуальное хранилище, которое может быть прочитано и записано приложением без генерации ошибок. Эта техника называется файловой виртуализацией.

Проверим это, написав простую программу, записывающую файл в подкаталог WroxSampleApp папки Program Files. Вызов Environment.GetFolderPath() со значением перечисления ProgramFiles возвращает папку Program Files; точное наименование этой папки зависит от языка текущей инсталляции Windows.



Приложение В. Windows Vista и Windows Server 2008 1719

Папка Program Files комбинируется с каталогом WroxSampleApp, и в этот каталог пишется файл samplefile.txt.

string programFiles = Environment.GetFolderPath(

Environment.SpecialFolder.ProgramFiles); string appDir = Path.Combine(programFiles, WroxSampleApp ); if (!Directory.Exists(appDir))

Directory.CreateDirectory(appDir);

string demoFile = Path.Combine(appDir, samplefile.txt );

File.WriteAllText(demoFile, test content );

При запуске этого приложения без повышения уровня привилегий файл не записывается в каталог c:\Program Files\WroxSampleApp. Вместо этого в системе Windows Vista вы найдете его в каталоге c:\Users\<username>\AppData\Local\Virtual Store\Program Files\WroxSampleApp.

Как видите, данные сохраняются в специфичный для пользователя каталог и не разделяются между разными пользователями одной и той же системы. Если же ставится такое требование, вы должны запустить приложение в режиме с повышенным уровнем привилегий. При запуске вашего приложения из привилегированного процесса Visual Studio файл пишется в папку Program Files вместо виртуального хранилища, поскольку приложение, запущенное из привилегированного процесса, также является привилегированным.

Для чтения файлов необходим другой механизм. Поскольку инсталляционной программе разрешено писать содержимое в папку Program Files, вполне корректным является разрешение программе читать из папки Program Files. Пока программа записывает в эту папку без дополнительных привилегий, происходит перенаправление. Когда же она читает записанное снова, то перенаправление осуществляется и для чтения.

Виртуализация выполняется не только для каталогов, но также и для элементов реестра. Если приложение пишет в ключ реестра Software в ветви HKEY LOCAL MACHINE, то запись перенаправляется в ветвь HKEY CURRENT USER.

Вместо записи в HKLM Software\{Manufacturer} она пишет в HKCU\Software\ Classes\VirtualStore\MACHINE\SOFTWARE\{Manufacturer}.

Файловая и реестровая виртуализация доступна только для 32-разрядных приложений, но не доступна для 64-разрядных приложений для Windows Vista.

Не применяйте файловую и реестровую виртуализацию в качестве средства вашего приложения. Лучше исправить приложение, чем писать в папку Program Files и ветвь HKLM реестра, не имея расширенных привилегий пользователя. Перенаправление - лишь временный способ исправить ошибочные приложения.

Новые элементы управления и диалоговые окна

Windows Vista предлагает несколько новых элементов управления. Элемент типа командной ссылки (command link) является расширением элемента управления типа Button и применяется с несколькими другими элементами управления. Диалог задач (task dialog) - это элемент MessageBox нового поколения, а для открытия и сохранения файлов также предусмотрены новые диалоги.

Командная ссылка

Элементы управления типа командных ссылок - это Windows-расширение элемента управления Button. Командные ссылки содержат необязательную пиктограмму и



1720 Часть VII. Приложения

текст примечания. Этот элемент управления часто используется в диалогах задач и мастерах. На рис. В.4 показано две командных ссылки, которые предоставляют намного больше информации, чем кнопки с надписями OK и Cancel (Отмена).


Рис. В.4. Командные сс1лки

В приложениях .NET вы можете создавать командные ссылки, используя библиотеку примеров Vista Bridge. Если вы добавите проект VistaBridgeLibrary в решение, то сможете вставлять элементы CommandLinkWinForms из панели инструментов в свое приложение Windows Forms. Класс CommandLinkWinForms унаследован от класса System.Windows.Forms.Button. Командная ссылка - расширение родного Windows-элемента Button, определяющая дополнительные сообщения Windows и новый стиль для конфигурирования Button. Класс-оболочка CommandLinkWinForms посылает сообщения Windows BCM SETNOTE и BCM SETSHIELD и устанавливает стиль BS COMMANDLINK. Общедоступные методы и свойства, добавленные к списку членов класса Button - это NoteText и ShieldIcon.

В следующем фрагменте кода создается новая командная ссылка с установкой NoteText и ShieldIcon. На рис. В.5 показано, как выглядит сконфигурированная командная ссылка во время выполнения.

this.commandLinkDemo =

new Microsoft.SDK.Samples.VistaBridge.Library.CommandLinkWinForms(); this.commandLinkDemo.NoteText =

The application deletes important files on your system ; this.commandLinkDemo.ShieldIcon = true;

this.commandLinkDemo.Size = new System.Drawing.Size(275, 68); this.commandLinkDemo.Text = Give access to this computer ; this.commandLinkDemo.UseVisualStyleBackColor = true; this.Controls.Add(commandLinkDemo);


Рис. В.5. Сконфигурированная командная ссылка во время выполнения

Диалог задач

Диалог задач (task dialog) - это диалог следующего поколения, пришедший на смену старому окну сообщений (message box). Диалог задач - также один из новых элементов управления общего назначения. В Windows API определены функции TaskDialog и TaskDialogIndirect для создания диалогов задач. TaskDialog позволяет создавать простые диалоги, а TaskDialogIndirect служит для создания более сложных диалогов, содержащих командные ссылки и расширенное содержимое.



1 [ 2 ] 3 4 5 6

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика