Поэтапное создание проекта установки и развертывания приложения WPF

Автор: Диптимайя Патра (Diptimaya Patra)

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

Создание проекта приложения WPF

Запустите Visual Studio 2008, создайте новый проект приложения WPF и назовите этот проект MyApplication.

Мы добавим другую библиотеку пользовательских элементов управления WPF, чтобы получить комплексность нескольких проектов и их зависимости. Поэтому добавим в решение новый проект и назовем его WPFHelper.

Давайте сделаем это проще. При добавлении библиотеки пользовательских элементов управления WPF, которая включает в себя файл UserControl1.xaml, удалите этот файл, добавьте класс и дайте ему имя Employee.cs.

Создайте следующую структуру для простоты.

namespace WPFHelper

    public class Employee
    {
        public string Name { get; set; }
    }
}

Теперь структура решения выглядит следующим образом:

Теперь добавим ссылку этого WPFHelper в MyApplication.

Вернемся в наше главное приложение "MyApplication" и добавим несколько элементов управления, чтобы оно могло иметь зависимости в сборке проекта WPFHelper.

Я добавил элемент управления ComboBox, который будет содержать имена сотрудников (Employee).

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

В XAML:

<Window x:Class="MyApplication.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WPFHelper;assembly=WPFHelper"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <ComboBox x:Name="cmbEmployeeNames" Height="23" Margin="21,29,98,0" VerticalAlignment="Top" ItemsSource="{Binding}">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}"/>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>
    </Grid>
</Window>

В C#:

public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
            List<Employee> myList = new List<Employee>
            {
                new Employee{ Name="Some 1"},
                new Employee{ Name="Some 2"},
                new Employee{ Name="Some 3"},
                new Employee{ Name="Some 4"},
                new Employee{ Name="Some 5"}
            };

            cmbEmployeeNames.ItemsSource = myList;
        }
    }

Теперь запустим приложение, чтобы протестировать его.

Да, все сделано хорошо.

Теперь наступает время самой важной части, которую мы пройдем поэтапно.

Этап 1

Добавим в решение проект установки и развертывания и назовем его MyApplicationSetup.

Как только проект будет добавлен, откроется представление File Explorer (Проводник).

Структура решения теперь будет выглядеть следующим образом:

В левой области мы видим системные папки, а в правой области отображается содержимое конкретной папки.

Если посмотреть выше, то у нас имеется 3 системные папки. При необходимости можно добавить другие системные папки.

Следующий список отображается, если щелкнуть правой кнопкой мыши в корне и выбрать в раскрывающемся меню пункт "Add Special Folder" ("Добавить специальную папку").

Этап 2

Добавим папку Program File's Folder в наш проект установки.

Далее приводится порядок добавления содержимого в папки.

  1. Папка Application Folder.
    а. Эта папка должна содержать основные выходные файлы и зависимости.
     
  2. Папка Program Files Folder
    а. Эта папка должна содержать папку, в которую во время установки будут копироваться основные выходные файлы, и необходимые файлы (файлы ресурсов, такие как значки, файлы конфигурации и пр.).
     
  3. Папка User's Desktop
    а. Эта папка должна содержать ярлык приложения.
     
  4. Папка User's Program Menu
    а. Эта папка должна содержать ярлык приложения.

Этап 3

Теперь добавим основные выходные файлы и зависимости в папку Application Folder.

Выберем, как показано выше.

Появятся проекты, которые доступны для добавления в решение. Поскольку MyApplication является запускаемым проектом, выберите его и нажмите кнопку "ОК". В папке произойдут следующие изменения:

Этап 4

Теперь добавим папку в папку Program Files Folder.

Этап 5

Дадим этой папке имя "My Application".

Этап 6

Повторим то же самое для папки Application Folder.

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

Этап 7

Сейчас следует добавить ярлык в папку User's Desktop.

Перейдите в папку приложения, создайте ярлык основных выходных файлов и переименуйте его соответствующим образом. Затем переместите этот файл в папку User's Desktop. Приведенные ниже экраны помогут это сделать.

Этап 8

Теперь проделаем ту же процедуру для папки User's Program Menu. Для нее требуется выполнить то же самое.

Необходимо выполнить последний этап работы для всех добавленных папок и файлов. Установить свойство с именем AlwaysCreate в значение True. По умолчанию оно имеет значение False.

Этап 9

Измените значение свойства AlwaysCreate на True для всех папок и файлов.

Изменение расположения папки приложения по умолчанию

По умолчанию папка приложения находится в расположении [Папка_Program_Files][Производитель]\[Имя_продукта]
.
Если не нужно изменять это расположение, то хорошо. Но если [Производитель] предоставлен в атрибуте, то в папке Program Files будет создана папка Microsoft, а затем папка приложения.

Я предпочитаю удалить этот атрибут, чтобы папка приложения была непосредственно в папке Program Files.

Измените расположение по умолчанию на следующее: [Папка_ Program_Files] \[Имя_продукта].

Теперь наш проект установки готов. Перестройте решение, а затем перестройте проект установки.

Перейдите в каталог отладки (Debug) проекта установки. Здесь можно найти файлы установки, MSI-файл и EXE-файл.

Первый файл предназначен для распространения.

Проект установки для приложения WPF успешно создан.

Надеюсь, эта статья будет полезной.