Укажите полный путь к установочному файлу с атрибутами

Обновлено: 03.07.2024

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

Для некоторых проектов может потребоваться настроить отображение диалогового окна "Открыть файл" во время установки.

Обычной задачей установки является предоставление зарегистрированному пользователю возможности выбрать файл лицензии для вашего приложения до или после установки пакета. Поскольку установщик Windows не позволяет отобразить диалоговое окно «Открыть файл», для выполнения этой задачи требуется специальное действие.

Расширенный установщик (начиная с версии 5.0) включает предопределенное настраиваемое действие, которое отображает диалоговое окно «Открыть файл», позволяя пользователю выбрать файл в своей системе. При желании вы можете настроить диалоговое окно в определенной степени, указав заголовок диалогового окна, фильтры и имя файла, которые будут использоваться для инициализации диалогового окна «Открыть файл».

Для этой функции требуется как минимум лицензия Enterprise.

Обычное использование включает добавление кнопки "Обзор" и элемента управления "Правка" в новое или существующее диалоговое окно. Пользователь может ввести путь к файлу вручную в элементе управления «Правка» или нажать кнопку «Обзор», чтобы выбрать файл в своей системе.

  • 1. Отображать диалоговое окно «Открыть файл» во время установки
  • 2. Настройка диалогового окна «Открыть файл»
    • 2.1 Указание заголовка для диалогового окна "Открыть файл"
    • 2.2 Указание фильтров диалогового окна
    • 2.3 Указание имени файла (и, возможно, начального каталога)

    1. Отображать диалоговое окно «Открыть файл» во время установки

    Шаги, необходимые для добавления этой функции в ваш проект Enterprise или Architect, представлены ниже:

    1.1 Переключитесь на страницу «Настраиваемые действия» и добавьте предопределенное пользовательское действие «BrowseForFile» без последовательности. Вам не нужно изменять какие-либо настройки для этого дополнительного действия.

    1.2 Перейдите на страницу диалогов и выберите нужный диалог в дереве элементов управления или создайте новый.

    1.3 Добавьте в это диалоговое окно элементы управления Button и Edit. Элемент управления "Статический текст" можно использовать вместо элемента управления "Правка", если вы не хотите, чтобы пользователь ввел путь к файлу вручную (другим способом может быть установка для атрибута "Включено" элемента управления "Правка" значения "Ложь").

    1.4 Установите для атрибута "Текст" кнопки значение "[ButtonText_Browse]" (или другое строковое значение, подходящее для вашего проекта). Вы также можете присвоить элементу управления Button осмысленное имя, задав атрибут Name.

    1.5 Назначьте понятное имя элементу управления «Правка», а также установите его атрибут «Имя свойства». В дальнейшем предполагается, что свойство, прикрепленное к элементу управления Edit, называется «MY_FILEPATH». Этому свойству будет присвоен полный путь к файлу, выбранному пользователем.

    1.6 Теперь необходимо связать пользовательское действие "BrowseForFile" с событием нажатия кнопки "Browse". Это делается с помощью управляющего события «Выполнить настраиваемое действие». Нажмите кнопку «Обзор» в диалоговом окне, выберите вкладку «Опубликованные события» внизу и добавьте управляющее событие «Выполнить настраиваемое действие», нажав «Создать». Настройте управляющее событие следующим образом:

    СобытиеАргументУсловие
    Выполнить пользовательское действиеBrowseForFile(оставьте по умолчанию)

    1.7 Следующим шагом является установка свойства элемента управления "Правка" ("MY_FILEPATH") на полный путь к файлу, выбранному пользователем в диалоговом окне "Открыть файл". Настраиваемое действие «BrowseForFile» задает предопределенное расширенным установщиком свойство (с именем «AI_OFN_FILEPATH») для пути к файлу, выбранному пользователем. Если пользователь нажмет «Отмена» или закроет диалоговое окно «Открыть файл», «AI_OFN_FILEPATH» будет пустым (не заданным).

    Для этого добавьте управляющее событие "Установить значение свойства установщика" на кнопку "Обзор" и настройте его, как показано ниже. Убедитесь, что это управляющее событие происходит после события «Выполнить настраиваемое действие», определенного выше. Также убедитесь, что вы указали условие, как показано, чтобы элемент управления «Правка» не изменялся, если пользователь нажимает «Отмена» в диалоговом окне «Открыть файл». Замените «MY_FILEPATH» на свойство, прикрепленное к вашему элементу управления «Правка» (или элементу управления «Статический текст»).

    СобытиеАргументУсловие
    [MY_FILEPATH][AI_OFN_FILEPATH] AI_OFN_FILEPATH

    1.8 Создайте и запустите проект, чтобы протестировать его. В диалоговом окне «Открыть файл» не будут отображаться никакие фильтры, будет использоваться заголовок по умолчанию («Открыть»), а элемент управления «Имя файла» будет пустым. Подробные сведения о том, как указать некоторые или все из них, см. в приведенных ниже шагах.

    2. Настройте диалоговое окно «Открыть файл»

    У вас есть возможность указать заголовок диалогового окна, фильтры и имя файла, которые будут использоваться для инициализации диалогового окна «Открыть файл». Однако это необязательно.

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

    Порядок этих дополнительных управляющих событий "Установить значение свойства установщика" не имеет значения. Однако очень важно, чтобы они добавлялись до события "Выполнить настраиваемое действие".

    2.1 Указание заголовка диалогового окна «Открыть файл»

    Выполняется путем определения управляющего события "Установить значение свойства установщика", которое устанавливает предопределенное расширенным установщиком свойство "AI_OFN_DLG_TITLE" в соответствующее (отформатированное) значение. Убедитесь, что вы добавили это событие перед управляющим событием «Выполнить настраиваемое действие», как указано выше. Настройте управляющее событие следующим образом:

    СобытиеАргументУсловие
    [AI_OFN_DLG_TITLE]Заголовок вашего диалога (оставьте по умолчанию)

    2.2 Указание фильтров диалога

    Выполняется аналогично настройке заголовка диалога. Вам необходимо установить предопределенное свойство расширенного установщика «AI_OFN_FILTERS» на всю строку фильтра с помощью управляющего события «Установить значение свойства установщика». Вся строка фильтра состоит из пар отдельных строк фильтра. Разделителем является вертикальная черта ("|"). Вам не нужно включать разделитель в конце строки.

    Первая строка в каждой паре — это отображаемая строка, описывающая фильтр (например, "Текстовые файлы"), а вторая строка указывает шаблон фильтра (например, "*.TXT"). Чтобы указать несколько шаблонов фильтров для одной отображаемой строки, используйте точку с запятой для разделения шаблонов (например, «*.H;*.C;*.CPP»). Строка шаблона может быть комбинацией допустимых символов имени файла и подстановочного знака звездочки ("*"). Вы не должны включать пробелы в строку шаблона (если вы это сделаете, пользовательское действие "BrowseForFile" удалит их при анализе строки).

    Примеры спецификаций строки фильтра:

    • Все файлы (*.*)|*.*
    • Файлы лицензии (*.lic)|*.lic|Текстовые файлы (*.txt)|*.txt
    • Текстовые файлы (*.txt)|*.txt|Исходные файлы (*.cpp; *.c; *.h)|*.cpp;*.c;*.h|Все файлы (*.*) |*.*
    • Файлы лицензий (*.lic)|*.lic|Файлы лицензий старого формата (*.lnc; *.dat)|*.lnc;*.dat|Все файлы (*.*)|*.*

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

    СобытиеАргументУсловие
    [AI_OFN_FILTERS] (оставить по умолчанию )

    2.3 Указание имени файла (и, возможно, начального каталога)

    Выполняется путем определения управляющего события "Установить значение свойства установщика", которое задает для предопределенного расширенным установщиком свойства "AI_OFN_FILEPATH" соответствующее значение в формате Formatted. Это значение может включать только имя файла или полный путь к файлу (каталог, содержащийся в этом пути, если он существует, будет использоваться в качестве начального каталога для диалогового окна «Открыть файл»).

    Например, рассматривая пример с файлом лицензии, предположим, что зарегистрированные пользователи вашего приложения обычно копируют лицензию ("license.lic") в папку с именем "License", расположенную в корне системного диска. В этом случае вы можете настроить управляющее событие «Установить значение свойства установщика», как показано ниже:

    СобытиеАргументУсловие
    [AI_OFN_FILEPATH][WindowsVolume] License\license.lic(оставьте по умолчанию)

    Напоминаем, что это событие должно быть добавлено перед управляющим событием "Выполнение пользовательского действия". Например, опубликованные события для кнопки «Обзор» могут выглядеть так, как показано ниже. Первые 3 события в верхней части списка являются необязательными, а остальные 2 – обязательными.

    Просмотреть пример событий кнопки просмотра

    Свойства "AI_OFN_DLG_TITLE" и "AI_OFN_FILTERS" будут сброшены (установлены в ноль) при возврате пользовательского действия "BrowseForFile", потому что если имеется более 1 кнопки "Обзор", используются фильтры и заголовок диалогового окна, определенные для одного из Кнопки будут использоваться для других кнопок, если для этих других кнопок не существует явного определения. Свойство «AI_OFN_FILEPATH» будет пустым (нулевым), только если пользователь нажмет «Отмена» или закроет диалоговое окно «Открыть файл».

    Настраиваемое действие "BrowseForFile" использует следующие флаги для создания диалогового окна "Открыть файл": OFN_EXPLORER, OFN_HIDEREADONLY, OFN_FILEMUSTEXIST, OFN_PATHMUSTEXIST.

    3. Пример проекта

    Загрузите и разархивируйте пример проекта "Обзор файлов", чтобы лучше понять, как настроить собственный пакет. Для сборки и запуска проекта требуется как минимум версия Enterprise Advanced Installer (версия 5.0 или выше).

    Установщик позволяет пользователю выбрать файл лицензии, который для наглядности скопирован в папку «Данные приложения\Ваша компания\Обзор файла — пример» с помощью настраиваемого действия. Событие элемента управления «Выполнить настраиваемое действие» на кнопке «Готово» из «ExitDialog» используется для открытия этой папки после того, как пользователь нажмет «Готово».

    Краткое объяснение настройки примера проекта приведено ниже:

    3.1 На странице параметров установки для папки приложения установлено значение [AppDataFolder][Manufacturer]\[ProductName]. Пользовательское действие скопирует файл, выбранный пользователем, в эту папку.

    3.2 На странице "Файлы и папки" определена операция "Удалить файл", при которой любые файлы с расширением "lic" удаляются из папки приложения при установке или удалении пакета.

    3.3 На странице "Диалоги" было создано новое диалоговое окно "SelectLicenseDlg", в которое были добавлены элементы управления "Правка" и "Кнопка".

    3.4 Свойство, прикрепленное к элементу управления Edit, называется "THE_LICENSE" и будет содержать полный путь к файлу, выбранному пользователем, или будет пустым (не заданным), если файл не выбран.

    3.5 Обратите внимание, как настроены опубликованные события для кнопки "Обзор". Подробную информацию см. в приведенных выше инструкциях.

    3.6 На странице "Дополнительные действия" определены несколько дополнительных действий:

    • Предопределенное настраиваемое действие "BrowseForFile" требуется для отображения диалогового окна "Открыть файл" при нажатии кнопки "Обзор".
    • Другое настраиваемое действие без последовательности ("OpenLicenseFolder") – это предопределенное настраиваемое действие "Запустить файл", которое открывает папку, в которую скопирован файл, выбранный пользователем. Это настраиваемое действие связано с кнопкой "Готово" с помощью управляющего события "Выполнить настраиваемое действие" (см. ниже).
    • Запуск EXE-файла «CopyLicense» с пользовательским действием рабочего каталога используется для копирования файла, выбранного пользователем в диалоговом окне «SelectLicenseDlg», в папку назначения, указанную свойством «APPDIR».

    Обратите внимание, как настроено поле "Командная строка". Для простоты используется команда "COPY" интерпретатора команд ("cmd.exe" на платформах NT), которая получается из переменной среды "ComSpec".

    Условие выполнения этого ЦС гарантирует, что файл копируется только в том случае, если свойство «THE_LICENSE» не пусто. Конечно, нет никакой гарантии, что значение этого свойства указывает на существующий файл или даже допустимый путь к файлу, и для обеспечения этого требуется дополнительная логика (в пользовательском действии «Копировать лицензию»).

    3.7 На странице "Диалоги" обратите внимание на управляющее событие "Выполнить настраиваемое действие" для кнопки "Готово" (из диалогового окна "Выход"), которое вызывает настраиваемое действие "OpenLicenseFolder", определенное на странице настраиваемых действий.

    Члены многих типов в пространстве имен System.IO включают параметр пути, который позволяет указать абсолютный или относительный путь к ресурсу файловой системы. Затем этот путь передается API-интерфейсам файловой системы Windows. В этом разделе обсуждаются форматы путей к файлам, которые можно использовать в системах Windows.

    Традиционные пути DOS

    Стандартный путь DOS может состоять из трех компонентов:

    • Буква тома или диска, за которой следует разделитель томов ( : ).
    • Имя каталога. Символ разделителя каталогов разделяет подкаталоги во вложенной иерархии каталогов.
    • Необязательное имя файла. Символ разделителя каталогов разделяет путь к файлу и имя файла.

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

    < td>Абсолютный путь от корня текущего диска.
    Путь Описание
    C:\Documents\Newsletters\Summer2018 .pdf Абсолютный путь к файлу от корня диска C: .
    \Program Files\Custom Utilities\StringFinder.exe
    2018\January.xlsx Относительный путь к файлу в подкаталоге текущий каталог.
    ..\Publications\TravelBrochure.pdf Относительный путь к файлу в каталоге, начиная с текущего каталога.
    C:\Projects\apilibrary\apilibrary.sln Абсолютный путь к файлу из корня диска C: .
    C:Projects\apilibrary\apilibrary.sln Относительный путь от текущего каталога диска C:.

    Обратите внимание на разницу между двумя последними путями. Оба указывают необязательный спецификатор тома ( C: в обоих случаях), но первый начинается с корня указанного тома, а второй — нет. В результате первый — это абсолютный путь от корневого каталога диска C:, а второй — относительный путь от текущего каталога диска C:. Использование второй формы вместо первой является частым источником ошибок, связанных с путями к файлам Windows.

    Вы можете определить, является ли путь к файлу полным (т. е. не зависит ли путь от текущего каталога и не изменяется при изменении текущего каталога), вызвав метод Path.IsPathFullyQualified. Обратите внимание, что такой путь может включать сегменты относительных каталогов ( . и .. ) и по-прежнему быть полным, если разрешенный путь всегда указывает на одно и то же место.

    В следующем примере показана разница между абсолютным и относительным путями. Предполагается, что каталог D:\FY2018\ существует и что вы не задали текущий каталог для D:\ из командной строки перед запуском примера.

    Если вы хотите, чтобы комментарии к коду были переведены на языки, отличные от английского, сообщите нам об этом в этом обсуждении на GitHub.

    UNC-пути

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

    • Имя сервера или хоста, перед которым стоит \\ . Имя сервера может быть именем компьютера NetBIOS или IP/FQDN-адресом (поддерживаются как IPv4, так и v6).
    • Имя общего ресурса, которое отделяется от имени хоста символом \ . Вместе имя сервера и общего ресурса составляют том.
    • Имя каталога. Символ разделителя каталогов разделяет подкаталоги во вложенной иерархии каталогов.
    • Необязательное имя файла. Символ разделителя каталогов разделяет путь к файлу и имя файла.

    Ниже приведены некоторые примеры путей UNC:

    Путь Описание
    \\system07\C$\< /td> Корневой каталог диска C: в system07 .
    \\Server2\Share\Test\Foo.txt Foo.txt в тестовом каталоге тома \\Server2\Share.

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

    Пути устройств DOS

    Операционная система Windows имеет единую объектную модель, которая указывает на все ресурсы, включая файлы. Эти пути к объектам доступны из окна консоли и отображаются на уровне Win32 через специальную папку символических ссылок, с которыми сопоставляются устаревшие пути DOS и UNC. Доступ к этой специальной папке осуществляется с помощью синтаксиса пути устройства DOS, который может быть одним из следующих:

    Помимо идентификации диска по его букве, вы можете идентифицировать том по его GUID. Это принимает форму:

    Путь устройства DOS состоит из следующих компонентов:

    Спецификатор пути к устройству ( \\.\ или \\?\ ), который идентифицирует путь как путь к устройству DOS.

    Символическая ссылка на «реальный» объект устройства (C: в случае имени диска или Volume в случае GUID тома).

    Первый сегмент пути устройства DOS после спецификатора пути устройства идентифицирует том или диск. (Например, \\?\C:\ и \\.\BootPartition\ .)

    Существует специальная ссылка для UNC, которая, что неудивительно, называется UNC . Например:

    Для UNC устройств часть сервера/общего ресурса образует том. Например, в \\?\server1\e:\utilities\\filecomparer\ часть server/share — это server1\utilities . Это важно при вызове такого метода, как Path.GetFullPath(String, String) с относительными сегментами каталога; невозможно пройти мимо тома.

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

    Пример: способы ссылки на один и тот же файл

    В следующем примере показаны некоторые способы обращения к файлу при использовании API в пространстве имен System.IO. В примере создается экземпляр объекта FileInfo и используются его свойства Name и Length для отображения имени файла и длины файла.

    Нормализация пути

    Почти все пути, передаваемые API Windows, нормализованы. Во время нормализации Windows выполняет следующие шаги:

    • Определяет путь.
    • Применяет текущий каталог к ​​частично определенным (относительным) путям.
    • Канонизирует разделители компонентов и каталогов.
    • Вычисляет относительные компоненты каталога ( . для текущего каталога и ..для родительского каталога).
    • Удаляет определенные символы.

    Эта нормализация происходит неявно, но вы можете сделать это явно, вызвав метод Path.GetFullPath, который заключает в себе вызов функции GetFullPathName(). Вы также можете вызвать функцию Windows GetFullPathName() напрямую, используя P/Invoke.

    Определить путь

    Первым шагом в нормализации пути является определение типа пути. Пути относятся к одной из нескольких категорий:

    • Это пути к устройствам; то есть они начинаются с двух разделителей и вопросительного знака или точки ( \\? или \\. ).
    • Это пути UNC; то есть они начинаются с двух разделителей без знака вопроса или точки.
    • Это полностью определенные пути DOS; то есть они начинаются с буквы диска, разделителя тома и разделителя компонентов ( C:\ ).
    • Они обозначают устаревшее устройство ( CON , LPT1 ).
    • Они относятся к корню текущего диска; то есть они начинаются с одного разделителя компонентов ( \ ).
    • Они относятся к текущему каталогу указанного диска; то есть они начинаются с буквы диска, разделителя томов и без разделителя компонентов ( C: ).
    • Они относятся к текущему каталогу; то есть они начинаются с чего-то еще ( temp\testfile.txt ).

    Тип пути определяет, применяется ли каким-либо образом текущий каталог. Он также определяет, что является «корнем» пути.

    Обработка устаревших устройств

    Если путь представляет собой устаревшее устройство DOS, такое как CON , COM1 или LPT1 , он преобразуется в путь устройства путем добавления \\.\ и возврата.

    Путь, начинающийся с имени устаревшего устройства, всегда интерпретируется методом Path.GetFullPath(String) как устаревшее устройство. Например, путь устройства DOS для CON.TXT — \\.\CON , а путь устройства DOS для COM1.TXT\file1.txt — \\.\COM1 .

    Применить текущий каталог

    Если путь не указан полностью, Windows применяет к нему текущий каталог. К UNC и путям устройств не применяется текущий каталог. Не работает и полный диск с разделителем C:\ .

    Если путь начинается с одного разделителя компонентов, применяется диск из текущего каталога. Например, если путь к файлу — \utilities, а текущий каталог — C:\temp\ , нормализация дает C:\utilities .

    Если путь начинается с буквы диска, разделителя томов и без разделителя компонентов, применяется последний текущий каталог, заданный в командной оболочке для указанного диска. Если последний текущий каталог не был установлен, применяется только диск. Например, если путь к файлу — D:sources, текущий каталог — C:\Documents\, а последний текущий каталог на диске D: — D:\sources\, результатом будет D:\sources\sources. Эти «относительные» пути являются распространенным источником логических ошибок программ и сценариев. Предполагать, что путь, начинающийся с буквы и двоеточия, не является относительным, явно неверно.

    Если путь начинается не с разделителя, применяются текущий диск и текущий каталог. Например, если путь — filecompare, а текущий каталог — C:\utilities\ , результатом будет C:\utilities\filecompare\ .

    Канонизировать разделители

    Все прямые косые черты ( / ) преобразуются в стандартный разделитель Windows — обратную косую черту ( \ ). Если они присутствуют, ряд косых черт, следующих за первыми двумя косыми чертами, сворачивается в одну косую черту.

    Оценить относительные компоненты

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

    На один период текущий сегмент удаляется, так как он ссылается на текущий каталог.

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

    Родительские каталоги удаляются только в том случае, если они не находятся за корнем пути. Корень пути зависит от типа пути. Это диск ( C:\ ) для путей DOS, сервер/общий ресурс для UNC ( \\Server\Share ) и префикс пути к устройству для путей к устройствам ( \\?\ или \\.\ ).

    Обрезать символы

    Вместе с удаленными ранее рядами разделителей и относительных сегментов, при нормализации удаляются некоторые дополнительные символы:

    Если сегмент заканчивается одним периодом, этот период удаляется. (Сегмент из одной или двух точек нормализуется на предыдущем шаге. Сегмент из трех и более точек не нормализуется и фактически является допустимым именем файла/каталога.)

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

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

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

    Пропустить нормализацию

    Обычно любой путь, переданный API Windows, (фактически) передается функции GetFullPathName и нормализуется. Есть одно важное исключение: путь к устройству начинается со знака вопроса, а не с точки. Если путь не начинается точно с \\?\ (обратите внимание на использование канонической обратной косой черты), он нормализуется.

    Почему вы хотите пропустить нормализацию? Есть три основные причины:

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

    Чтобы повысить производительность, пропустив нормализацию, если она уже была выполнена.

    Пропуск проверки нормализации и максимального пути — единственное различие между двумя синтаксисами пути к устройству; в остальном они идентичны. Будьте осторожны, пропуская нормализацию, так как вы можете легко создать пути, с которыми "обычным" приложениям будет сложно работать.

    Пути, начинающиеся с \\?\, по-прежнему нормализуются, если вы явно передаете их функции GetFullPathName.

    Вы можете передавать пути, содержащие более MAX_PATH символов, в GetFullPathName без \\?\ . Он поддерживает пути произвольной длины вплоть до максимального размера строки, который может обрабатывать Windows.

    Case и файловая система Windows

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

    После того как файлы средств отладки для Windows будут на компьютере, запустите Process Explorer. Нажмите «Параметры» и выберите «Настроить символы» ( рис. 5.6 ).

    < бр />

    Рисунок 5.6. Диалоговое окно «Настройка символов» в Process Explorer.

    Настройку Process Explorer и установку или копирование средств отладки для Windows необходимо выполнить только один раз.

    Дополнительную информацию о путях к символам см. в Приложении C. Символы отладки .

    КПК, Blackberry и iPod Forensics

    setupapi.log

    Файл Windows, setupapi.log (в каталоге установки Windows), записывает все установки драйверов после загрузки системы. При первом подключении iPod к системе Windows событие подключения будет записано в этот файл. Информация в этом файле будет соответствовать времени последней записи ряда разделов реестра, связанных с iPod.

    Этот файл также полезен для восстановления последовательности событий подключения iPod и хост-системы, поскольку в нем перечислены установки драйверов. Если iTunes также установлен, каждый случай подключения iPod после загрузки будет записан. Однако, если iTunes не установлен, то будет записана только установка драйвера. Кроме того, если iPod был подключен к хосту до его загрузки, драйверы будут загружаться во время загрузки и не будут записываться, даже если установлена ​​программа iTunes. В любом случае этот файл предоставляет средства для восстановления событий, произошедших на хосте, а также связывает конкретный iPod с конкретным компьютером в заданное время.

    Строительные блоки Intel Threading

    11.1 Обзор

    Библиотека Intel Threading Building Blocks (TBB) уже несколько лет находится в свободном доступе как программное обеспечение с открытым исходным кодом. Эта легко устанавливаемая и настраиваемая (см. Приложение A) библиотека дополняет C++ многоядерным параллелизмом. Он содержит полную документацию и значительное количество примеров кода, иллюстрирующих его наиболее важные и тонкие аспекты:

    Документация, сопровождающая выпуск, доступна из /docs/index.hmtl в каталоге установки TBB. Он содержит полную информацию обо всех компонентах библиотеки.

    Примеры, прилагаемые к выпуску, находятся в каталоге /examples.

    Онлайн-документация на веб-сайте. Особенно важны три ссылки: Справочное руководство [ 17 ], учебное пособие TBB Getting Started [ 32 ] и Руководство пользователя [ 33 ]. Все они содержат подробные обсуждения и примеры работы TBB, а Справочное руководство включает полную информацию обо всех компонентах библиотеки.

    Книга Джеймса Рейндерса, Intel Threading Building Blocks, представляет собой полное и обучающее представление среды параллельного программирования TBB [ 34 ].

    Книга Структурированное параллельное программирование М. Маккула, А. Д. Робисона и Дж.Рейндерс [35] подробно обсуждает, как TBB, а также OpenMP и Cilk Plus [1] справляются с большим разнообразием параллельных контекстов. Эта книга представляет собой углубленное руководство по параллельному программированию и содержит подробную и полезную информацию о том, как работают эти три среды программирования.

    Ядром библиотеки является ориентированная на задачи среда программирования и выполнения, реализующая, как и в случае OpenMP и Cilk Plus, усовершенствованные стратегии планирования задач. API программирования общей памяти TBB работает на трех уровнях абстракции:

    На самом высоком уровне TBB предоставляет мощные алгоритмы, подобные STL, реализованные в виде шаблонных функций или классов C++, которые управляют параллельной обработкой, скрывая от программиста основную операцию планировщика пула потоков. Многие из этих высокоуровневых алгоритмов используют стратегию разветвления на уровне задач, предназначенную для оптимизации баланса нагрузки и эффективности кэш-памяти. Их можно рассматривать как механизмы автоматического распараллеливания, расширяющие в нескольких направлениях функциональные возможности, предоставляемые директивой parallel for в OpenMP.

    На следующем уровне TBB обеспечивает ограниченный прямой доступ к планировщику задач. Простой и элегантный API-интерфейс планировщика задач предоставляется классом task_group, что обеспечивает немедленный доступ к самым основным службам планировщика. В двух словах, этот программный интерфейс представляет собой упрощенный дескриптор набора функций, объединяющих конструкции синхронизации Taskwait (задачи, ожидающие прямых дочерних элементов) и TaskGroup (задачи, ожидающие всех потомков), а также функции отмены группы задач, обсуждалось в предыдущей главе об OpenMP.

    Наконец, есть полный API планировщика задач, обеспечивающий доступ к нескольким дополнительным функциям, наиболее важной из которых является установление иерархических отношений между задачами для управления работой планировщика задач. Предварительный просмотр этой функции был дан при обсуждении пункта зависимой задачи в OpenMP. Действительно, в OpenMP 4.0 недавно были включены функции иерархической зависимости задач. В TBB иерархические отношения между задачами лежат в основе архитектуры планировщика.

    В этой главе рассматриваются первые два уровня абстракции: высокоуровневые STL, подобные параллельным алгоритмам, и упрощенный доступ к планировщику задач. Более подробное использование планировщика задач TBB обсуждается в главе 16.

    TBB лежит в основе Intel Parallel Suite. Intel также предлагает расширение C++ под названием Cilk Plus [1] с базовой моделью выполнения, близкой к TBB. Просто добавив три новых ключевых слова в C++, Cilk Plus предоставляет простой способ выражения потенциального параллелизма. Однако Cilk Plus требует поддержки компилятора, а TBB работает как отдельная библиотека. Мы вернемся к этому вопросу позже в этой главе.

    Дополнительные компоненты Windows и поставщики приложений WMI

    5.5.2 Microsoft Operation Manager

    При установке Microsoft Operation Manager (MOM) поставщик WMI, поставляемый с продуктом, не устанавливается по умолчанию. В каталоге установки MOM («C:\Program Files\Microsoft Operation Manager 2000\One Point») находится файл MOF с именем OM.MOF. Вы должны скомпилировать файл OM.MOF с помощью MOFComp.Exe, чтобы поставщик MOM и его уникальный внешний класс событий были зарегистрированы в репозитории CIM.

    После завершения создается новое пространство имен с именем Root\MCS. Поставщик MOM реализован как поставщик событий, что означает, что запросы событий WQL не должны использовать оператор WITHIN. Запрос события WQL будет выглядеть следующим образом:

    < бр />

    Внешний класс событий OM_Alert представляет оповещения, созданные на консоли MOM. Целью этого провайдера с его уникальным классом является уведомление подписчиков событий WMI, заинтересованных в получении уведомлений для предупреждений MOM. Класс OM_Alert предоставляет свойства, перечисленные в Табл. 5.36.

    Таблица 5.36. Класс внешних событий OM_Alert с классами MOM SP1

    < td >Представляет оповещение MOM и предоставляет доступ к сведениям о статусе оповещения и другим свойствам.< /tr>

    Самый большой интерес во внешнем классе событий OM_Alert заключается в возможности сопряжения любых других продуктов управления с MOM. Конечно, это возможно только при условии, что продукты управления поддерживают использование данных WMI. Например, компания может решить использовать MOM для управления и мониторинга среды Microsoft, в то время как сгенерированные оповещения перенаправляются в другое программное обеспечение для управления предприятием, имеющее возможности использования данных WMI. В таком случае программное обеспечение для управления предприятием будет использовать оповещения, созданные классом OM_Alert.

    При установке MOM с пакетом обновления 1 другой поставщик WMI расширяет возможности управления и набор информации, доступный из MOM через WMI. Этот новый поставщик WMI предоставляет предупреждения, историю предупреждений, компьютеры, группы компьютеров и ассоциации «компьютер-группа компьютеров». Однако по умолчанию, как и в случае с предыдущим провайдером MOM, он по умолчанию не зарегистрирован в репозитории CIM

    .

    После установки пакета обновления 1 каталог установки MOM («C:\Program Files\Microsoft Operation Manager 2000\One Point») содержит файл MOF с именем MOMWMI.MOF. После завершения регистрации с помощью MOFCOMP.EXE создается новое пространство имен с именем Root\MOM, содержащее классы, перечисленные в таблице 5.36.

    Тематические исследования

    6.2.3.3 Компиляция проекта

    В локальном каталоге установки DDK вы можете найти папку с именем sample, которая содержит ряд примеров разработки для процессоров Ascend AI. Из-за таких факторов, как обновление версии и итерация алгоритма, рекомендуется получить эталонные образцы сети классификации с официального сайта Ascend. c Для типичных сценариев, таких как классификация изображений и распознавание объектов, там можно найти соответствующий код. Здесь ResNet50 относится к модели классификации изображений. После завершения преобразования модели вы можете начать компиляцию и выполнение локального проекта на основе встроенных эталонных примеров классификации изображений (classify_net/).

    Учитывая, что контекст среды компиляции отличается, процедура компиляции разделена на два этапа. Исполняемый файл и файл динамической библиотеки на стороне устройства рекомендуется компилировать отдельно. Для макетной платы Atlas, которая представляет собой вычислительную платформу с независимым процессором для выполнения вывода, среда для компиляции исполняемых файлов находится на стороне устройства. Для среды, в которой карта PCIe или карта-ускоритель управляется центральным процессором на стороне хоста, среда для компиляции исполняемых файлов должна быть установлена ​​на стороне хоста. Для всех типов платформ Ascend среда для составления библиотеки ссылок и сценарий, в котором выполняется проект, должны быть согласованы сами с собой.

    Измените файл classify_net/Makefile_main в соответствии с реальной ситуацией и скомпилируйте исполняемый файл. Измените следующие элементы:

    DDK_HOME: каталог установки ddk. Значение по умолчанию: «../../che/ddk/ddk/».

    CC_SIDE: указывает сторону, на которой скомпилирован файл. Значение по умолчанию — хост. При использовании макетной платы Atlas установите для этого параметра значение device. Обратите внимание, что значение указано в нижнем регистре.

    CC_PATTERN: указывает сценарий, в котором выполняется проект, значение по умолчанию — ASIC. В сценарии Atlas значение изменяется на Atlas.

    После модификации запустите файл classify_net/Makefile_main. Вы можете создать серию исполняемых файлов в папке «out» текущего пути. Различия могут различаться в зависимости от версии программного обеспечения и сценария эталонных образцов.Измените файл «classify_net/Makefile_device» d, чтобы изменить значение CC_PATTERN. Значение по умолчанию — ASIC. В сценарии Atlas значение изменяется на Atlas. После успешного выполнения в папке «classify_net/out» создается ряд файлов библиотеки ссылок, включая libai_engine.so. На данный момент все файлы, необходимые для выполнения вывода на платформе Ascend, готовы.

    После завершения компиляции вставьте файлы ResNet50.om и ResNet50.prototxt, успешно преобразованные на предыдущем шаге, в путь «classify_net/model» на стороне устройства и измените соответствующий путь механизма вывода в « graph_sample.txt» по пути, описанному в предыдущей главе.

    Код в Code 6.5 представляет собой типичный образец базового определения механизма логического вывода. В коде «id» указывает идентификатор текущего движка, «engine_name» может быть определен считывателем, а «side» указывает позицию, в которой выполняется программа (DEVICE указывает на сторону устройства, а HOST — на сторону хоста). . «so_name» относится к файлу библиотеки динамической компоновки, созданному на предыдущем шаге. В «ai_config» вы можете использовать поле «model_path» для настройки пути к модели. В этом примере путь изменяется на путь om, сгенерированный преобразованием.

    Читайте также:

    Класс поставщика MOM (окончательная первоначальная версия)
    КлассОписание
    OM_AlertПредупреждение One Point Operations Manager
    Класс поставщика MOM (SP1)
    КлассОписание
    MSFT_Alert
    MSFT_AlertHistoryПредставляет историю оповещений MOM и предоставляет доступ к сведениям о статусе оповещения и другим свойствам.
    MSFT_AlertResolutionStateПредставляет оповещение MOM и предоставляет доступ к сведениям о статусе оповещения и другим свойствам. .
    MSFT_ComputerПредставляет компьютер MOM в управляемой среде MOM.
    MSFT_ComputerGroupПредставляет группу компьютеров MOM.
    MSFT_MicrosoftOperationsManagerПредставляет информацию о программном обеспечении MOM (дата установки, версия).
    MSFT_TodayStatisticsПредоставляет ежедневные суммы для нескольких наиболее важных измерений в сетевой среде, отслеживаемой Microsoft Operations Manager.
    MSFT_ScriptПредставляет сценарий MOM со всеми его параметрами.
    MSFT_AlertHistoryToAlertResolutionStateСвязывает историю предупреждений со своим состоянием.
    MSFT_AlertToAlertResolutionStateСвязывает предупреждение с его состоянием.
    MSFT_AlertToAlertHistoryAssociates оповещение с историей.
    MSFT_AlertToComputerСвязывает оповещение с компьютером.
    MSFT_Comp uterToComputerGroupСвязывает компьютер с группой компьютеров.
    MSFT_ScriptToCompuerGroupСвязывает скрипт с группой компьютеров.